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协议所定制

原文地址:https://www.cnblogs.com/azhw/p/5739008.html