码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC用法 以及一个简单的基于springMVC hibernate spring的配置

时间:2015-04-16 19:16:46      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

替代struts

1  web.xml中配置springmvc中央控制器

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springmvc</display-name>
  
  <!-- SpringMVC中央控制器 -->
   <!--  Spring MVC 的Servlet,它将加载WEB-INF/mvc-servlet.xml 的  
    配置文件,以启动Spring MVC模块-->  
  <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 代表在容器启动时就初始化,不写的时候代表在第一次请求的时候完成初始化,
        数字越小初始化越靠前-->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
    <!-- 在spring中要写/而不是/* -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  
  
  
  <!-- Spring 容器启动监听器  -->
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--spring服务层配置文件都放在以applicationContext开头的xml文件中,比如数据源 事务等-->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext*.xml</param-value>
  </context-param>
  

  
</web-app>

 

2

web.xml 中定义了一个名为 mvc 的 Spring MVC 模块,按照 Spring MVC 的契约,需要在
WEB-INF/mvc-servlet.xml 配置文件中定义 Spring MVC 模块的具体配置。mvc-servlet.xml
的配置内容如下所示:
在WEB-INF建立xxx-servlet.xml 其中xxx代表 web.xml中的<servlet-name>mvc</servlet-name>
名字一致,所以我们在这里建立mvc-servlet.xml

<?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:context="http://www.springframework.org/schema/context"
       <!-- 有一个用途是可以返回一个对象 ,其他的暂时不知道-->
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 组件扫描 扫描springmvc的controller部分 -->
<!--对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能-->
    <context:component-scan base-package="com.kaishengit.controller"/>
    <!-- 使用上面导入的schema/mvc  启用注解-->
    <mvc:annotation-driven/>
    
    <!-- 静态资源  **该目录及其子目录
  <img src="/static/image/kaola.jpg" width="300">
--> <mvc:resources location="/static/" mapping="/static/**"/> <!-- 单纯的跳转,比如跳转到静态网页等 比如请求根的时候到index.jsp --> <mvc:view-controller path="/" view-name="index"/> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <!-- 让它支持jstl --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/views/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> <!-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 解析request的编码 ,Default is ISO-8859-1 --> <property name="defaultEncoding" value="UTF-8" /> <!-- 设置最大允许的大小(字节)。-1表示没有限制(默认) 1024*1024*10=10MB --> <property name="maxUploadSize" value="1048576000" /> <!--被允许的最大的内存的大小,Default is 10240 bytes --> <property name="maxInMemorySize" value="20480" /> <!-- 一个类似懒加载的属性.可以定义该属性.让解析文件的时候再抛异常,然后Controller中定义异常处理的方法 --> <property name="resolveLazily" value="true" /> </bean> </beans>

 

3 写controller组件

 

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

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

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.kaishengit.entity.User;
/*我们可以看出 HelloController 和一般的类并没有区别,
它没有实现任何特殊的接口,因而是一个地道的 POJO。让这个 POJO特殊就是 Spring MVC 的注解!*/
/*@Controller、@Service 以及 @Repository 和 @Component 注解的作用是等价的:
 * 将一个类成为 Spring 容器的 Bean。由于 Spring MVC 的 Controller 必须事先是一个 Bean,
 * 所以 @Controller 注解是不可缺少的。 */
@Controller
/* 类似与namespace */
@RequestMapping("/book")
public class HelloController {
/* 与struts不一样的是返回值可以有也可以没有void
    struts请求方式是加@action注解,springmvc是加@RequestMapping(value="/upload",method=RequestMethod.POST)
    当只写@RequestMapping(method=RequestMethod.POST)的时候默认请求/book(也就是namespace)路径
    代表请求的路径是/book/upload,以post的方法提交
        return "hello";跟前面配置的视图解析器拼凑成一个路径:就代表前往WEB-INF/views/hello.jsp页面
        return "book/hello"跟前面配置的视图解析器拼凑成一个路径:就代表前往WEB-INF/views/book/hello.jsp页面*/
    
    
    

---------------------------------------------------    
    
    // 两个相同的请求路径/book/add 但是请求方式不一样,这个get在这里代表我要去添加页 
    @RequestMapping(value="/add",method=RequestMethod.GET)
    // 想使用的东西都可以从参数中传进来 
    public ModelAndView add(HttpSession session,HttpServletRequest request,HttpServletResponse response) {
        // 页面传参方式1(使用的是request)    返回值是ModelAndView    
        ModelAndView mav = new ModelAndView();
        mav.addObject("name", "Rose");
        // 去哪里 
        mav.setViewName("book/add");
        // 放进session中 
        session.setAttribute("name", "sessionName");
        // 放入application中,先用session获取application
        ServletContext application = session.getServletContext();
        application.setAttribute("name", "appName");
        
        System.out.println("add");
        return mav;
    }
        
