框架配置文件

Spring、SpringMVC、Hibernate配置文件

web.xml

<?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">
	<!--web应用名称-->
  <display-name>webName< /display-name>
  <!--配置spring容器-->
  <context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <!--监听器-->
   <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
  <!-- 配置前端控制器 -->
  <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <!-- 
          	ContextconfigLocation配置springmvc加载的配置文件适配器、处理映射器等
           -->
          <param-name>contextConfigLocation</param-name>
          <param-value>WEB-INF/classes/spring/springmvc.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <!-- 
         /,所有访问都由DispatcherServlet进行解析
       -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <!-- 
      	.action访问以.action结尾的  由DispatcherServlet进行解析
       -->
      <url-pattern>.action</url-pattern>
  </servlet-mapping>

  <!-- 解决post乱码问题的过滤器 -->
  <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>
  </filter>
  <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--自定义xss请求过滤器-->
   <filter>
    <filter-name>XssSqlFilter</filter-name>
    <filter-class>com.gt.filters.XssFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>XssSqlFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

  <!-- 404错误拦截 -->
  <error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
  </error-page>
  <!-- 500错误拦截 -->
  <error-page>
    <error-code>500</error-code>
    <location>/error500.jsp</location>
  </error-page>
  
  <welcome-file-list>
    <welcome-file>welcome.jsp</welcome-file>
  </welcome-file-list>
</web-app>
public class XssFilter implements Filter {

    FilterConfig filterConfig = null;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
    	HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response ;
    	String uri = req.getRequestURI().toLowerCase().trim() ;
//    	if(	uri.startsWith("/ad/ad/") ) {      //公告提交不做处理
//			chain.doFilter(request, response) ;
//    	} else {
    		//对请求进行拦截,防xss处理
    		chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request), response);
//    	}
    	
    }

    @Override
    public void destroy() {
        this.filterConfig = null;
    }

}
Filter介绍

常见应用场合:

  • 认证Filter
  • 日志和审核Filter
  • 图片转换Filter
  • 数据压缩Filter
  • 密码Filter
  • 令牌Filter
  • 触发资源访问事件的Filter
  • XSLT Filter
  • 媒体类型链Filter

Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1) void init(FilterConfig config):用于完成Filter的初始化。FilteConfig用于访问Filter的配置信息。
(2) void destroy():用于Filter销毁前,完成某些资源的回收。
(3) void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能的核心方法,该方法就是对每个请求及响应增加额外的处理。该方法实现对用户请求request进行预处理,也可以实现对服务器响应response进行后处理—它们的分界线为是否调用了chain.doFilter(request,response),执行该方法之前,即对用户请求request进行预处理,执行该方法之后,即对服务器响应response进行后处理。

Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL
<filter>配置

  • <filter-name>用来定义过滤器的名称,该名称在整个程序中都必须唯一。
  • <filter-class>元素指定过滤器类的完全限定的名称,即Filter的实现类。
  • <init-param>为Filter配置参数,与<context-param>具有相同的元素描述符<param-name>和<param-value>。
  • <filter-mapping>元素用来声明Web应用中的过滤器映射,过滤器被映射到一个servlet或一个URL 模式。这个过滤器的和<filter-mapping>必须具有相同的<filter-name>,指定该Filter所拦截的URL。过滤是按照部署描述符的<filter-mapping>出现的顺序执行的
Servlet介绍

Servlet是个特殊的java类,继承于HttpServlet。

  • 客户端通常只有GET和POST两种请求方式,Servlet为了响应则两种请求,必须重写doGet()和doPost()方法
  • 大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求

HttpServlet有两个方法

  • init(ServletConfig config):创建Servlet实例时,调用该方法的初始化Servlet资源
  • destroy():销毁Servlet实例时,自动调用该方法的回收资源

通常无需重写init()和destroy()两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init()方法,如果重写了init()方法,应在重写该方法的第一行调用super.init(config),该方法将调用HttpServlet的init()方法。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接,才需要重写destory方法()。

创建Servlet实例有两个时机

  • 客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet。
  • Web应用启动时立即创建Servlet实例,即load-on-start Servlet。

<servlet>配置

  • 需要配置<servlet>和<servlet-mapping>。
  • <servlet>用来声明一个Servlet。<icon>、<display-name>和<description>元素的用法和<filter>的用法相同。
  • <init-param>元素与<context-param>元素具有相同的元素描述符,可以使用<init-param>子元素将初始化参数名和参数值传递给Servlet,访问Servlet配置参数通过ServletConfig对象来完成

    java.lang.String.getInitParameter(java.lang.String name):用于获取初始化参数

  • <description>、<display-name>和<icon>
    • <description>:为Servlet指定一个文本描述
    • <display-name>:为Servlet提供一个简短的名字被某些工具显示
    • <icon>:为Servlet指定一个图标,在图形管理工具中表示该Servlet
  • <servlet-name>、<servlet-class>和<jsp-file>元素
    • <servlet-name>用来定义servlet的名称,该名称在整个应用中必须是惟一的
    • <servlet-class>用来指定servlet的完全限定的名称
    • <jsp-file>用来指定应用中JSP文件的完整路径。这个完整路径必须由/开始
  • <load-on-startup>
    如果load-on-startup元素存在,而且也指定了jsp-file元素,则JSP文件会被重新编译成Servlet,同时产生的Servlet也被载入内存。<load-on-startup>的内容可以为空,或者是一个整数。这个值表示由Web容器载入内存的顺序
  • <servlet-mapping>
    • <servlet-name>:Servlet的名字,唯一性和一致性,与<servlet>元素中声明的名字一致
    • <url-pattern>:指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。<servlet-mapping>将URL模式映射到某个Servlet,即该Servlet处理的URL
