zoukankan      html  css  js  c++  java
  • 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协议所定制

  • 相关阅读:
    C#中的int?和X??
    验证码识别技术导论
    Jquery focus blur给文本框加选中离开效果
    Asp.Net 用户验证(自定义IPrincipal和IIdentity)
    FCKeditor介绍
    char varchar 有什么区别
    jquery无刷新载入其他页面的内容
    ASP.NET 安全认证
    程序员不是一般人
    [转]Asp.net中基于Forms验证的角色验证授权
  • 原文地址:https://www.cnblogs.com/azhw/p/5739008.html
Copyright © 2011-2022 走看看