hello2 源码分析
1、GreetingServlet.java(问候页面):
/**
* Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
*
* You may not modify, use, reproduce, or distribute this software except in
* compliance with the terms of the License at:
* https://github.com/javaee/tutorial-examples/LICENSE.txt
*/
package javaeetutorial.hello2; //指定包名 //导入程序库,使之成为可用的单元
import java.io.IOException; //导入捕获输入输出异常的包
import java.io.PrintWriter; //导入向文本输出流打印对象的格式化表示形式的包
import javax.servlet.RequestDispatcher; //导入将请求转发送到另一个资源功能的包,它可能是html,servlet或jsp等
import javax.servlet.ServletException; //导入servlet在遇到困难时可以抛出一般异常的包
import javax.servlet.annotation.WebServlet; //web服务中的,在Glassfish下lib中的包。
import javax.servlet.http.HttpServlet; //提供要进行子类化的抽象类,以创建适用于Web站点的HTTP Servlet
import javax.servlet.http.HttpServletRequest; //提供HTTP Servlet的请求信息
import javax.servlet.http.HttpServletResponse; //发送响应时提供特定于HTTP的功能 /**
* This is a simple example of an HTTP Servlet. It responds to the GET method of
* the HTTP protocol.
*/
@WebServlet("/greeting") //使用源文件中的注释@WebServlet servlet来设置servlet 的URL模式,此处将URL模式指定为/greeting
public class GreetingServlet extends HttpServlet { //创建一个继承父类HttpServlet的共有类GreetingServlet @Override //当你想要覆写(重写)某个方法时,可以选择添加@Override这个注解,@Override 系统可以帮你检查方法的正确性
public void doGet(HttpServletRequest request, //重写该doGet方法,实现GETHTTP方法;HttpServletRequest包含客户端对servlet的请求的对象
HttpServletResponse response) //HttpServletResponse包含servlet发送给客户端的响应的对象
throws ServletException, IOException { //java.io.IOException如果在servlet处理GET请求时检测到输入或输出错误;ServletException如果无法处理GET请求 response.setContentType("text/html"); //发送给客户端浏览器的数据类型为html文件
response.setBufferSize(8192); //发送给客户端的响应对象的缓冲大小是8192
try (PrintWriter out = response.getWriter()) { //获取PrintWriter流,用来在客户端输出
out.println("<html lang=\"en\">" //html标记语言用来显示页面
+ "<head><title>Servlet Hello</title></head>"); // then write the data of the response
out.println("<body bgcolor=\"#ffffff\">"
+ "<img src=\"resources/images/duke.waving.gif\" "
+ "alt=\"Duke waving his hand\">"
+ "<form method=\"get\">"
+ "<h2>Hello, my name is Duke. What's yours?</h2>"
+ "<input title=\"My name is: \" type=\"text\" "
+ "name=\"username\" size=\"25\"/>"
+ "<p></p>"
+ "<input type=\"submit\" value=\"Submit\"/>"
+ "<input type=\"reset\" value=\"Reset\"/>"
+ "</form>"); String username = request.getParameter("username"); //定义一个字符串username,把从request中拿出的username的值赋给它
if (username != null && username.length() > 0) { //如果username不为空且长度大于0
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/response"); //通过绝对路径实现Servlet之间的请求传递(页面跳转) if (dispatcher != null) {
dispatcher.include(request, response);//如果接收到的客户端的请求不为空时,记录保留request和response,以后不能再修改response里表示状态的信息
}
}
out.println("</body></html>");
}
} @Override
public String getServletInfo() { //定义一个共有类getServletInfo方法获取网页的说明信息
return "The Hello servlet says hello."; }
}
2、ResponseServlet.java(响应页面)
package javaeetutorial.hello2; //这里没注释的基本同问候页面 import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* This is a simple example of an HTTP Servlet. It responds to the GET
* method of the HTTP protocol.
*/
@WebServlet("/response")
public class ResponseServlet extends HttpServlet { @Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
try (PrintWriter out = response.getWriter()) {
String username = request.getParameter("username");
if (username != null && username.length() > 0) { //判断当输入的username不为空且长度大于0,则打印Hello username
out.println("<h2>Hello, " + username + "!</h2>");
}
}
} @Override
public String getServletInfo() {
return "The Response servlet says hello."; }
}
hello2 源码分析的更多相关文章
- 异步编程之co——源码分析
异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
随机推荐
- .eslintrc文件配置
{ // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser": true, "node ...
- Node.js基础学习三之登录功能
本篇介绍Node.js访问数据库并返回数据给客户端 需求基于Node.js学习(二) 数据库请下载:user.sql 1.创建user 实体类(model-user.js) function User ...
- 4、网上收集Storm 讲解图
1.Storm与Kafka集成 我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的, 而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情 ...
- 你不知道的JS(2)深入了解闭包
很久之前就想写一篇关于闭包的博客了,但是总是担心写的不够完全.不够好,不管怎样,还是要把我理解的闭包和大家分享下,比较长,希望耐心看完. 定义 说实话,给闭包下一个定义是很困难的,原因在于javasc ...
- Educational Codeforces Round 48 (Rated for Div. 2)
http://codeforces.com/contest/1016 A. 没想到这个也会TLE,太粗心了 B. 暴力就好了,多情况讨论又出错... 思路跟我一样的解法 为什么我做了那么多讨论,原 ...
- Catalog of Patterns of Enterprise Application Architecture
Catalog of Patterns of Enterprise Application Architecture Last Significant Update: January 2003 A s ...
- IIC为什么要配置为开漏输出呢?
开漏输出只能输出低电平,类似于三极管的集电极,要输出高电平需要上拉电阻才能输出 当集电极接上拉电阻后,(1)基极为高电平,三极管导通,集电极的电位就会被拉低: (2)基极为低电平,三极管不导通,集电极 ...
- .NET Core Agent
.NET Core Agent 熟悉java的朋友肯定知道java agent,当我看到java agent时我很是羡慕,我当时就想.net是否也有类似的功能,于是就搜索各种资料,结果让人很失望.当时 ...
- LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
NormalSubmission=analysis.Count(x=>x.FinishTime<= endTime.AddDays(1))报错linq不能识别 => var endT ...
- scipy 短时傅里叶变化
原文链接 https://www.cnblogs.com/hoojjack/p/9967298.html 计算短时傅里叶变换(STFT) scipy.signal.stft(x,fs = 1.0, ...