Java Web基础(二)(Servlet编写与配置)


        下面的内容都是基础的Servlet知识,如果你想打好基础,就别急着学习JSP,而是从Servlet开始学习。因为JSP页面最终会被转译为Servlet,掌握了Servlet,JSP也就学会了一半,而且在写JSP页面时也能更准确地定位错误。

        开发环境的搭建我就不说了,百度一搜一大堆,说一下我的开发环境:MyEclipse + Tomcat 7.0 + JDK 7

编写一个基本的Servlet

        我们使用最原始的方式编写一个Servlet,首先遇到建一个类,然后继承HttpServlet,并实现其中的某些方法。HttpServlet位于servlet-api.jar中,这个jar包是大名鼎鼎的web容器——Tomcat提供的,我们来看一下jar包里有啥:

       

       下面是核心的类关系图:

       通过这个类关系图我们知道,Servlet接口定义了基本行为,例如与Servlet生命周期有关的init()、destroy(),以及提供服务时调用的service()方法;然后抽象类GenericServlet实现了Servlet接口、ServletConfig接口,将容器调用init()方法时传入的ServletConfig实例封装起来,而service()方法直接标示为abstract而没有任何实现。

       我们注意到GenericServlet没有规范任何有关HTTP的相关方法,而是由继承它的HttpServlet来定义,这也容易理解,因为不只有HTTP一种协议,还有FTP等其它协议。然后HttpServlet里面实现了service()方法,判断HTTP的请求方式并交给doGet、doPost等方法去处理,所以我们要在继承HttpServlet类时需要重写doGet或doPost方法。

 

在web.xml中注册Servlet程序

       这是最传统的方式,首先我们需要写一个类并继承HttpServlet,重写相应的方法后,打开web.xml注册该Servlet,下面是一个注册Servlet的例子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
	<servlet>
		<description>该Servlet的描述信息</description>
		<display-name>显示的名称</display-name>
		<servlet-name>SimpleServlet</servlet-name>
		<servlet-class>com.web.SimpleServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>SimpleServlet</servlet-name>
		<url-pattern>/servlet/SimpleServlet</url-pattern>
	</servlet-mapping>
</web-app>


 

 

       上面注册的意思是,用户可以通过”../servlet/SimpleServlet.view”来请求该Servlet,web容器会将该Servlet请求交给名称为SimpleServlet(由<servlet-name>匹配)的Servlet来处理,该Servlet对应的类是com.web.SimpleServlet。具体流程如下图所示:

 

       这里需要注意的一点是,当应用程序启动后,默认情况下不会创建所有的Servlet实例。当这个Servlet第一次被请求时,他会被Web容器转译为Servlet并编译为.class文件,存放在指定目录中(具体啥目录由Web容器决定),并创建相应的实例,这个过程叫做Servlet的初始化;若以后再请求该Servlet,则不会触发转译和编译操作。如果想在应用程序启动时就进行编译和转译的操作,需要在web.xml中的<servlet>标签中,指定<load-on-startup>的值大于0(小于等于0为不随程序启动而初始化),其值的大小决定了初始化的顺序。

 

使用@WebServlet注册Servlet程序

       在Servlet 3.0中,可以使用标注(Annotation)来告诉web容器哪些是需要注册的servlet,例如下面的例子:

       这个例子等同于在web.xml中这样配置:

	<servlet>
		<servlet-name>HelloServlet</servlet-name>
		<servlet-class>com.web.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/hello.view</url-pattern>
	</servlet-mapping>

 

       我们看到使用标注的形式比使用web.xml配置servlet简单多了,除此之外,@WebSevlet还可以配置name, urlPatterns(默认), loadOnStartup等,能在web.xml中配置的,使用@WebServlet也能配置。

 

       虽然使用web.xml方式比较麻烦,但是web.xml中的配置会覆盖@WebServlet标注的配置,所以我们可以使用@WebServlet来作为默认值,然后使用web.xml方式作为日后更改设置值使用。

 

       Servlet高级配置和部署,放在以后时机合适了再讲吧!


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值