SpringMVC 入门教程知识

SpringMVC 入门知识

一、SpringMVC入门介绍

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

  HandlerMapping接口 -- 处理请求的映射。由于HandlerMapping接口的实现类有两种方式:

SimpleUrlHandlerMapping ——通过配置文件,把一个URL映射到Controller;

DefaultAnnotationHandlerMapping ——通过注解,把一个URL映射到Controller类上

  所以,springMVC的实现由两种方式:配置文件和注解两种方式。

springMVC与struts2的区别:
  1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。

  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上下文。

    注:下面用到的实例以用户的登录为简单模型来解释。用户的字段有id、loginName、passwd。该小实例提供链接MySQL数据库的注册  和登录的功能。

二、SpringMVC与Hibernate整合

1.搭建环境

  导入SSH的jar包和数据库驱动的jar包,即将必须的jar包拷贝到webRoot/WEB-INF/lib文件中,会自动加载到该项目中。

2.搭配spring环境

  src目录下自动生成applicationContext.xml的spring配置文件。此外还得再web.xml中配置spring容器实例化的监听器。关键代码如下:

      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
      </context-param>     
      <listener>
           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

注:在这里可以不用配置spring容器实例化的监听器

3.搭建Hibernate环境

  a.搭建的步 骤:Hibernate的配置文件选择spring configuration file(applicationContext.xml),在选择Existing spring configuration file,其他默认。接着选择数据库,注意修改当前项目数据库名。接着,create SessionFactory class?勾选掉。

  b.搭建成功结果:

  在applicationContext.xml文件中生成dataSource的bean和sessionFactory的bean。参考代码如下

<!-- 注入数据源 -->   

<bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName"
            value="com.mysql.jdbc.Driver">
        </property>
        <property name="url" value="jdbc:mysql://localhost:3306/该项目所在数据库名"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>

<!-- 注入SessionFactory -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
            </props>
        </property>

<!-- 引入映射文件 -->

  ....(略)
    </bean>

  4.web.xml文件的配置

    springMVC的servlet的注册和映射(DispatcherServlet)。这个servlet是 springMVC的核心控制器,专门处理各个请求的,然后根据  相应的参数分发给相应的业务控制器处理,业务控制器处理完之后就会返回一字符串给核心控制 器,核心控制器再根据该字符串重定向或者  转发到相应的页面。还必须给该核心控制器建一个配置文件,其形式为:核心控制器servlet名-servlet.xml,如springMVC-servlet.xml.该  配置文件放在WEB-INF下面。

<!-- springMVC的servlet的注册和映射(DispatcherServlet) -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/classes/web-config.xml,/WEB-INF/classes/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

  5.SpringMVC的配置文件

    SpringMVC的配置文件这里为web-config.xml(和上面DispatcherServlet里的初始化文件名相同)。他的配置代码参考如下:

    a.注解方式的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
    <context:component-scan base-package="(基本包如:cn.com)"/>

    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
    
    <!-- Controller方法调用规则定义 -->
    <bean id="paraMethodResolver"
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="paramName" value="action"/>
        <property name="defaultMethodName" value="list"/>
    </bean>
 
   <!-- 页面View层基本信息设定 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

    b.配置文件的方式(每种方法必须一个Controller即两个bean):

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    

  <!-- Controller方法调用规则定义 -->
    <bean id="paraMethodResolver"
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="paramName" value="action" />
        <property name="defaultMethodName" value="list" />
    </bean>
    <!-- 页面View层基本信息设定 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <!-- <property name="prefix" value="/"></property>
             <property name="suffix" value=".jsp"/> -->
    </bean>
    <!-- servlet映射列表,所有控制层Controller的servlet在这里定义 -->
    <bean id="urlMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="user/regist.do">userRegistController</prop>
                <prop key="user/login.do">userLoginController</prop>
            </props>
        </property>
    </bean>
  
    <bean id="userRegistController" class="(包名).UserRegistController">
        <property name="userService">
            <ref bean="userService" />
        </property>
    </bean>
    
    <bean id="userLoginController" class="(包名).UserLoginController">
        <property name="userService">
            <ref bean="userService" />
        </property>
    </bean>
</beans>   

三、SpringMVC两种方法实现登录和注册的功能的映射使用区别

1.注解的方式

@Controller  //把当前JavaBean当做Controller
@RequestMapping("/user.do") //给该控制器设定访问URL
public class UserController {
    @Resource //注入
    private UserService userService;


    public void setUserService(UserService userService) {
        this.userService = userService;
    }


    @RequestMapping(params="method=regist")
    public String regist(String loginName,String passwd){
        User user = new User(loginName, passwd);
        if(userService.regist(user)){
            return "index";
        }else{
            return "regist";
        }
        
    }


    @RequestMapping(params="method=login")
    public String login(User user,HttpSession session){
        User loginUser = userService.login(user.getLoginName(), user.getPasswd());
        if(user!=null){
            session.setAttribute("user", loginUser);
            //return "success";
            return "redirect:success.jsp";
        }else{
            return "index";
        }
    }
}

2.配置文件的方式

a.UserLoginController文件

public class UserLoginController implements Controller {

    private UserService userService;
    
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String loginName = request.getParameter("loginName");
        String passwd = request.getParameter("passwd");
        User user = userService.login(loginName, passwd);
        if(user!=null){
            request.getSession().setAttribute("user", user);
            return new ModelAndView("redirect:/success.jsp");
        }else{
            return new ModelAndView("redirect:/index.jsp");
        }
    }

}

b.UserRegistController文件

public class UserRegistController implements Controller {

    private UserService userService;
    
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String loginName = request.getParameter("loginName");
        String passwd = request.getParameter("passwd");
        User user = new User(loginName, passwd);
        if(userService.regist(user)){
            // return new ModelAndView("index");
            //return new ModelAndView("/index.jsp");//转发
            /*
             * 有前缀和后缀
             *  url:prefix+index+suffix  == /index.jsp
             *  
             *  没有前缀和后缀
             *  ModelAndView("URL");
             */
            return new ModelAndView("redirect:/index.jsp");//重定向--一般不会使用前缀和后缀
        }else{
            return new ModelAndView("redirect:/regist.jsp");
        }
    }

}

四、其他文件的内容及配置

  其他都是按MVC框架进行的设计。参考代码,这里不再赘述。参考的工程项目源码见分享链接:http://pan.baidu.com/s/1qW9REPm。

 

posted @ 2015-07-31 16:33  LiuZhenYou  阅读(232)  评论(2编辑  收藏  举报