Java Servlet是什么?
Servlet的本质就是一个Java接口,之所以能生成动态的Web内容,是因为对客户的一个HTTP请求,Servlet通过接口这个规范重写了其中的方法,然后Web服务器通过这些反馈给客户端。所以Servlet并不直接和客户端打交道,我们需要一个Web服务器如Tomcat,是Web服务器完成与客户的监听、消息的传输等工作。Servlet的运行需要在web.xml中进行描述和注册。如配置Servlet的类,初始化的参数,不同的URL映射到对应的Servlet,还有过滤等功能。所以Servlet类似其他CGI技术。
Servlet的方法
Servlet由javax.servlet和javax.servlet.http两个包构成(在Tomcat安装目录的lib有servlet-api.jar)。servlet包中定义了Servlet类必须实现和拓展的通用接口和类,http包定义了采用HTTP通信的HttpServlet类。
Servlet接口有5个方法:
init(ServletConfig config)初始化一个Servlet类实例,在一个生命周期中此方法只被调用一次。
service(ServletRequest req,ServletResponse res),用于处理用户请求,可以执行多次,每个请求都会执行一次service()方法。所以重写这个方法需要保证线程安全性。因为一个Servlet实例可以同时服务多个客户请求。
destroy()终止Servlet服务,一个生命周期执行一次。
getServletConfig()获取ServletConfig对象,包含初始化参数和ServletContext对象。
getServletInfo()返回一个String对象,包含Servlet相关信息。
Servlet程序的编译运行
可以直接将编译好的文件放入tomcat安装目录下的webapps,可以先用ROOT文件夹。然后重写web.xml文件对Servlet进行配置。
web.xml文件的主要标识:
<servlet-name>是名字,可以随便起,要和<servlet-mapping>里面的名字一致。
<servlet-class>是要调用的Class文件,默认是在/classes文件夹下,一定要与对应的Class文件名一致。
<init-param>Servlet初始化的参数,有<param-name>和<param-value>这两个对应了一个key-value参数。通过更改这里的参数就不需要修改Servlet的代码。
<load_on_startup>用于指定加载Servlet的优先权,数字小的先加载。
<servlet-mapping>是对Servlet的访问路径的映射,<servlet-name>与前面的名字一致,通过<url-pattern>的URL路径来标识地址栏输入的路径。为什么需要有servlet-mapping呢?因为通过它可以使用通配符来调用对应的servlet-class。
放好编译文件,写好XML配置文件,就可以打开Tomcat服务器,然后通过浏览器调用Servlet程序了。浏览器地址后缀是<url-pattern>的内容。
当然更方便的是使用Eclipse等IDE集成Tomcat来实现这些功能。
下面是一份参考的写法:
1 <servlet> 2 3 <servlet-name>HelloWorld</servlet-name> 4 <servlet-class>HelloWorld</servlet-class> 5 <init-param> 6 <param-name>user</param-name> 7 <param-value>alex</param-value> 8 </init-param> 9 <init-param> 10 <param-name>address</param-name> 11 <param-value>http://www.baidu.com</param-value> 12 </init-param> 13 <load-on-startup>1</load-on-startup> 14 15 </servlet> 16 17 <servlet-mapping> 18 <servlet-name>HelloWorld</servlet-name> 19 <url-pattern>/servlet/*</url-pattern> 20 </servlet-mapping>