在example目录下的web\servlet\hello2\src\main\java\javaeetutorial\hello2路径里可以找到hello2的GreetingServlet.java和ResponseServlet.java。
GreetingServlet.java(显示问候页面表单)
package javaeetutorial.hello2; import java.io.IOException; //IOException表示发生某种I/O异常的信号。此类是由失败或中断的I/O操作产生的一般异常类。 import java.io.PrintWriter; //io常用类,包装流PrintWriter除了可以包装字节流OutputStream之外,还能包装字符流Writer。 import javax.servlet.RequestDispatcher; //定义一个对象,该对象接收来自客户端的请求,并将它们发送到服务器上的任何资源(例如servlet,HTML文件或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; //扩展ServletRequest接口以提供HTTP Servlet的请求信息。 import javax.servlet.http.HttpServletResponse; //扩展ServletResponse接口以在发送响应时提供特定于HTTP的功能。 /** * This is a simple example of an HTTP Servlet. It responds to the GET method of * the HTTP protocol. */ @WebServlet("/greeting") //设置标注@webserverlet,容器会自动读取里面的信息。此标注告诉容器,如果请求的UEL是“/greeting”,则由GreetingServelet的实例提供服务。 public class GreetingServlet extends HttpServlet { //创建一个公有类GreetingServlet继承父类HttpServlet @Override //覆盖标注,意思是下面覆盖HttpServlet中的doGet方法 public void doGet(HttpServletRequest request, //参数:—req- HttpServletRequest包含客户端对servlet的请求的对象 HttpServletResponse response) //参数:resp- HttpServletResponse包含servlet发送给客户端的响应的对象 throws ServletException, IOException { //抛出:java.io.IOException - 如果在servlet处理GET请求时检测到输入或输出错误;ServletException - 如果无法处理GET请求 response.setContentType("text/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"); //获取jsp上下文里边存储了各变量的信息(值),把一个命令发送到浏览器,让浏览器对指定的URL提出请求(此处的URL只能使用绝对路径) if (dispatcher != null) { dispatcher.include(request, response); //如果接收到的客户端的请求不为空时,记录保留request和response,以后不能再修改response里表示状态的信息 } } out.println("</body></html>"); } } @Override //覆盖 public String getServletInfo() { //getServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权 return "The Hello servlet says hello."; //返回说明这个servelet的信息是says hello } }
ResponseServlet.java(响应页面)
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 out.println("<h2>Hello, " + username + "!</h2>"); //打印Hello username } } } @Override public String getServletInfo() { return "The Response servlet says hello."; } }