[Servlet&JSP] 部署描述设置
2015-12-16 16:21
651 查看
Servlet的设置
以下是在web.xml中设置servlet的范例片段:<servlet> <servlet-name>Some</servlet-name> <servlet-class>club.chuxing.SomeServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Some</servlet-name> <url-pattern>/Some.do</url-pattern> </servlet-mapping>
当web应用程序启动后,事实上并没有加载所有的Servlet。容器会在请求时,才将对应的Servlet类加载、实例化并进行初始动作,然后再调用service()方法来处理请求。
如果希望在应用程序启动时,就先把Servlet类加载、实例化并做好初始化动作,就可以使用
<load-on-startup>设置。设置大于0的值,表示在启动应用程序后就要初始化Servlet。数字表示了Servlet的初始化顺序,如果有多个Servlet在设置
<load-on-startup>时使用了相同的数字,则按其在web.xml中设置的顺序来初始化Servlet。
别尝试在所有的Servlet上都设置
<load-on-startup>。越多的Servlet在应用程序启动时被初始化,表示应用程序的启动越花时间。只有在那些初始时会加载比较多资源的Servlet上才设置
<load-on-startup>,像是web框架(Framework)中担任前端控制器(Front Controller)角色的Servlet。
可以在
<url-pattern>中设置三种模式:
完全符合模式
必须以斜杠(/)作为开头,也就是以web应用程序环境根目录开始,指定完整的URL模式。如:
<url-pattern>/admin/login.do</url-pattern>。
目录符合模式
指定某个目录下的所有URL都交由某个Servlet来处理,则可以在目录斜杠(/)后加上星号(
*)。如
<url-pattern>/guest/*</url-pattern>。
扩展名符合模式
指定以某个扩展名为结尾的所有URL请求都交由对应的Servlet处理,则可以使用星号(
*)作为开头,并加上扩展名。
<url-pattern>*.do</url-pattern>。
不能混用目录符合模式与扩展名符合模式,即不能出现如
<url-pattern>/admin/*.do</url-pattern>这样的URL模式设置。
如果有URL模式设置比对的规则在某些URL请求时有所重叠,则请求时比对的原则依完全模式、目录模式、扩展名模式的顺序来决定,也就是从最严格的模式开始符合。
在设置过滤器时,
<filter-mapping>上也可以设置
<url-pattern>标签,设置的原则与
<servlet-mapping>上的
<url-pattern>是相同的。在Servlet2.5版本之后,可以直接在同一个
<servlet-mapping>中设置多个
<url-pattern>。例如:
<servlet-mapping> <servlet-name>Some</servlet-name> <utl-pattern>/something.do</utl-pattern> <utl-pattern>/someone.do</utl-pattern> </servlet-mapping>
同样的,也可以在
<filter-mapping>中设置多个
<url-pattern>或
<servlet-name>。例如:
<filter-mapping> <filter-name>Some</filter-name> <utl-pattern>/something.do</utl-pattern> <utl-pattern>/someone.do</utl-pattern> <servlet-name>Other</servlet-name> </filter-mapping>
设置欢迎与错误处理页面
如果用户用户请求某个类似于/BookmarkOnline/user的URL,而user在Servlet的URL模式设置中并不存在,它只是一个目录,若不想用户看到资源不存在之类的错误信息,则可以设置默认的欢迎页面,在用户请求某个目录时可以自动挑选欢迎页面加以显示。<web-app ...> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
设置
<welcome-file>时,注意態用斜杠(/)作为开头(这不是在设置整个应用程序的默认首页)。在请求某个目录名称时,容器会自动依
<welcome-file>中的文件顺序,看看时候可找到对应的文件,找到的话就显示给用户。
如果在存取应用程序的时候发生了异常或者错误,而没有在Servlet/JSP中处理这个异常或错误,则最后会由容器加以处理,一般容器就是直接显示异常信息与堆栈跟踪信息。如果希望容器发现这类异常或者错误时,可以自动转发到某个URL,则可以在web.xml中使用
<error-page>进行设置。
例如,若想要在容器收到某个类型的异常对象时进行转发,则可以做如下设置:
<web-app ...> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/report.view</location> </error-page> </web-app>
如果想要基于HTTP的错误代码转发到处理页面,则要搭配
<error-code>来设置。例如:
<web-app ...> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> </web-app>
这个设置在自行使用HttpServletResponse的sendError()送出错误状态码时也有作用,因为sendError()只是告知容器,以容器的默认方式或web.xml中的设置来产生错误状态码的信息。
MIME与扩展名的对应
当自动响应串流给浏览器时,为了让浏览器知道如何处理收到的串流对象,必须告知MIME类型。若应用程序中使用到了MIME类型,可以在web.xml中设置扩展名与MIMIE类型对应。例如:<web-app ...> <mime-mapping> <extension>pdf</extension> <mime-type>application/pdf</mime-type> </mime-mapping> </web-app>
<extension>设置文件的扩展名,而
<mime-type>设置对应的MIME类型名称。如果想要知道某个文件的MIME类型名称,则可使用ServletContext的getMimeType()方法,这个方法让你指定文件名称,然后根据web.xml总设置的对应扩展名,取得MIME类型的名称。
相关文章推荐
- js获取鼠标位置的各种方法
- ExtJS grid全选事件
- javascript实现无缝上下滚动特效
- 自定义JSP中的Taglib标签之六Taglib中常用的属性值与tld常用标签简介与web.xml设置自定义标签的uri
- 自定义JSP中的Taglib标签之五自定义标签之SimpleTagSupport使用
- 自定义JSP中的Taglib标签之四自定义标签中的Function函数
- 自定义JSP中的Taglib标签之三简单仿JSTL中带标签体的ForEach循环
- JavaScript判断数据类型
- lazyload.js详解
- javascript:void(0)是什么意思
- js实现将选中内容分享到新浪或腾讯微博
- bzoj1449【JSOI2009】球队收益
- js中如何判断是不是有效的手机号
- js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
- 自定义JSP中的Taglib标签之二带自定义属性的标签
- js获取 input file 图片缩略图
- 自定义JSP中的Taglib标签之一简单入门篇(无参数的自定义标签)
- 推荐五款流行的JavaScript模板引擎
- js选择a问题
- 3.2:pandas数据的导入与导出【CSV,JSON】