javaWeb 复习系列(四)---- 多个请求映射到同一个 Servlet
来源:互联网 发布:淘宝买二手东西在哪 编辑:程序博客网 时间:2024/06/05 21:01
我们在开发 javaweb 程序的时候,都需要处理请求与 Servlet 的映射关系。传统的方法是一个请求对应一个 Servlet,这样做的明显缺点就是在 web.xml 文件中映射的 Servlet 的映射数量太多了,而且不利于功能的封装。比如一个 Servlet 中应该对应一套增删改查的操作,如果将这些功能都分离开来从而写成 AddServlet、DeleteServlet、UpdateServlet、QueryServlet 无疑是对功能封装的极大破坏,而且不利于代码的维护。那么如何将一系列请求映射到同一个 Servlet 中从而减少需要映射的 Servlet 的个数呢?这里提供两种常见的方法。
一种办法是给每个请求后面加上请求参数,然后根据请求参数决定调用同一个 Servlet 中的哪个方法来处理。jsp 页面上代码如下:
<span style="white-space:pre"></span><a href="TestServlet?method=add">Add</a><br><br><a href="TestServlet?method=delete">Delete</a><br><br><a href="TestServlet?method=update">Update</a><br><br><a href="TestServlet?method=query">Query</a><br><br>代表要请求的url。Servlet 的处理代码如下:
@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 获取请求参数String menthod = request.getParameter("method");//根据不同参数调用不同的处理方法switch (menthod) {case "add":add(request, response);break;case "delete":delete(request, response);break;case "update":update(request, response);break;case "query":query(request, response);break;default:break;}}在 Servlet 中获取请求参数,调用对应的处理方法,从而达到不同请求对应同一个 Servlet 的目的。处理方法代码如下:
<span style="white-space:pre"></span>private void query(HttpServletRequest request, HttpServletResponse response) {System.out.println("query...");}private void update(HttpServletRequest request, HttpServletResponse response) {System.out.println("update...");}private void delete(HttpServletRequest request, HttpServletResponse response) {System.out.println("delete...");}private void add(HttpServletRequest request, HttpServletResponse response) {System.out.println("add...");}这是第一种方法,这种方法的缺点是每当有个新的请求,就需要在代码中添加一个 switch 的分支,并且添加对应的处理方法,而且在请求的 url 中暴露了要调用的方法,可能存在安全隐患。下面介绍第二种方法。
首先给每个请求的url加上统一的后缀,比如 .do 或 .action 等,然后在web.xml 文件中配置 url-patten 的值为 *.do 或 *.action ,在 Servlet 中首先利用 ServletPath 的值获取请求的方法,然后利用反射调用对应的方法来处理请求。jsp 页面代码如下:
<span style="white-space:pre"></span><a href="add.do">Add</a><br><br><a href="delete.do">Delete</a><br><br><a href="update.do">Update</a><br><br><a href="query.do">Query</a>Servlet 处理请求的代码如下:
<span style="white-space:pre"></span>//得到的结果是 /add.do,/delete.do等形式String servletPath = request.getServletPath();String methodName = servletPath.substring(1);//得到真正的请求方法名 add,delete等形式methodName = methodName.substring(0, methodName.length()-3);//利用反射调用对应的处理方法try {Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);method.invoke(this, request,response);} catch (Exception e) {e.printStackTrace();}反射调用的方法如下:
<span style="white-space:pre"></span>public void query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{System.out.println("query...");}public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{System.out.println("update...");}public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{System.out.println("delete...");}public void add(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{System.out.println("add...");}对应的 Servlet 的配置文件如下:
<servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.demo.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>这种方法的优点是不需要写大量的 switch 分支,要添加请求只需要添加对应的处理方法即可。
以上就是使用不同的方法使多个请求对应到同一个 Servlet 的用法。
0 0
- javaWeb 复习系列(四)---- 多个请求映射到同一个 Servlet
- 多个请求访问同一个servlet
- 多个请求如何使用同一个 Servlet ?
- 多个请求使用同一个Servlet
- 映射请求到 Servlet
- 多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE)
- Servlet笔记--利用反射实现多个请求使用同一个Servlet
- 整理一下当年的学习笔记之:多个请求使用同一个Servlet
- JavaWeb复习一----Servlet
- servlet复习(四)过滤器
- 同一个类,映射多个窗口
- 同一个类,映射多个窗口
- 将多个类似命令消息或多个控件消息映射到同一个响应函数:ON_COMMAND_RANGE
- javaWeb 复习系列(一)
- javaWeb 复习系列(二)
- javaweb 复习系列(三)
- Servlet(四)Servlet映射URL
- 1.JavaWeb 复习之servlet
- cocos2dx笔记之单例模式
- 导入连连支付demo到myeclipse10的三个问题
- C#版操作系统实验—CPU调度
- ServletContextListener
- mysql数据库优化(转载)
- javaWeb 复习系列(四)---- 多个请求映射到同一个 Servlet
- 设置nginx和PHP上传文件大小限制
- LightOJ 1370 Bi-shoe and Phi-shoe
- iptables详解
- 集合分解
- 为Fragment中的ListView添加Adapter
- mysql语句优化
- eclipse在编写代码时字体突然改变了怎么变回来
- 详解APP应用分发平台的榜单推荐和搜索排名规则