Listener介绍

常用的Web事件接口有如下几个:

  • ServletContextListener:用于监听Web Application的启动和关闭;
  • ServletContextAttributeListener:用于监听ServletContext范围(Application)内属性的改变;
  • ServletRequestListener:用于监听用户的请求;
  • ServletRequestAttributeListener:用于监听ServletRequest范围(Request)内属性的改变;
  • HttpSessionListener:用于监听用户session的开始和结束;
  • HttpSessionAttributeListener:用于监听HttpSession范围(Session)内属性的改变

<listener>主要用于监听Web应用事件

springmvc.xml整合hibernate

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   <!--启动aop功能-->
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   <!--启用临时事物-->
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   <!--p标签-->
  	   xmlns:p="http://www.springframework.org/schema/p" 
  	   <!--启用自动扫描或者注解配置-->
	   xmlns:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans 
							http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
							http://www.springframework.org/schema/context 
							http://www.springframework.org/schema/context/spring-context-3.0.xsd 
							http://www.springframework.org/schema/tx 
							http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
							http://www.springframework.org/schema/aop 
							http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
							http://www.springframework.org/schema/mvc 
							http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
	<!--开启注解-->
	<context:annotation-config />	
	<!--解决了@Controller注解的使用前提配置-->	
	<mvc:annotation-driven />
	<!--自动扫描Controller,对包进行扫描-->
	<context:component-scan base-package="com.test.*" />			
	<!--开启基于@AspectJ切面注解-->		
	<aop:aspectj-autoproxy/>
	<!--创建一个beanName的实例
		scope属性值:
			singleton:默认类型,单例,只会创建一个对象,下次就不会创建了
			prototype:每次对该bean的请求都会创建一个新的实例
			request:从前台访问后一次,就是一次的request,这是创建出一个对象,请求结束后,对象等着垃圾回收机制回收它
			session:从前台访问后一次,浏览器不关闭,如果调用其它方法的时候,还会调用的同一个对象
	-->
	<bean id="beanName" class="beanName的类全名" scope="属性值" init-method="初始化调用的方法名" destroy-method="销毁时调用的方法名"> 
		<property name = "bean类中的属性名称" ref="要引用的bean名称"/>
		<property name = "bean类中的属性名称" value="要制定的属性值"/>
		<property name = "bean类中的属性名称" ref="要引用的bean名称">
			<!--创建匿名内部类赋值,这个bean无法被外界访问-->
			<bean class="bean的类全名"/>
		</property>
	</bean>
	<!--拦截器-->
	<mvc:interceptors>
        <bean class="拦截器路径">
        	<!-- <mvc:interceptor>
            拦截所有路径的请求   包括子路径
            <mvc:mapping path="/**"/>
            <bean class="拦截器"></bean>
        </mvc:interceptor> -->
        </bean>
    </mvc:interceptors>

	<!--hibernate相关配置-->
	<!-- 配置hibernate的SessionFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<!-- 注入数据源 相关信息看源码 -->
		<property name="dataSource" ref="dataSource" />
		<!-- hibernate配置信息 -->
		<property name="hibernateProperties">
			<props>        
               <prop key="hibernate.dialect">${hibernate.dialect}</prop>          
               <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
               
               <prop key="hibernate.cache.use_second_level_cache">true</prop>  
				<prop key="hibernate.cache.use_query_cache">true</prop>  
				<!-- 设置二级缓存插件EHCache的Provider类-->  
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
				<prop key="hibernate.cache.region_prefix">encache_</prop>
				<prop key="hibernate.cache.use_structured_entries">true</prop>  
				<prop key="hibernate.generate_statistics">false</prop>
          </props>
		</property>
	</bean>
	<!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 配置事务增强处理Bean,指定事务管理器 -->
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<!-- 配置详细事务处理语义 
			propagation属性:
				 REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择
				 SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
				 MANDATORY:支持当前事务,如果当前没有事务,就抛出异常
				 REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
				 NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
				 NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
				 NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务
		-->
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="load*" propagation="SUPPORTS" read-only="true" />
 
			<!-- 其他采用默认事务方式 -->
			<tx:method name="*" />
 
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<!-- 配置切入点 -->
		<aop:pointcut id="transactionPointcut"
					  expression="execution(* com.test.service..*Impl.*(..))" />
			
		<!-- 指定在txAdvice切入点应用txAdvice事务增强处理
			pointcut-ref:切点名称
			advice-ref:事务管理器名称
		 -->
		<aop:advisor pointcut-ref="transactionPointcut"
					 advice-ref="transactionAdvice" />
		<!--通知-->
		<aop:before pointcut-ref="切点名称" method="切面中用做 前置 通知的方法名"/>
		<aop:after-returning pointcut-ref="切点名称" method="切面中用做 后置 通知的方法名"/>
		<aop:after-throwing pointcut-ref="切点名称" method="切面中用做 异常 通知的方法名"/>
		<aop:after pointcut-ref="切点名称" method="切面中用做 最终 通知的方法名"/>
		<aop:around pointcut-ref="切点名称" method="切面中用做 环绕通知的方法名"/>			 
	</aop:config>
	
	<!-- 配置视图解析器 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 使用前缀和后缀 -->
         <property name="prefix" value="/"></property>
         <property name="suffix" value=".jsp"></property>
	</bean>
</beans>

如果在配置前端控制器时拦截了所有的请求,不做特殊处理就会导致部分静态资源无法使用。如果是这种情况就可以使用下面的配置来访问静态资源文件

<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/css/**" location="/css/" />  
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/imgdata/**" location="/imgdata/" />
<!-- 加载资源文件 -->
<context:property-placeholder location="/WEB-INF/classes/xxx.properties"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值