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 doGet(HttpServletRequest  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 }

转载于:https://www.cnblogs.com/TomFord/p/10736228.html

A Web Module That Uses JavaServer Faces Technology: The hello2 Example相关推荐

  1. 解决JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer问题

    解决JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer问题 参考文章: (1)解决JavaServer Faces 2.2 re ...

  2. Java Server Faces_用JavaServer Faces开发Web应用(4) (转)

    用JavaServer Faces开发Web应用(4) (转)[@more@] 6.事件处理. XML:namespace prefix = o ns = "urn:schemas-micr ...

  3. java faces,用JavaServer Faces开发Web应用(3) (转)

    用JavaServer Faces开发Web应用(3) (转)[@more@] 构建你自己的应用 :namespace prefix = o ns = "urn:schemas--com:: ...

  4. dynamic web module 2.5与2.4

    http://hi.baidu.com/yuanygb/blog/item/b7f89b54c1638045d0090642.html Project facet Dynamic Web Module ...

  5. study of javaserver faces lifecycle

    JavaServer Faces应用程序的生命周期在客户端为页面发出HTTP请求时开始,并在服务器响应该页面并转换为HTML时结束. 通常将JSF的生命周期分为两个阶段: #执行阶段 #渲染阶段 1. ...

  6. 什么是jsf_什么是JSF? JavaServer Faces简介

    什么是jsf JavaServer Faces(JSF)是Java标准技术,用于构建基于组件的,面向事件的Web界面. 与JavaServer Pages(JSP)一样,JSF允许访问服务器端数据和逻 ...

  7. Maven - Dynamic Web Module 3.0 requires Java 1.6 or newer.

    2019独角兽企业重金招聘Python工程师标准>>> 首先先看一下错误信息: Dynamic Web Module 3.0 requires Java 1.6 or newer. ...

  8. 转eclipse如何修改dynamic web module version .

         --------------------------------------------------------------------------------------------- 原 ...

  9. 使用maven创建项目和cannot change version web module 3.0

    近期下载了最新的Eclipse mars.2, 这个eclipse自带了maven插件,于是就用maven尝试创建一个java web项目. 第一步,例如以下图所看到的选择 Maven Project ...

最新文章

  1. 【opencv】2.opencv绘图、视频等
  2. Linux突然连不上网,ping不通百度,连不上MobaXterm
  3. log4j日志文件配置
  4. 前端学习(1938)vue之电商管理系统电商系统之下拉框环境
  5. 输入快捷键显示未知命令_「干货」华为VRP基础和常用命令了解一下
  6. 【今日CS 视觉论文速览】20 Dec 2018
  7. 读取PDF的文字--zt
  8. 聊聊 scala 的模式匹配 1
  9. 蓝桥杯 ADV-130 算法提高 色盲的民主
  10. python 如何做web界面_python的web实例教程,用python做个简单web界面选什么框架最简单...
  11. Android——多功能记事本(Android Studio)
  12. EnableViewState详细分析
  13. DosBox 的 DOSBOX.CONF 的详细配置说
  14. excel 电阻并联计算_多个电阻并联公式 三个电阻并联公式
  15. 前端获取文件的MD5值
  16. BitBucket介绍以及基础使用
  17. 优酷搞笑--万万没想到--台词
  18. OpenNI:深度图显示方法
  19. [OOD设计] - Black Jack Game (21点)
  20. 做了6年php,30岁程序员要去做外包,这个选择靠谱么?网友:别!

热门文章

  1. 二维树状数组模板(区间修改+区间查询)
  2. 编写一个简单的spring MVC程序
  3. windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...
  4. background image
  5. POJ 2152 Fire
  6. myeclipse不编译
  7. mysql sql语句使用技巧
  8. shell命令tree
  9. ConfigurableListableBeanFactory
  10. react --- 隔代传递参数的三种方式