    /* 两个相同的请求路径/book/add 但是请求方式不一样,这个get在这里代表我要去添加页 
    @RequestMapping(value="/add",method=RequestMethod.GET)
    public String add(Model model) {
        //页面传参方式2(使用的是request),返回值是String
        model.addAttribute("name","jeck");
        
        return "/book/add";
    }*/
    
    
    // 接受表单的值只需要传入表单的name属性值,username要与表单中要传进来的name属性值一致 
    @RequestMapping(value="/add",method=RequestMethod.POST)
    public String save(String username) {
        System.out.println(username);
        return "redirect:/book/add";
    }
    
    // 或者当表单非常多的时候,用对象的形式
    
    
    
    
    // 两个相同的请求路径/book/add 但是请求方式不一样,这个post在这里代表我要去提交表单
    @RequestMapping(value="/add",method=RequestMethod.POST)
    /* 表单形式不用变,不用写成name="user.username"仍然用原来的name="username"
        springmvc会自动尝试能不能加入到user对象中,不能加进去的仍然是原来的方式接受比如String email
        RedirectAttributes指操作成功后给一个提示,然后刷新后提示消失*/
        
    public String save(User user,String zip,RedirectAttributes redirectAttributes) {
        System.out.println("Hello,"+user.getUsername() + " : " + user.getPassword() + " : " + zip);
        
        redirectAttributes.addFlashAttribute("message", "保存成功");
        // 表示重定向到/book/add 重定向是get请求
        return "redirect:/book/add";
    }
    
    

    
    
    
--------------------------------------------------------------------    

    
    
    
    /* 比如ajax返回一个字符串,直接return "xxx" 
        但是返回值是String的时候,springmvc会认为返回的是路径的名字--
        所以加@ResponseBody表示这是一个相应的内容*/
    @RequestMapping("/message")
    public @ResponseBody String showMessage() {
        return "I love you";
    }
    // 如果返回的是user(实体类),会自动转换成json 需要导入jackson-all-1.8.10.jar
    @RequestMapping(value="/user",method=RequestMethod.GET,produces={"application/json;charset=UTF-8"})
    // 也可以加在方法之上 
    @ResponseBody
    public User showUser() {
        User user = new User();
        user.setUsername("张三丰");
        user.setPassword("123123");
        return user;
    }
    
    
    
-------------------------------------------------------    
    
    
    
    
    /* url传参 */
    @RequestMapping("/show/{id1}")
    /* 传三个参数,以逗号隔开在url中就是用逗号分隔,用斜杠隔开,在url中就是用斜杠分隔
    @RequestMapping("/show/{id1},{id2},{id3}") */
    /* 加正则表达式
    @RequestMapping("/show/{id1:\\d+},{id2:\\d+},{id3:\\d+}") */
    /* 接受url中传来的参数,但是我们不知道这个传来的参数是从url中获得的,还是从表单中获得的,
        所以加@PathVariable,代表是从url中获取 参数中的id分别对应上面传来的id,名字要一致*/
    public String show(@PathVariable int id1,@PathVariable int id2,@PathVariable int id3) {
        System.out.println("ID:" + id1);
        System.out.println("ID:" + id2);
        System.out.println("ID:" + id3);
        return "book/add";
    }
    /* 如果还想用原始的?xx=xx传参看下面,有的时候还真需要原始的?传参 */
----------------------------------------------------------------    
    @RequestMapping("/page")
    public String page(int p) {
        System.out.println("pageNo:" + p);
        return "book/add";
    }
        
    @RequestMapping("/page")
    /* 如果参数可有可无@RequestParam,默认是1 */
    public String page(@RequestParam(value="p",required=false,defaultValue="1")int p) {
        System.out.println("pageNo:" + p);
        return "book/add";
    }
    
-------------------------------------------------------------    
    /* 文件上传 commons-fileupload-1.2.2.jar commons-io-2.4.jar
        需要在xxx-servlet.xml配置文件上传解析器*/
    
    
<form action="/book/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="pic">
    <input type="text" name="username">
    <button>保存</button>
</form>
    
    
    @RequestMapping(value="/upload",method=RequestMethod.POST)
    /* MultipartFile接受文件对象 */
    public String upload(String username,MultipartFile pic) {
        
        if(!pic.isEmpty()) {
            /*<!-- System.out.println("fileName:" + pic.getName());获取的是表单中name的属性pic -->*/
            System.out.println("fileName:" + pic.getOriginalFilename());
            System.out.println("fileSize:" + FileUtils.byteCountToDisplaySize(pic.getSize()));
            System.out.println("Content-type:" + pic.getContentType());
            System.out.println("username:" + username);
        /*     方法1: 获得输入流了,接下来你懂的 
            InputStream inputStream = pic.getInputStream();
            */
            try {
            /* 方法2: */
                pic.transferTo(new File("C:/kaola.jpg"));
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } else {
            System.out.println("file is empty");
        }
        
        
        return "redirect:/book/add";
    }
    
    
    
    
}

 

 

 

好了,下面介绍一个spring  springMVC hibernate的 框架搭建

--------------------------------------------------------------------
--------------------------------------------------------------------
--------------------------基于springMVC,hibernate,spring------------
--------------------------------------------------------------------
--------------------------------------------------------------------

首先是web.xml

<!-- web.xml-- -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springmvc</display-name>
  
