6jsp和servlet在xml得映射和web.xml介绍
Posted 永远的我们
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6jsp和servlet在xml得映射和web.xml介绍相关的知识,希望对你有一定的参考价值。
本身肯定会学的东西,今天想起来了,那就记一下吧。
做那个后端的界面时候,有人反应不要hou.jsp,说设个路由随便编乱点,别人猜不到。我也没听懂设个路由是什么意思。
最后一想,这不就是个jsp映射嘛。
jsp映射和servlet映射就一条不同,servlet还可以通过@WebServlet(“”)方法。
顺便转载一下web.xml的介绍,方便以后查看
转载自:http://blog.csdn.net/believejava/article/details/43229361
Web.xml详解:
1.web.xml加载过程(步骤)
首先简单讲一下,web.xml的加载过程。当启动一个WEB项目时,容器包括(JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
1. 启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: <listener></listener>和<context-param></context-param>。
2. 紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文。
3. 容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。
4. 容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:
- <span style="font-family:Times New Roman;">ServletContextapplication=ServletContextEvent.getServletContext();</span>
context-param的值就是application.getInitParameter("context-param的键");得到这个context-param的值之后,你就可以做一些操作了。
5. 举例:你可能想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。
6. 接着,容器会读取<filter></filter>,根据指定的类路径来实例化过滤器。
7. 以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。
8. 总的来说,web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。
9. 对于某类元素而言,与它们出现的顺序是有关的。以<filter>为例,web.xml中当然可以定义多个<filter>,与<filter>相关的一个元素是<filter-mapping>,注意,对于拥有相同<filter-name>的<filter>和<filter-mapping>元素而言,<filter-mapping>必须出现在<filter>之后,否则当解析到<filter-mapping>时,它所对应的<filter-name>还未定义。web容器启动初始化每个<filter>时,按照<filter>出现的顺序来初始化的,当请求资源匹配多个<filter-mapping>时,<filter>拦截资源是按照<filter-mapping>元素出现的顺序来依次调用doFilter()方法的。<servlet>同<filter>类似,此处不再赘述。
2.web.xml标签详解
1. XML文档有效性检查
- <span style="font-family:Times New Roman;"><!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ></span>
这段代码指定文件类型定义(DTD),可以通过它检查XML文档的有效性。下面显示的<!DOCTYPE>元素有几个特性,这些特性告诉我们关于DTD的信息:
- web-app定义该文档(部署描述符,不是DTD文件)的根元素
- PUBLIC意味着DTD文件可以被公开使用
- -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”意味着DTD由Sun Microsystems, Inc.维护。该信息也表示它描述的文档类型是DTD Web Application 2.3,而且DTD是用英文书写的。
- URL"http://java.sun.com/dtd/web-app_2_3.dtd"表示D文件的位置。
2. <web-app></web-app>
部署描述符的根元素是<web-app>。DTD文件规定<web-app>元素的子元素的语法如下:
- <span style="font-family:Times New Roman;"><!ELEMENT web-app (icon?, display-name?, description?,distributable?, context-param*, filter*, filter-mapping*,listener*, servlet*, servlet-mapping*, session-config?,mime-mapping*, welcome-file-list?,error-page*, taglib*, resource-env-ref*, resource-ref*,security-constraint*, login-config?, security-role*,env-entry*,ejb-ref*, ejb-local-ref*)> </span>
正如您所看到的,这个元素含有23个子元素,而且子元素都是可选的。问号(?)表示子元素是可选的,而且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或多次。有些子元素还可以有它们自己的子元素。web.xml文件中<web-app>元素声明的是下面每个子元素的声明。下面讲述部署描述符中可能包含的所有子元素。
注意:在Servlet 2.3中,子元素必须按照DTD文件语法描述中指定的顺序出现。比如:如果部署描述符中的<web-app>元素有<servlet>和<servlet-mapping>两个子元素,则<servlet>子元素必须出现在<servlet-mapping>子元素之前。在Servlet2.4中,顺序并不重要。
3. <display-name></display-name>
<display-name>test-hwp-web-application</display-name>定义了web应用的名称,可以在http://localhost:8080/manager/html中显示。如下所示:
4. <distributable/>
<distributable/>可以使用distributable元素来告诉servlet/JSP容器,Web容器中部署的应用程序适合在分布式环境下运行。
5. <context-param></context-param>
-
<!--****************************上下文初始化参数***************************-->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value>business.root</param-value>
-
</context-param>
-
<!-- spring config -->
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>/WEB-INF/spring-configuration/*.xml</param-value>
-
</context-param>
5.1<context-param>解释:
5.2 什么情况下使用,为什么使用<context-param>:
5.3 Spring配置文件:
-
<!-- spring config -->
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>/WEB-INF/spring-configuration/*.xml</param-value>
-
</context-param>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
<!-- 应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value>webapp.root</param-value>
-
</context-param>
-
<!—business-client应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value> business.root </param-value>
-
</context-param>
-
<!—public-base应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value> pubbase.root</param-value>
-
</context-param>
5.4 多个配置文件交叉引用处理:
-
<context-param>
-
<param-name>contextConfigLocation </param-name>
-
<param-value> applicationContext-database.xml,applicationContext.xml</param-value>
-
<context-param>
-
<bean id="userService" class="domain.user.service.impl.UserServiceImpl">
-
<property name="dbbean">
-
<ref bean="dbBean"/>
-
</property>
-
</bean>
5.5 在不同环境下如何获取:范例:
-
<context-param>
-
<param-name>param_name</param-name>
-
<param-value>param_value</param-value>
-
</context-param>
6. <session-config></session-config>
-
<!-- Set timeout to 120 minutes -->
-
<session-config>
-
<session-timeout>120</session-timeout>
-
</session-config>
7. <listener></listener>
-
<!--****************************监听器配置*********************************-->
-
<!-- Spring的log4j监听器 -->
-
<listener>
-
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
-
</listener>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
<!-- 与CAS Single Sign Out Filter配合,注销登录信息 -->
-
<listener>
-
<listener-class>com.yonyou.mcloud.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
-
</listener>
7.1 Listener介绍:
(1). ServletContextListener:用于监听Web应用的启动和关闭;
(2). ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
(3). ServletRequestListener:用于监听用户的请求;
(4). ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
(5). HttpSessionListener:用于监听用户session的开始和结束;
(6). HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
<listener>主要用于监听Web应用事件,其中有两个比较重要的WEB应用事件:应用的启动和停止(starting up or shutting down)和Session的创建和失效(created or destroyed)。应用启动事件发生在应用第一次被Servlet容器装载和启动的时候;停止事件发生在Web应用停止的时候。Session创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。为了使用这些Web应用事件做些有用的事情,我们必须创建和使用一些特殊的“监听类”。它们是实现了以下两个接口中任何一个接口的简单java类:javax.servlet.ServletContextListener或javax.servlet.http.HttpSessionListener,如果想让你的类监听应用的启动和停止事件,你就得实现ServletContextListener接口;想让你的类去监听Session的创建和失效事件,那你就得实现HttpSessionListener接口。
7.2 Listener配置:
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
<servlet>
-
<servlet-name>context</servlet-narne>
-
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
8. <filter></filter>
-
<!--****************************过滤器配置*********************************-->
-
<!-- 字符集过滤器 -->
-
<filter>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
<init-param>
-
<param-name>forceEncoding</param-name>
-
<param-value>true</param-value>
-
</init-param>
-
</filter>
-
<!-- 单点登出过滤器 -->
-
<filter>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.session.SingleSignOutFilter</filter-class>
-
</filter>
-
<!-- 认证过滤器 -->
-
<filter>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.ExpandAuthenticationFilter</filter-class>
-
<init-param>
-
<param-name>casServerLoginUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server/login</param-value>
-
</init-param>
-
<init-param>
-
<!--这里的server是服务端的IP -->
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
</filter>
-
<!-- 验证ST/PT过滤器 -->
-
<filter>
-
<filter-name>CAS Validation Filter</filter-name>
-
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
-
<init-param>
-
<param-name>casServerUrlPrefix</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server</param-value>
-
</init-param>
-
<init-param>
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyCallbackUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/business/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyReceptorUrl</param-name>
-
<param-value>/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyGrantingTicketStorageClass</param-name>
-
<param-value>com.yonyou.mcloud.cas.client.proxy.MemcachedBackedProxyGrantingTicketStorageImpl</param-value>
-
</init-param>
-
<!-- 解决中文问题 -->
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
</filter>
-
<filter>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
-
</filter>
-
<filter>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
-
</filter>
-
<filter>
-
<filter-name>NoCache Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.NoCacheFilter</filter-class>
-
</filter>
-
<!--****************************映射关系配置********************************-->
-
<filter-mapping>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>NoCache Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/proxyCallback</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>以上是关于6jsp和servlet在xml得映射和web.xml介绍的主要内容,如果未能解决你的问题,请参考以下文章