[原创]java WEB学习笔记22:MVC案例完整实践(part 3)---多个请求对应一个Servlet解析
2016-05-26 22:56
926 查看
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------多个请求对应一个Servlet解析
如果我们每一个请求对应一个Servelt,这样的话,代码就显得比较臃肿,最主要的是,也不方便系代码的管理和优化
方式一:
1. 思路:对于每一个页面请求我们设置成一个对应的方法,并且为请求的url设置相应的method参数,servlet-mapping 为 @WebServlet("/customerServlet") ,而在Servlet 中通过获取 method 参数不同的取值,通过一个switch 语句选择不同的方法,同时调用不同的方法。
2. 代码:test1.jsp , CustomerServlet1.java
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试</title> </head> <body> <a href="customerServlet?method=add">Add1</a> <br><br> <a href="customerServlet?method=query">Query1</a> <br><br> <a href="customerServlet?method=delete">Delete1</a> <br><br> <br><br> <br><br> </body> </html>
CustomerServlet1.java
package com.jason.mvcapp.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 CustomerServlet1 extends HttpServlet { private static final long serialVersionUID = 1L; /** * */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String method = request.getParameter("method"); switch (method) { case "add": add(request, response); break; case "query": query(request, response); break; case "delete": delete(request, response); break; } } private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("delete"); } private void query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("query"); } private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("add"); } }
方法二:
1. 思路:将所有的请求都设置成 方法名.do, 而将 servlet-mapping 为 @WebServlet("*.do"),即响应所有以 .do 结尾的请求.在Servlet中通过反射,获取运行时类,之后invoke() 调用方法
2.代码:test2.jsp , CustomerServlet2.java
test2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试2</title> </head> <body> <a href="addCustomer.do">Add2</a> <br><br> <a href="query.do">Query2</a> <br><br> <a href="deleteCustomer.do">Delete2</a> <br><br> <a href="update.do">Update2</a> <br><br> <a href="editeCustomer.do">Edite2</a> <br><br> </body> </html>
CustomerServlet2.java
package com.jason.mvcapp.servlet; import java.io.IOException; import java.lang.reflect.InvocationTargetException; 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; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取servletPath:/add.do 或者 query.do 28 String serveltPath = request.getServletPath(); 29 30 System.out.println(serveltPath); 31 //2.去除/ 和 .do 得到对应的方法,如 add query 32 String methodName = serveltPath.substring(1); 33 methodName = methodName.substring(0, methodName.length() - 3); 34 // System.out.println(methodName); 35 36 try { 37 //3.利用反射获取methodName对应的方法 38 Method method = getClass().getDeclaredMethod(methodName, 39 HttpServletRequest.class, HttpServletResponse.class); 40 41 //4.利用反射调用方法 42 method.invoke(this, request, response); 43 } catch (Exception e) { 44 45 e.printStackTrace(); 46 } } private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("update"); } private void editeCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("edit"); } private void deleteCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("delete"); } private void query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("query"); } private void addCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("add"); } }
总结:
1)理解由方式一过度到方法二;
2)理解反射获取当前类,获取提交的方法,及解析,调用相应的方法;
相关文章推荐
- Eclipse上安装GIT插件EGit及使用
- java中读取properties文件
- java反射——基础
- Java基础:参数传递(三)
- windows下安装jdk及配置环境变量
- 《java入门第一季》之根据小案例体会泛型
- 《java入门第一季》之根据小案例体会泛型
- Java基础:参数传递(二)
- Java之------单机版书店管理系统(设计思想和设计模式系列一)概述
- Java基础:参数传递(一)
- Java之环境
- Java基础-精确浮点:strictfp(strict float point)
- 《java入门第一季》之泛型引入
- 《java入门第一季》之泛型引入
- JAVA反射机制
- Spring mybatis Access denied for user 'root'@'localhost' (using password:YES)
- Spring MVC 教程,快速入门,深入分析
- JAVA - 回调机制
- 学习SpringMVC(二十三)之拦截器相关
- Spring 系列: Spring 框架简介