通用型的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的个数)的主要内容,如果未能解决你的问题,请参考以下文章

Java Web-----JSP与Servlet

手写Servlet 到 Spring MVC 的简化之路

javaWEB中的ServletRequest,ServletResponse的使用,及简化Servlet方法

Spring MVC是如何逐步简化Servlet的编程的

Servlet3.0简化实现文件上传

通用上传Servlet