zoukankan      html  css  js  c++  java
  • A Web Module That Uses JavaServer Faces Technology: The hello2 Example

    hello2详解

    1.GreetingServlet.java(显示问候页面表单)

    此servlet重写该doGet方法,实现GETHTTP方法。servlet显示一个简单的HTML问候表单,其提交按钮就像hello1指定其操作的响应页面一样。以下摘录以@WebServlet注释开头,注释指定相对于上下文根的URL模式:

     1 package javaeetutorial.hello2;
     2 
     3 import java.io.IOException;      //IOException表示发生某种I/O异常的信号。此类是由失败或中断的I/O操作产生的一般异常类。
     4 import java.io.PrintWriter;      //io常用类,包装流PrintWriter除了可以包装字节流OutputStream之外,还能包装字符流Writer。
     5 import javax.servlet.RequestDispatcher;    //定义一个对象,该对象接收来自客户端的请求,并将它们发送到服务器上的任何资源(例如servlet,HTML文件或JSP文件)。
     6 import javax.servlet.ServletException;    //定义servlet在遇到困难时可以抛出的一般异常。
     7 import javax.servlet.annotation.WebServlet;    //web服务中的,在Glassfish下lib中的包。
     8 import javax.servlet.http.HttpServlet;     //提供要进行子类化的抽象类,以创建适用于Web站点的HTTP Servlet。
     9 import javax.servlet.http.HttpServletRequest;    //扩展ServletRequest接口以提供HTTP Servlet的请求信息。
    10 import javax.servlet.http.HttpServletResponse;    //扩展ServletResponse接口以在发送响应时提供特定于HTTP的功能。
    11 
    12 /**
    13  * This is a simple example of an HTTP Servlet. It responds to the GET method of
    14  * the HTTP protocol.
    15  */
    16 @WebServlet("/greeting")    //设置标注@webserverlet,容器会自动读取里面的信息。此标注告诉容器,如果请求的UEL是“/greeting”,则由GreetingServelet的实例提供服务。
    17 public class GreetingServlet extends HttpServlet {    //创建一个公有类GreetingServlet继承父类HttpServlet
    18 
    19     @Override          //覆盖标注,意思是下面覆盖HttpServlet中的doGet方法
    20     public void doGet(HttpServletRequest request,    //参数:—req- HttpServletRequest包含客户端对servlet的请求的对象
    21             HttpServletResponse response)     //参数:resp- HttpServletResponse包含servlet发送给客户端的响应的对象
    22             throws ServletException, IOException {    //抛出:java.io.IOException - 如果在servlet处理GET请求时检测到输入或输出错误;ServletException - 如果无法处理GET请求
    23 
    24         response.setContentType("text/html");    //发送给客户端的文章类型
    25         response.setBufferSize(8192);    //发送给客户端的响应对象的缓冲大小是8192
    26         try (PrintWriter out = response.getWriter()) {    //获取PrintWriter流,用来在客户端输出
    27             out.println("<html lang="en">"      //以下是html标记语言用来显示页面
    28                     + "<head><title>Servlet Hello</title></head>");
    29             
    30             // then write the data of the response
    31             out.println("<body  bgcolor="#ffffff">"
    32                     + "<img src="resources/images/duke.waving.gif" "
    33                     + "alt="Duke waving his hand">"
    34                     + "<form method="get">"
    35                     + "<h2>Hello, my name is Duke. What's yours?</h2>"
    36                     + "<input title="My name is: " type="text" "
    37                     + "name="username" size="25"/>"
    38                     + "<p></p>"
    39                     + "<input type="submit" value="Submit"/>"
    40                     + "<input type="reset" value="Reset"/>"
    41                     + "</form>");
    42             
    43             String username = request.getParameter("username");    //定义一个字符串username并对它赋从request中拿出名字叫userName的值
    44             if (username != null && username.length() > 0) {    //如果username不为空并且长度大于0
    45                 RequestDispatcher dispatcher =
    46                         getServletContext().getRequestDispatcher("/response");    //获取jsp上下文里边存储了各变量的信息(值),把一个命令发送到浏览器,让浏览器对指定的URL提出请求(此处的URL只能使用绝对路径)
    47                 
    48                 if (dispatcher != null) {
    49                     dispatcher.include(request, response);      //如果接收到的客户端的请求不为空时,记录保留request和response,以后不能再修改response里表示状态的信息
    50                 }
    51             }
    52             out.println("</body></html>");
    53         }
    54     }
    55 
    56     @Override    //覆盖
    57     public String getServletInfo() {    //getServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权
    58         return "The Hello servlet says hello.";    //返回说明这个servelet的信息是says hello
    59     }
    60 }
    详细使用方法(来源于API文档):
    protected void doGetHttpServletRequest  req, HttpServletResponse  resp) 抛出ServletException, java.io.IOException
    由服务器调用(通过service方法)以允许servlet处理GET请求。

    重写此方法以支持GET请求也会自动支持HTTP HEAD请求。HEAD请求是一个GET请求,它在响应中不返回任何主体,只返回请求头字段。

    覆盖此方法时,请读取请求数据,编写响应头,获取响应的编写器或输出流对象,最后编写响应数据。最好包含内容类型和编码。使用PrintWriter对象返回响应时,请在访问PrintWriter对象之前设置内容类型 。

    servlet容器必须在提交响应之前写入标头,因为在HTTP中,标头必须在响应主体之前发送。

    在可能的情况下,设置Content-Length标头(使用 ServletResponse.setContentLength(int)方法),以允许servlet容器使用持久连接将其响应返回给客户端,从而提高性能。如果整个响应适合响应缓冲区,则自动设置内容长度。

    使用HTTP 1.1分块编码(这意味着响应具有Transfer-Encoding标头)时,请不要设置Content-Length标头。

    GET方法应该是安全的,即没有任何副作用,用户对此负责。例如,大多数表单查询没有副作用。如果客户端请求旨在更改存储的数据,则该请求应使用其他一些HTTP方法。

    GET方法也应该是幂等的,这意味着它可以安全地重复。有时使方法安全也使其成为幂等的。例如,重复查询既安全又幂等,但在线购买产品或修改数据既不安全也不是幂等。

    如果请求格式不正确,则doGet 返回HTTP“错误请求”消息。

    参数:
    reqHttpServletRequest包含客户端对servlet的请求的对象
    respHttpServletResponse包含servlet发送给客户端的响应的对象
    抛出:
    java.io.IOException - 如果在servlet处理GET请求时检测到输入或输出错误
    ServletException - 如果无法处理GET请求

    2.ResponseServlet.java(响应页面)

    此servlet也覆盖该doGet方法,仅显示响应。以下摘录以@WebServlet 注释开头,注释指定相对于上下文根的URL模式:

     1 import java.io.IOException;
     2 import java.io.PrintWriter;
     3 import javax.servlet.ServletException;
     4 import javax.servlet.annotation.WebServlet;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 /**
    10  * This is a simple example of an HTTP Servlet.  It responds to the GET
    11  * method of the HTTP protocol.
    12  */
    13 @WebServlet("/response")
    14 public class ResponseServlet extends HttpServlet {
    15 
    16     @Override
    17     public void doGet(HttpServletRequest request,
    18             HttpServletResponse response)
    19             throws ServletException, IOException {
    20         try (PrintWriter out = response.getWriter()) {
    21             String username = request.getParameter("username");    //同上
    22             if (username != null && username.length() > 0) {    //如果username不为空且长度大于0
    23                 out.println("<h2>Hello, " + username + "!</h2>");    //打印Hello username
    24             }
    25         }
    26     }
    27 
    28     @Override
    29     public String getServletInfo() {
    30         return "The Response servlet says hello.";
    31 
    32     }
    33 }
  • 相关阅读:
    关于svcutil.exe
    为什么说上ERP找死?
    竞争软件微信公众号上线
    无需ORM的数据库
    日期格式化和计算工具
    数据格式化工具
    Redis集群安装
    guava入门学习3(集合工具)
    guava入门学习2(新集合)
    mac环境下基于jdk1.8,maven搭建dubbo,zookeeper入门小案例
  • 原文地址:https://www.cnblogs.com/TomFord/p/10736228.html
Copyright © 2011-2022 走看看