  <!-- 字符集过滤器 -->
  <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>
  
  <!-- OpenSessionInView -->
  <filter>
      <filter-name>openSessionInView</filter-name>
      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>openSessionInView</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <!-- SpringMVC中央控制器 -->
  <!--  Spring MVC 的Servlet,它将加载WEB-INF/mvc-servlet.xml 的  
    配置文件,以启动Spring MVC模块-->  
  <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!--spring服务层配置文件都放在以applicationContext开头的xml文件中,比如数据源 事务等-->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext*.xml</param-value>
  </context-param>
  
   <!--  Spring 容器启动监听器 -->  
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  
  
</web-app>

 

web.xml 中定义了一个名为 annomvc 的 Spring MVC 模块,按照 Spring MVC 的契约,需要在
WEB-INF/annomvc-servlet.xml 配置文件中定义 Spring MVC 模块的具体配置。mvc-servlet.xml
的配置内容如下所示:
在WEB-INF建立xxx-servlet.xml 其中xxx代表 web.xml中的<servlet-name>mvc</servlet-name>
名字一致,所以我们在这里建立mvc-servlet.xml

 

<?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:context="http://www.springframework.org/schema/context"
       <!-- 有一个用途是可以返回一个对象 ,其他的暂时不知道-->
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 组件扫描 扫描springmvc的controller部分 -->
<!--对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能-->
    <context:component-scan base-package="com.kaishengit.controller"/>
    <!-- 使用上面导入的schema/mvc  启用注解-->
    <mvc:annotation-driven/>
    
    <!-- 静态资源  **该目录及其子目录-->
    <mvc:resources location="/static/" mapping="/static/**"/>
    
    
    <!-- 单纯的跳转,比如跳转到静态网页等 比如请求根的时候到index.jsp -->
    <mvc:view-controller path="/" view-name="index"/>

    <!-- 视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <!-- 让它支持jstl -->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/views/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 解析request的编码 ,Default is ISO-8859-1 -->
        <property name="defaultEncoding" value="UTF-8" />
        <!-- 设置最大允许的大小(字节)。-1表示没有限制(默认) 1024*1024*10=10MB -->
        <property name="maxUploadSize" value="1048576000" />
        <!--被允许的最大的内存的大小,Default is 10240 bytes -->
        <property name="maxInMemorySize" value="20480" />
        <!-- 一个类似懒加载的属性.可以定义该属性.让解析文件的时候再抛异常,然后Controller中定义异常处理的方法 -->
        <property name="resolveLazily" value="true" />
    </bean>

</beans>

 

spring
 根目录配置applicationContext.xml 

 

<?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: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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
>

<!-- Controller在之前的配置springmvc的时候已经扫描过了.扫描的时候记得把去除掉 -->
    <context:component-scan base-package="com.kaishengit">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>


    <!-- 配置数据源 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="username" value="${jdbc.name}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="minIdle" value="5"/>
        <property name="maxActive" value="10"/>
        <property name="maxWait" value="5000"/>
    </bean>

    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.kaishengit.pojo"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
            </props>
        </property>
    </bean>

    <!-- Hibernate事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager"/>
    




</beans>

ehcache.xml 

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    
    <diskStore path="java.io.tmpdir"/>
    
    <defaultCache
        maxElementsInMemory="1000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
    />
    
    <!-- 
    <cache name="com.kaishengit.pojo.User"
        maxElementsInMemory="100"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
    />
     -->
  </ehcache>

 

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///book?useUnicode=yes&characterEncoding=UTF-8
jdbc.name=root
jdbc.password=root

 

springMVC用法 以及一个简单的基于springMVC hibernate spring的配置

标签:

原文地址:http://www.cnblogs.com/itliucheng/p/4432585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!