zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    常用的android弹出对话框
    AutoCompleteTextView与TextWatcher的结合
    As of ADT 14, resource fields cannot be used as switch cases
    Linux中tshark(wireshark)抓包工具使用方法详解
    php模板引擎
    php中实现精确设置session过期时间的方法
    什么情况下会调用到session_destroy()
    PHPSession-完全PHP5之session篇
    彻底理解PHP的SESSION机制
    闪迪U3利用工具U3-Pwn
  • 原文地址:https://www.cnblogs.com/liuzhenyou/p/4692517.html
Copyright © 2011-2022 走看看