spring mvc的详细配置

来源:互联网 发布:115 mac 编辑:程序博客网 时间:2024/05/16 03:45

流程 

使用springMVC也可以代替struts2,当然只是代替业务分发的功能,struts2的一些其他功能它是没有的,不然要struts2有什么用。
  下面我用springMVC代替struts2去整合hibernate实现简单的员工查询功能。
   使用springMVC有两个配置文件需要配置,一个是applicationContext.xml、另一个是web.xml,在applicationContext.xml里面配置事务管理器以及属性注入等。web.xml里面要添加一个springMVCservlet的注 册和映射(DispatcherServlet),这个servletspringMVC的核心控制器,专门处理各个请求的,然后根据相应的参数分发给 相应的业务控制器处理,业务控制器处理完之后就会返回一字符串给核心控制器,核心控制器再根据该字符串重定向或者转发到相应的页面。还必须给该核心控制器 建一个配置文件,其形式为:核心控制器servlet-servlet.xml,springMVC-servlet.xml.该配置文件放在WEB-INF下面。

web.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?><web-appversion="2.5" 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_2_5.xsd">

 <!-- 指定另一个配置的路径 -->

 <context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>/WEB-INF/classes/app*.xml</param-value>

 </context-param>

 <!-- 控制session开关的过滤器 -->

 <filter>

  <filter-name>openSession</filter-name>

<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

 </filter>

 <filter-mapping>

  <filter-name>openSession</filter-name>

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

 </filter-mapping>

 

 

 <!-- 加载applicationContext.xml    主要是启动spring容器-->

 <listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

 </listener>

 

 

 <!-- springMVC 注册和映射   定义一个servlet ,DispatcherServlet主要是启动mvc框架的。也就是以do结尾的请求都转发到这个dispatchServlet然后由他转发到相应的controller。-->

 <servlet>

  <servlet-name>springMVC</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:springMVC-servlet.xml</param-value>

    </init-param>

   <load-on-startup>1</load-on-startup> 

 </servlet>

 <servlet-mapping>

  <servlet-name>springMVC</servlet-name>

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

 </servlet-mapping>

 <welcome-file-list>

  <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <login-config>

  <auth-method>BASIC</auth-method>

 </login-config></web-app>

 

applicationContext.xml(启动spring容器)

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:util="http://www.springframework.org/schema/util"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd

    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

      http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="configLocation"

            value="classpath:hibernate.cfg.xml">

        </property>

    </bean>

    

    <bean id="DeptDAO" class="com.dao.DeptDAO">

        <property name="sessionFactory">

            <ref bean="sessionFactory" />

        </property>

    </bean>

    <bean id="EmpDAO" class="com.dao.EmpDAO">

        <property name="sessionFactory">

            <ref bean="sessionFactory" />

        </property>

    </bean>

    <bean id="empService" class="com.service.EmpService">

        <property name="deptDAO" ref="DeptDAO"></property>

        <property name="empDAO" ref="EmpDAO"></property>

    </bean>

    

    <!-- 事务管理器 -->

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

    <!-- 事务属性 -->

    <tx:advice id="mytx" transaction-manager="transactionManager">

        <tx:attributes>

            <tx:methodname="*"/>

        </tx:attributes>

    </tx:advice>

    <!-- 织入 -->

    <aop:config>

        <aop:advisoradvice-ref="mytx" pointcut="execution(* com.service.*.*(..))"/>

    </aop:config>

    </beans>

springMVC-servlet.xml(启动mvc 主要是mvc的配置

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:util="http://www.springframework.org/schema/util"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd

    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

      http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    

    <!-- 指定自动扫描路径 把标记了@Controller注解的类转换为bean-->

<context:component-scanbase-package="com.action"></context:component-scan></beans> 

 

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射   请求映射--> 
      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  

 

或者

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  

        <property name="messageConverters">  

            <list>  

                <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->  

            </list>  

        </property>  

    </bean>

EmpAction类代码如下:

package com.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;

import com.service.EmpService;

 

@Controller

@RequestMapping("/emp.do")public class EmpAction {

    @Autowired

    private EmpService empService;

    

    @RequestMapping(params="p=getAll")

    public String getAll(HttpServletRequest request,HttpServletResponse response){

        List list = empService.getAllEmp();

        request.setAttribute("list", list);

        return "/WEB-INF/view/show.jsp";

    }

    

    

}

@Controller指该方法是一个业务控制器;@RequestMapping("/emp.do")是指请求emp.do则核心控制器就会分发给该业务控制器去处理;
@RequestMapping(params="p=getAll") 是指当请求参数为p=getAll时调用业务控制器的这个方法;"/WEB-INF/view/show.jsp"返回给核心控制器,核心控制器再转发 到WEB-INF/view/show.jsp页面去显示所有员工信息。

 

springMVCstruts2的区别


1. 机制:spring mvc的入口是servlet,而struts2filter,这样就导致了二者的机制不同。

2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法, 粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

4. 设计思想上:struts更加符合oop的编程思想,spring就比较谨慎,在servlet上扩展。

5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful urlstruts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间 也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody,然后直接返回响应文本即可。

 


0 0