初识Servlet

1.1 关于HttpServlet

Servlet接口,定义了Servlet应当有的基本行为。例如,与Servlet生命周期相关的init()、destroy()方法,提供服务时所需要调用的service()方法等。

实现Servlet接口的类是GenericServlet类,它还实现了ServletConfig接口,将容器调用init()方法时所传入的ServletConfig实例封装起来,而service()方法直接标示为abstract而没有任何的实现。GenericServlet的讨论会在第五章加以讨论。

HttpServlet继承自GenericServlet,其service()方法中的流程大致如下:

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        String method = req.getMethod();
        if (method.equals(METHOD_GET)) {
            //…
                doGet(req, resp);
            //…
        } else if (method.equals(METHOD_HEAD)) {
            //…
            doHead(req, resp);

        } else if (method.equals(METHOD_POST)) {
            doPost(req, resp);

        } else if (method.equals(METHOD_PUT)) {
            doPut(req, resp);
        } 
		//…
 }

当请求来到时,容器会调用Servlet的service()方法。可以看到,HttpServlet的service()中定义的,基本上就是判断HTTP请求的方式,再分别调用doGet()、doPost()等方法,所以若想针对GET、POST等方法进行处理,只需要在继承HttpServlet之后,重新定义相对应的doGet()、doPost()方法。

1.2 使用@WebServlet

编写好Servlet之后,接下来要告诉Web容器有关这个Servlet的一些信息。在Servlet3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息。

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

只要在Servlet上设置@WebServlet标注,容器会自动读取当中的信息。上面的@WebServlet告诉容器,如果请求的URL是“/hello.view”,则由HelloServlet的实例提供服务。

容器会在首次请求需要某个Servlet服务时,才将对应的Servlet类实例化、进行初始化操作,然后再处理请求。如果希望应用程序启动时,就先将Servlet类载入、实例化并做好初始化动作,则可以使用loadOnStartup设置。设置大于0的值(默认值为-1),表示启动应用程序后就要初始化Servlet。

1.3 使用web.xml

使用标注来定义Servlet是Java EE 6中Servlet3.0之后才有的功能,在先前的版本中,必须在Web应用程序的WEB-INF目录中,建立一个web.xml文件定义Servlet相关信息。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>cc.openhome.HelloServlet</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <error-page>
  	<exception-type>java.lang.*</exception-type>
  	<location>/error.jsp</location>
  </error-page>
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  </web-app>

web.xml中的设置会覆盖Servlet中的标注设置,可以使用标注来作默认值,而web.xml来作日后的更改设置值之用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值