servlet从客户端向服务端发送请求调用功能的几种方式
1:通过表单向服务端发起请求 (action)
2:通过链接向服务端发起请求
3:通过ajax向服务端发起请求
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>--这里添加ajax的东西
</head>
<body>
<form action="/BaseServlet/ServletDemo01?method=addStu" method="post">--1,通过页面action 点提交按钮触发servlet
用户<input type="text" name="username"/><br/>
<button>提交</button>
</form>
<br/>
<a href="/BaseServlet/ServletDemo01?method=delStu">删除学生</a><br/>--2,通过点‘删除学生’,链接触发servlet
<button onclick="fn()">按钮</button> --3,通过按钮ajax触发servlet
<script>
function fn(){
$.post("/BaseServlet/ServletDemo01",{"method":"checkStu","user":"tom"},function(data){
alert(data);
});
}
</script>
</body>
</html>
通过表单的请求触发到传到servlet中:
public class ServletDemo01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String md=request.getParameter("method");
String path=null;
if("addStu".equals(md)){
path=addStu(request, response);
}else if("delStu".equals(md)){
path=delStu(request, response);
}else if("checkStu".equals(md)){
path=checkStu(request, response);
}else if("".equals(md)){
}
if(null!=path){
request.getRequestDispatcher(path).forward(request, response);
}
}
protected String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("添加学生");
return "/test.html";
}
protected String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("删除学生");
return "/test.html";
}
protected String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("检查学生");
response.getWriter().println("DDDDDD");
return null;
}
}
优化:接下来通过反射 执行对应方法, 减少判断method的if else语句
public class ServletDemo02 extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String md=request.getParameter("method");
String path=null;
Class clazz = this.getClass();
try {
Method method=clazz.getMethod(md, HttpServletRequest.class,HttpServletResponse.class);
if(null!=method){
path=(String)method.invoke(this, request,response);
}
if(null!=path){
request.getRequestDispatcher(path).forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("添加学生");
return "/test.html";
}
public String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("删除学生");
return "/test.html";
}
public String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("检查学生");
response.getWriter().println("DDDDDD");
return null;
}
}
继续优化:抽取出一个servlet的公共类
public class BaseServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service.....");
String md=request.getParameter("method");
String path=null;
Class clazz = this.getClass();
try {
Method method=clazz.getMethod(md, HttpServletRequest.class,HttpServletResponse.class);
if(null!=method){
path=(String)method.invoke(this, request,response);
}
if(null!=path){
request.getRequestDispatcher(path).forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果再添加模块,此时父类的service方法通过反射直接找到此模块下的方法,只需要写对路径 :
public class ServletDemo03 extends BaseServlet {
public ServletDemo03() {
System.out.println("没有参数构造函数");
}
public String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("添加学生");
return "/test.html";
}
public String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("删除学生");
return "/test.html";
}
public String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("检查学生");
response.getWriter().println("DDDDDD");
return null;
}
}