1、GreetingServlet.java(问候页面):

  1. /**
  2. * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
  3. *
  4. * You may not modify, use, reproduce, or distribute this software except in
  5. * compliance with the terms of the License at:
  6. * https://github.com/javaee/tutorial-examples/LICENSE.txt
  7. */
  8. package javaeetutorial.hello2; //指定包名
  9.  
  10. //导入程序库,使之成为可用的单元
  11. import java.io.IOException; //导入捕获输入输出异常的包
  12. import java.io.PrintWriter; //导入向文本输出流打印对象的格式化表示形式的包
  13. import javax.servlet.RequestDispatcher; //导入将请求转发送到另一个资源功能的包,它可能是html,servlet或jsp等
  14. import javax.servlet.ServletException; //导入servlet在遇到困难时可以抛出一般异常的包
  15. import javax.servlet.annotation.WebServlet; //web服务中的,在Glassfish下lib中的包。
  16. import javax.servlet.http.HttpServlet; //提供要进行子类化的抽象类,以创建适用于Web站点的HTTP Servlet
  17. import javax.servlet.http.HttpServletRequest; //提供HTTP Servlet的请求信息
  18. import javax.servlet.http.HttpServletResponse; //发送响应时提供特定于HTTP的功能
  19.  
  20. /**
  21. * This is a simple example of an HTTP Servlet. It responds to the GET method of
  22. * the HTTP protocol.
  23. */
  24. @WebServlet("/greeting") //使用源文件中的注释@WebServlet servlet来设置servlet 的URL模式,此处将URL模式指定为/greeting
  25. public class GreetingServlet extends HttpServlet { //创建一个继承父类HttpServlet的共有类GreetingServlet
  26.  
  27. @Override //当你想要覆写(重写)某个方法时,可以选择添加@Override这个注解,@Override 系统可以帮你检查方法的正确性
  28. public void doGet(HttpServletRequest request, //重写该doGet方法,实现GETHTTP方法;HttpServletRequest包含客户端对servlet的请求的对象
  29. HttpServletResponse response) //HttpServletResponse包含servlet发送给客户端的响应的对象
  30. throws ServletException, IOException { //java.io.IOException如果在servlet处理GET请求时检测到输入或输出错误;ServletException如果无法处理GET请求
  31.  
  32. response.setContentType("text/html"); //发送给客户端浏览器的数据类型为html文件
  33. response.setBufferSize(8192); //发送给客户端的响应对象的缓冲大小是8192
  34. try (PrintWriter out = response.getWriter()) { //获取PrintWriter流,用来在客户端输出
  35. out.println("<html lang=\"en\">" //html标记语言用来显示页面
  36. + "<head><title>Servlet Hello</title></head>");
  37.  
  38. // then write the data of the response
  39. out.println("<body bgcolor=\"#ffffff\">"
  40. + "<img src=\"resources/images/duke.waving.gif\" "
  41. + "alt=\"Duke waving his hand\">"
  42. + "<form method=\"get\">"
  43. + "<h2>Hello, my name is Duke. What's yours?</h2>"
  44. + "<input title=\"My name is: \" type=\"text\" "
  45. + "name=\"username\" size=\"25\"/>"
  46. + "<p></p>"
  47. + "<input type=\"submit\" value=\"Submit\"/>"
  48. + "<input type=\"reset\" value=\"Reset\"/>"
  49. + "</form>");
  50.  
  51. String username = request.getParameter("username"); //定义一个字符串username,把从request中拿出的username的值赋给它
  52. if (username != null && username.length() > 0) { //如果username不为空且长度大于0
  53. RequestDispatcher dispatcher =
  54. getServletContext().getRequestDispatcher("/response"); //通过绝对路径实现Servlet之间的请求传递(页面跳转)
  55.  
  56. if (dispatcher != null) {
  57. dispatcher.include(request, response);//如果接收到的客户端的请求不为空时,记录保留request和response,以后不能再修改response里表示状态的信息
  58. }
  59. }
  60. out.println("</body></html>");
  61. }
  62. }
  63.  
  64. @Override
  65. public String getServletInfo() { //定义一个共有类getServletInfo方法获取网页的说明信息
  66. return "The Hello servlet says hello.";
  67.  
  68. }
  69. }

2、ResponseServlet.java(响应页面)

  1. package javaeetutorial.hello2; //这里没注释的基本同问候页面
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. /**
  12. * This is a simple example of an HTTP Servlet. It responds to the GET
  13. * method of the HTTP protocol.
  14. */
  15. @WebServlet("/response")
  16. public class ResponseServlet extends HttpServlet {
  17.  
  18. @Override
  19. public void doGet(HttpServletRequest request,
  20. HttpServletResponse response)
  21. throws ServletException, IOException {
  22. try (PrintWriter out = response.getWriter()) {
  23. String username = request.getParameter("username");
  24. if (username != null && username.length() > 0) { //判断当输入的username不为空且长度大于0,则打印Hello username
  25. out.println("<h2>Hello, " + username + "!</h2>");
  26. }
  27. }
  28. }
  29.  
  30. @Override
  31. public String getServletInfo() {
  32. return "The Response servlet says hello.";
  33.  
  34. }
  35. }

hello2 源码分析的更多相关文章

  1. 异步编程之co——源码分析

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  2. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  3. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  4. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  5. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  6. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  7. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  8. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  9. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

随机推荐

  1. SQLSERVER列出所有用户权限

    --服务器级权限WITH CTE AS(SELECT u.name AS 用户名,u.is_disabled AS 是否禁用,g.name as 服务器角色,'√' as 'flag'FROM sys ...

  2. LInux命令英文全称

    Linux命令英文全称   su = Swith user 切换用户,切换到root用户cat = Concatenate 串联uname = Unix name 系统名称df = Disk free ...

  3. jquery判断点击事件是否指定区域

    $(document).click(function(e){  e = window.event || e; // 兼容IE7 obj = $(e.srcElement || e.target);   ...

  4. Weekly Contest 119

    第一题: 973. K Closest Points to Origin  We have a list of points on the plane.  Find the K closest poi ...

  5. Sublime报错

    Sublime出现 unable to read project的错误对话框 每次重新开启都会弹出对话框 解决办法: 1.关闭Sublime 2.C:\Users\Administrator\AppD ...

  6. 2019十大安卓手游折扣平台app排行榜

    2019游戏版号陆续开放,玩家又有许多好游戏可以玩了. 小编就以当前最热门的十个游戏来点评手游折扣平台App排行榜吧! 排名第一的游戏: 少年西游记-新征程 老平台,集成SDK,良心平台,覆盖全网游戏 ...

  7. mysql 数据备份和还原

    使用mysqldump命令备份 使用root用户备份test数据库下的person表 mysqldump -u root -p test person > D:\backup.sql 备份多个数 ...

  8. Java实训作业1

    1.编写程序:声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果 2.编写程序:从键盘输入圆的半径,计算圆的面积并输出. 3.编写程序:实现一个数字加密器.运行时输入加密 ...

  9. postgresql之json操作

    --string 转 json select '{"Items":[{"Id":1,"InitStartDate":"2018-0 ...

  10. Jvm类的加载机制

    1.概述 虚拟机加载Class文件(二进制字节流)到内存,并对数据进行校验.转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这一系列过程就是类的加载机制. 2.类的加载时机 类从被虚拟机加 ...