Servlet开发中的一些细节

来源:互联网 发布:java定时任务管理模块 编辑:程序博客网 时间:2024/05/16 15:57

一、web.xml配置文件细节

1.1 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。

eg

<web-app>

<servlet>

<servlet-name>AnyName</servlet-name>

<servlet-class>com.servlet.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>AnyName</servlet-name>

<url-pattern>/demo/hello.html</url-pattern>

</servlet-mapping>

</web-app>

 

  • <servlet>元素:用于注册Servlet。包含两个主要的子元素,
    • <servlet-name>元素:用于设置Servlet的注册名称;
    • <servlet-class>元素:用于设置Servlet的完整限定名。
  • <servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径。它包含有两个子元素,
    • <servlet-name>元素:用于指定Servlet的注册名称;
    • <url-pattern>元素:用于指定Servlet的对外访问路径。

 

1.2 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

eg

<servlet-mapping>

   <servlet-name>Servlet2</servlet-name>

    <url-pattern>/Servlet2.htm</url-pattern>

   <url-pattern>/Servlet2.html</url-pattern>

   <url-pattern>/Servlet2.jsp</url-pattern>

 </servlet-mapping>

 

1.3 Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式

一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

eg

<servlet-mapping>

<servlet-name>AnyName</servlet-name>

<url-pattern>*.do</url-pattern>

<url-pattern>/action/*</url-pattern>

</servlet-mapping>

 

1.4如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。

eg

<servlet>

<servlet-name>invoker</servlet-name>

<servlet-class>

org.apache.catalina.servlets.InvokerServlet

</servlet-class>

<load-on-startup>2</load-on-startup>

</servlet>

  • 用途:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据。

 

缺省Servlet

  • 如果某个Servlet的映射路径仅仅为一个正斜杠“/”,那么这个Servlet就成为当前Web应用程序的缺省Servlet
  • 凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。
  • <tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServletServlet,并将这个Servlet设置为了缺省Servlet
  • 当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet

 

二、Servlet知识点细节

2.1 Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度

2.2 针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁,即servlet对象是单例的。可以参考这篇文章《对javaservlet单例模式的理解》。

2.3 Servlet的整个生命周期内,Servletinit方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servletservice方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servletservice()方法,service方法再根据请求方式分别调用doGet/doPost方法。

 

0 0
原创粉丝点击