之前都是集成的Servlet真的太过于繁琐了, Servlet接口提供了一个实现类 为HttpServlet 只要实现doGet 和doPost方法就可以了
仍然以一个表单为例
新建一个web工程
1 packagecom.xiaoan.test;2
3 importjavax.servlet.http.HttpServlet;4 importjavax.servlet.http.HttpServletRequest;5 importjavax.servlet.http.HttpServletResponse;6
7 public class TestHttpServlet extendsHttpServlet{8
9 /**
10 *11 */
12 private static final long serialVersionUID = 1L;13
14
15 public voiddoGet(HttpServletRequest req, HttpServletResponse resp){16 System.out.println("GET METHOD");17 }18
19 public voiddoPost(HttpServletRequest req, HttpServletResponse resp){20 System.out.println("POST METHOD");21 }22 }
编辑web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 testHttpServlet
4
5
6 TestHttpServlet
7 com.xiaoan.test.TestHttpServlet
8
9
10 TestHttpServlet
11 /testHttpServlet
12
13
这样运行项目访问路径为http://localhost:8080/testHttpServlet/testHttpServlet 控制台会输出GET METHOD
写一个表单将其post提交到这个路径
在WebContent里面新建一个testform.jsp
1
2 pageEncoding="ISO-8859-1"%>
3
4
5
6
7
Insert title here8
9
10
11
12
13
14
运行这个jsp页面, 直接点击提交 注意浏览器中的变化和控制台的输出为POST METHOD
HttpServletRequest HttpServletResponse 这里面和Serlvet.service方法中使用方法可以认为完全一样
并且在HttpServlet 的父类GenericServlet 中获得了Servlet初始化 init方法中的ServletConfig为一个成员属性 可以直接调用
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现
1> getWriter(): 返回PrintWriter对象. 调用该对象的pring()方法, 将把pring()中的参数直接打印到客户浏览器上
PrintWriter out = response.getWriter();
out.println("neirong");
2> 设置响应内容类型: response.setContentType("application/msword");
3> woid sendRedirect(String location): 请求的重定向(本方法为HttpServletResponse中定义)
练习
在web.xml文件中设置两个WEB初始化参数 user, password. 定义一个login.html, 里面定义两个请求字段 user, password. 此对其和web.xml文件中定义的请求参数是否一致,若一致, 就响应Hello: xxx, 不一致就响应Sorry: xxx
1GenericServlet:
1> 是一个Servlet. 是Servlet接口和ServletConfig接口的实现类. 但是是一个抽象类. 其中的servlet方法为抽象方法
2> 如果新建的Servlet程序直接继承GenericServlet会使开发更简洁
3> 具体实现:
1) 在GenericServlet中声明了一个ServletConfig类型的成员变量, 在init(ServletConfig)方法中对其进行了初始化
2) 利用servletConfig成员变量的方法实现了ServletConfig接口的方法
3) 还定义了一个init()方法, 在init(ServletConfig)方法中对其进行调用, 子类可以直接覆盖init() 在其中实现对Servlet的初始化
4) 不建议直接覆盖init(ServletConfig), 因为如果忘记写super.init(config); 而是还使用了ServletConfig接口的方法, 则会出现空指针异常
5) 新建的init(){} 并非Servlet的生命周期方法. 而init(ServletConfig)是生命周期相关的方法
2 HttpServlet:
1是一个Servlet 继承自GenericServlet. 针对于HTTP协议所定制