JavaWeb核心编程之(三.6)HttpServlet
之前都是集成的Servlet真的太过于繁琐了, Servlet接口提供了一个实现类 为HttpServlet 只要实现doGet 和doPost方法就可以了
仍然以一个表单为例
新建一个web工程
1 package com.xiaoan.test; 2 3 import javax.servlet.http.HttpServlet; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 7 public class TestHttpServlet extends HttpServlet{ 8 9 /** 10 * 11 */ 12 private static final long serialVersionUID = 1L; 13 14 15 public void doGet(HttpServletRequest req, HttpServletResponse resp){ 16 System.out.println("GET METHOD"); 17 } 18 19 public void doPost(HttpServletRequest req, HttpServletResponse resp){ 20 System.out.println("POST METHOD"); 21 } 22 }
编辑web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>testHttpServlet</display-name> 4 5 <servlet> 6 <servlet-name>TestHttpServlet</servlet-name> 7 <servlet-class>com.xiaoan.test.TestHttpServlet</servlet-class> 8 </servlet> 9 <servlet-mapping> 10 <servlet-name>TestHttpServlet</servlet-name> 11 <url-pattern>/testHttpServlet</url-pattern> 12 </servlet-mapping> 13 </web-app>
这样运行项目访问路径为http://localhost:8080/testHttpServlet/testHttpServlet 控制台会输出GET METHOD
写一个表单将其post提交到这个路径
在WebContent里面新建一个testform.jsp
1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="testHttpServlet" method="post"> 11 <input type="submit" value="tijiao"> 12 </form> 13 </body> 14 </html>
运行这个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协议所定制