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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java探索之旅(11)——抽象类与接口

1.Java数据类型 ❶不可变类&#xff0c;是指当创建了这个类的实例后&#xff0c;就不允许修改它的属性值。 它包括&#xff1a;Primitive变量&#xff1a;boolean,byte, char, double ,float, integer, long, shortJDK不可变类&#xff1a;Boolean, Byte, Character, Double, F…

LOJ #6052. 「雅礼集训 2017 Day11」DIV

完了我是数学姿势越来越弱了&#xff0c;感觉这种CXRdalao秒掉的题我都要做好久 一些前置推导 首先我们很容易得出\((abi)(cdi)k \Leftrightarrow ac-bdk,adbc0\) 我们可以直接\(adbc0\Rightarrow ad-bc\Rightarrow \frac{a}b-\frac{c}{d}\) 考虑把这个分数化为最简的形式&…

移动端页面不需要在meta加_移动端适配viewport缩放方案

1. 前言设计师交付给前端开发一张宽度为750px的视觉稿&#xff0c;设计稿上元素的尺寸、颜色、位置等已做过标注&#xff0c;要求工程师工在适配不同屏幕尺寸的设备时采用等比缩放的方案。采用viewport缩放的方案能又快又好的实现需求。2. 原理在写HTML、CSS对设计稿进行还原时…

(转)用 Fiddler 看看 UpdatePanel 发生了什么

第一个 ASP.NET AJAX 程序&#xff1a;UpdatePanel一文中介绍了 UpdatePanel 实现 Ajax&#xff0c;我们今天利用 Fiddler 来看看 UpdatePanel 发生了什么。 实验步骤 启动 Fiddler&#xff0c;访问我们事先写好的 UpdatePanel 网页&#xff08;注意不要用 127.0.0.1 或 localh…

转载:div和flash层级关系问题

转自&#xff1a;http://sin581.blog.163.com/blog/static/860578932012813112334404/问题&#xff1a;ie下默认好像div层级没有flash层级高&#xff0c;也就是当div绝对相对压在flash上&#xff0c;压不住flash总是在最上面显示&#xff0c;请给出方案 或者说下大概如何解决 用…

基于Google Reader发展起来的个性化推荐系统之三大问题

郑昀玩聚SR 20091003 中科院的xlvector(即项亮&#xff0c;他所在的团队The Ensemble在7月份获得Netflix大奖赛公开测试排名第一&#xff0c;但在9月22日Netflix宣布BPC获胜&#xff0c;原因据说只是因为项亮他们提交结果晚了20分钟)最近发布了一个小工具GRSuggest&#xff0c;…

直接从chrome中复制的body到postman中希望能自动识别去除空格

Describe the bug直接从chrome开发者工具中request的body复制到postman中时会带有空格&#xff0c;需要手动删除空格。 To Reproduce1、使用chrome开发者工具抓取一个post请求2、复制请求中参数3、粘贴到postman的body中 Expected behavior3、把带的空格删除掉 转载于:https://…

气象ts评分_给大家分享一个格点插值到站点然后TS评分的程序

登录后查看更多精彩内容~您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x!****************************************************************************!! PROGRAM: T639格点资料插值成站点资料!!**********************************************…

RichTextBox 右键显示 ContextMenuTrip

说明&#xff1a; (1)命名&#xff1a; RichTextBox -> rtxt1 ContextMenuTrip -> cms1 (2)截图&#xff1a; (3)完整代码&#xff1a; <span style"font-size:14px;">using System; using System.Collections.Generic; using System.ComponentModel; u…

设计模式学习笔记--Mediator 中介者模式

我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成。当彼此引用的对象数量比较少时&#xff0c;此时对象之间就为直接交互&#xff08;点对点)。而当对象的数量增加时&#xff0c;这种直接交互会导致对象之间复杂的、混乱的引用,最后形成一张巨大的网&…

Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

vee-validate 是为 Vue.js 量身打造的表单校验框架&#xff0c;允许您校验输入的内容并显示对应的错误提示信息。它内置了很多常见的校验规则&#xff0c;可以组合使用多种校验规则&#xff0c;大部分场景只需要配置就能实现开箱即用&#xff0c;还支持自定义正则表达式。而且支…

python微博自动评论转发_python3 调用新浪微博api实现自动发布评论

新浪微博开放平台提供了丰富的API接口&#xff0c;利用这些接口&#xff0c;开发者能够开发出独具特色的微博应用。但是&#xff0c;大部分接口都需要用户授权给应用&#xff0c;应用利用授权得到的Access Token来调用相应的接口来获取内容。新浪微博的授权机制目前主要有3种应…

Linux中fork()函数详解

参考地址 1.对fork函数的认识&#xff1a; 一个进程&#xff0c;包括代码、数据和分配给进程的资源。fork&#xff08;&#xff09;函数通过系统调用创建一个与原来进程几乎完全相同的进程&#xff0c; 也就是两个进程可以做完全相同的事&#xff0c;但如果初始参数或者传入的变…

类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller

py2exe&#xff0c;Pyinstaller&#xff0c;Cx_freeze&#xff0c;Nuitka都可以完成python打包的任务。Pyinstaller和Nuitka都号称跨平台&#xff0c;但其实顶多只能算是工具本身跨平台&#xff0c;实际体验中不仅打包产生的文件不能跨平台&#xff0c;能否成功打包本身也不确定…

Android学习之PopupWindow

Android的对话框有两种&#xff1a;PopupWindow和AlertDialog。 详细说明如下&#xff1a; AlertDialog是非阻塞式对话框&#xff1a;AlertDialog弹出时&#xff0c;后台还可以做事情&#xff1b; AlertDialog的位置固定&#xff0c;而PopupWindow的位置可以随意&#xff1b; A…

spring整合mybatis接口无法注入问题

在学习Spring完之后简单的了解了MyBatis。然后进行简单的整合&#xff0c;遇到MyBatista接口映射的Bean无法自动注入的问题&#xff1b; 代码异常&#xff1a; 线程“main”org.springframe .bean .factory中的异常。创建名为“UserController”的bean时出错:通过字段“userdao…

LR重新安装的问题

LR的安装&#xff0c;说难不难&#xff0c;说易也不易。在此就把我安装时碰到的问题记录下来&#xff0c;以供大家参考。 第一次安装时&#xff0c;我是成功了的。&#xff08;注意&#xff1a;安装程序的目录不能有中文&#xff0c;当然同时你得有lincense&#xff09; 后来因…

matlab柱状斜线_Matlab小练习:按斜线方向依次赋值矩阵

来自知乎问题&#xff0c;觉得挺有意思&#xff0c;留给学生解答之余&#xff0c;我也做了一番思考&#xff0c;得到三种解法。题目如下&#xff1a;以n80为例&#xff0c;————————————————————一、先要根据确定矩阵的阶数 如果先生成足够大矩阵&#xff0…

Programming C#.Classes and Objects.只读字段

只读字段 当字段声明中含有 readonly 修饰符时&#xff0c;该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现&#xff0c;或在同一类中的实例构造函数或静态构造函数中出现。&#xff08;在这些上下文中&#xff0c;只读字段可以被多次赋值。&am…

会计知识

毛利 等于收入纯利 等于利润 按照&#xff1a;利润&#xff1d;收入-成本-费用 收入&#xff1a;收到的现金、支票、签单金额成本&#xff1a;买材料、酒水、电、工资、等费用&#xff1a;日租金、桌椅、碗、盘子等摊销、税金等等 ------------------------------------------…