通用型的Servlet(简化Servlet的个数)
Posted jffx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用型的Servlet(简化Servlet的个数)相关的知识,希望对你有一定的参考价值。
我们在编写Web项目的是候,要产生动态页面于是就有请求,而每一个请求就对应了一个Servlet,这个时候,如果页面如果数量较多,那么我们所编写的Servlet也是很多的,于是就出现了通用的Servlet.
这么举个例子吧:
一个学生表, 恩--要有CRUD操作的话,至少要5个Servlet对吧,(Update操作需要两个,一个查找并显示,另一个负责修改), 这么算,操作一张表就有了5个,那平时如果我们编写的表愈多,那么.....
呵呵,死不是不敢想象,于是就出现了通用的,怎么说呢,就是一个小操作,
1.将所有的功能,都集成到一个类中,也就是将原先编写在Servlet的doget或者doPost方法的内容,单独写到一个独立的方法,这样方法多少无所谓,不过可得要记住方法名,这在后面编写方法时有用.
2.在页面上填写Servlet路径的时候,添加一个参数 method="你编写的方法名",
恩~完了,接下来看代码
再提一下,我们都知道,请求到来时,tomcat会调用HttpServlet 的 service()方法然后由service()方法负责判断转交给那个方法像doGet()等,我们平时就覆写doGet()等,在这里我们要对HttpServlet()的service()方法进行拓展一下.
1 package com.item.servlet; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import java.io.IOException; 8 import java.lang.reflect.Method; 9 10 //从此类来代替HttpServlet, 每次只需要继承BaseServlet即可 11 public class BaseServlet extends HttpServlet { 12 @Override 13 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 15 //获取url提交参数 -- 方法名 16 //这里具体的方法在子类实现 17 String md = req.getParameter("method") ; 18 System.out.println(md) ; 19 String path = null ; //转发的url 20 21 try { 22 //获取本类对象的 字节码对象 23 Class aClass = this.getClass() ; 24 25 //获取类对象的叫 md 的方法 26 //第一个参数为方法名,后面的参数是该方法的形参列表,
这里插入一个链接,可以去看一些其他人的解释 https://blog.csdn.net/handsome_fan/article/details/54846959
27 Method method = aClass.getMethod(md, HttpServletRequest.class, HttpServletResponse.class) ; 28 29 //通过Method对象调用其md方法 30 if(null != method) { 31 // @param obj the object the underlying method is invoked from 32 path = (String) method.invoke(this, req, resp) ; 33 } 34 //如果需要转发,那么方法返回一个非null字符串表示路径 35 if(null != path) { 36 req.getRequestDispatcher(path).forward(req, resp) ; 37 } 38 } catch (Exception e) { 39 e.printStackTrace() ; 40 } 41 } 42 }
恩,有了这个之后,其他的就很好做了
首页
<%-- Created by IntelliJ IDEA. User: jff Date: 19-1-26 Time: 下午7:22 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>练习</title> <%--//Jquery库--%> <script src="js/jquery-1.4.2.min.js"></script> <script> function doMesg() { $.post("/mytest/DemoServlet", {"method": "update"}, function(data) { alert(data) ; }, "json") ; } </script> </head> <body> <h1>添加请求</h1> <form action="/mytest/DemoServlet" method="POST"> <input type="hidden" name="method" value="add"> 信息:<input type="text"> <input type="submit" value="添加" /> </form> <h1>删除</h1> <a href="/mytest/DemoServlet?method=remove">删除</a> <h1>修改</h1> <button onclick="doMesg()" >修改</button> </button> </body> </html>
长这个样子
------------------
我们只需要继承自BaseServlet,编写自己所需的方法,即可
1 package com.item.servlet; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.annotation.WebServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import java.io.IOException; 8 9 //简便方式 10 @WebServlet( 11 urlPatterns = {"/DemoServlet"} 12 ) 13 public class DemoServlet extends BaseServlet { 14 //添加 15 public String add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 16 System.out.println("添加"); 17 return "" ; //这里要返回转交的url 18 } 19 public String remove(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 20 System.out.println("删除"); 21 return "" ; 22 } 23 public String update(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 24 System.out.println("更新") ; 25 return null ; 26 } 27 }
//运行实例嘛,可行,
-------------------------------------------------------------------------------------------------------------------------------
一起学习,一起进步.
以上是关于通用型的Servlet(简化Servlet的个数)的主要内容,如果未能解决你的问题,请参考以下文章