第一个Servlet程序及分析

时间:2023-03-09 08:50:19
第一个Servlet程序及分析

第一个Servlet程序:

 package cc.openhome;

 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; /**
* Servlet implementation class HelloServlet
*/
@WebServlet("/hello.view")
public class HelloServlet extends HttpServlet { /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charst=UTF8");//设置响应内容类型其
PrintWriter out=response.getWriter();//取得响应输出对象
String name=request.getParameter("name");//获得"请求参数"
out.println("<html>");
out.println("<head>");
out.println("<title>Hello Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1> Hello! "+name+" !</h1>");
out.println("</body>");
out.println("</html>");
out.close();
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
} }

HelloServlet

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

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

运行结果:

    第一个Servlet程序及分析

小结:

  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