从jsp或者html发送请求给Servlet,这些请求包含数据的增删改查,如果每个功能都写一个Servlet,那显得也太不上档次了。
因此,如何实现页面发送的增删改查等不同的请求,用同一个Servlet来处理呢?
在WebContent目录下新建test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
添加
删除
修改
查询
在src目录下新建一个包com.njupt.javaweb.servlet,并在其下创建CustomerServlet.java,映射为/customerServlet
package com.njupt.javaweb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CustomerServlet
*/
@WebServlet("/customerServlet")
public class CustomerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String method = request.getParameter("method");
switch(method) {
case "add":
this.add(request, response);
break;
case "delete":
this.delete(request, response);
break;
case "modify":
this.modify(request, response);
break;
case "query":
this.query(request, response);
break;
default:
this.Error(request, response);
break;
}
}
private void add(HttpServletRequest request, HttpServletResponse response){
System.out.println("add");
}
private void delete(HttpServletRequest request, HttpServletResponse response){
System.out.println("delete");
}
private void modify(HttpServletRequest request, HttpServletResponse response){
System.out.println("modify");
}
private void query(HttpServletRequest request, HttpServletResponse response){
System.out.println("query");
}
private void Error(HttpServletRequest request, HttpServletResponse response){
System.out.println("error");
}
}
至此,点击不同的超链接,就会调用不同的方法
在WebContent目录下新建test2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
添加
删除
修改
查询
在src目录下的com.njupt.javaweb.Servlet包下新建Servlet CustomerServlet2.java 映射路径为*.do
package com.njupt.javaweb.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CustomerServlet2
*/
@WebServlet("*.do")
public class CustomerServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取请求的ServletPath 如/add.do
String servletPah = request.getServletPath();
//截取字符串 如 /add.do-------->add
String methodName = servletPah.substring(1, servletPah.length()-3);
System.out.println(methodName);
try {
//利用反射获取对应的方法
Method method = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//调用对应的方法
method.invoke(this,request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
//这里进行错误处理,如果请求的页面没有对应的方法,重定向到错误页面
//e.printStackTrace();
this.Error(request, response);
}
}
private void add(HttpServletRequest request, HttpServletResponse response){
System.out.println("add");
}
private void delete(HttpServletRequest request, HttpServletResponse response){
System.out.println("delete");
}
private void modify(HttpServletRequest request, HttpServletResponse response){
System.out.println("modify");
}
private void query(HttpServletRequest request, HttpServletResponse response){
System.out.println("query");
}
private void Error(HttpServletRequest request, HttpServletResponse response){
System.out.println("error");
}
}
至此,点击不同的超链接,就会调用不同的方法