第一个Servlet程序及分析

第一个Servlet程序:

 1 package cc.openhome;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 /**
13  * Servlet implementation class HelloServlet
14  */
15 @WebServlet("/hello.view")
16 public class HelloServlet extends HttpServlet {
17 
18     /**
19      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
20      */
21     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22         // TODO Auto-generated method stub
23         response.setContentType("text/html;charst=UTF8");//设置响应内容类型其
24         PrintWriter out=response.getWriter();//取得响应输出对象
25         String name=request.getParameter("name");//获得"请求参数"
26         out.println("<html>");
27         out.println("<head>");
28         out.println("<title>Hello Servlet</title>");
29         out.println("</head>");
30         out.println("<body>");
31         out.println("<h1> Hello! "+name+" !</h1>");
32         out.println("</body>");
33         out.println("</html>");
34         out.close();
35     }
36 
37     /**
38      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
39      */
40     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
41         // TODO Auto-generated method stub
42     }
43 
44 }
HelloServlet

   范例中继承了HttpServlet,并重新定义了doGet()方法,当浏览器GET方法发送请求时,会调用此方法。

   由于HttpServletResponse对象代表对客户端的响应,因此可以通过setContentType()设置内容类型。告知浏览器,要以text/html解析,采用字符编码是UTF-8。接着再调用getWriter()方法取得代表响应输出的PrintWriter对象,通过PrintWriter的println()方法输出响应的文字。

运行结果:

    

小结:

   1、要编写Servlet类,必须继承HttpServlet类,并重新定义doGet(),doPost()等对应的HTTP请求方法,容器会分别建立代表请求、响应的HttpServletRequest和HttpServletResponse,可以从前者取得所有关于该次请求的相关信息,从后者对客户端进行各种响应。

  2、在Servlet的API定义中,Servlet是一个接口,其中定义了与Servlet生命周期相关的init()、destroy()方法,以及提供服务的service()方法等。GenericServlet实现了Servlet接口,不过它直接将service()标识为abstract,GenericServlet还实现了ServletConfig接口,将容器初始化Servlet调用init()时传入的ServletConfig封装起来。真正在service()方法中定义了HTTP请求基本处理流程是HttpServlet,而doGet()doPost()传入的参数是HttpServletRequest和HttpServletResponse,不是通用的ServletRequest、ServletResponse。

  3、可以使用@WebServlet标注来告知容器哪些Servlet会提供服务以及额外信息,也可以定义在web.xml中。一个Servlet至少会有三个名称,类名称、注册的Servlet名称、URL模式名称。

  4、一个请求的URI实际上是由三部分组成. requestURI = contextPath+servletPath+pathInfo

    requestURI可以通过HttpServletRequest.getRequestURI()得到。如:/FirstServlet/servlet/path.view

    contextPath(环境路径)可以通过HttpServletRequest.getContextPath()得到如:/FirstServlet

    servletPath(servlet路径)可以通过HttpServletRequest.getServletPath()得到如:/servlet

    pathInfo(路径信息)可以可以通过HttpServletRequest.getPathInfo()得到如:/path.view

原文地址:https://www.cnblogs.com/liuzhongfeng/p/6105255.html