标签:
SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Struts2和SpringMVC的一些异同,通过梳理和旧知识的联系,让学习的成本变低,花很短的时间就可以了解一门貌似新的技术,其实本质没变。
原文http://langgufu.iteye.com/blog/2088355
下面开始实例,这个实例的需求是对用户信息进行增删改查。首先创建一个web项目test_ssh,目录结构及需要的Jar包如下图:
创建一个User实体类,放在Entity包下,采用注解的方式:
- package com.tgb.entity;  
 
-   
 
- import javax.persistence.Column;  
 
- import javax.persistence.Entity;  
 
- import javax.persistence.GeneratedValue;  
 
- import javax.persistence.Id;  
 
- import javax.persistence.Table;  
 
-   
 
- import org.hibernate.annotations.GenericGenerator;  
 
-   
 
- @Entity  
 
- @Table(name="T_USER")  
 
- public class User {  
 
-   
 
-     @Id  
 
-     @GeneratedValue(generator="system-uuid")  
 
-     @GenericGenerator(name = "system-uuid",strategy="uuid")  
 
-     @Column(length=32)  
 
-     private String id;  
 
-       
 
-     @Column(length=32)  
 
-     private String userName;  
 
-       
 
-     @Column(length=32)  
 
-     private String age;  
 
-   
 
-     public String getId() {  
 
-         return id;  
 
-     }  
 
-   
 
-     public void setId(String id) {  
 
-         this.id = id;  
 
-     }  
 
-   
 
-     public String getUserName() {  
 
-         return userName;  
 
-     }  
 
-   
 
-     public void setUserName(String userName) {  
 
-         this.userName = userName;  
 
-     }  
 
-   
 
-     public String getAge() {  
 
-         return age;  
 
-     }  
 
-   
 
-     public void setAge(String age) {  
 
-         this.age = age;  
 
-     }  
 
-       
 
- }  
 
 
 
 
本篇关于SpringMVC基本都会采用注解的方式,首先配置好数据源以及事务spring-common.xml,放在config.spring包下:
- <?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">  
 
-       
 
-     
 
-     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >  
 
-         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
 
-         <property name="url" value="jdbc:mysql://localhost/test_ssh"></property>  
 
-         <property name="username" value="root"></property>  
 
-         <property name="password" value="1"></property>  
 
-     </bean>  
 
-       
 
-     
 
-     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
 
-         <property name="dataSource" ref="dataSource" />  
 
-         <property name="hibernateProperties">  
 
-             <props>  
 
-                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
 
-                 <prop key="hibernate.hbm2ddl.auto">update</prop>  
 
-                 <prop key="hibernate.show_sql">true</prop>  
 
-                 <prop key="hibernate.format_sql">true</prop>  
 
-             </props>  
 
-         </property>  
 
-         <property name="annotatedClasses">  
 
-             <list>  
 
-                 <value>com.tgb.entity.User</value>  
 
-             </list>  
 
-         </property>  
 
-     </bean>  
 
-       
 
-     
 
-     <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
 
-         <property name="sessionFactory" ref="sessionFactory"/>  
 
-     </bean>  
 
-       
 
-     
 
-     <bean id="transactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">    
 
-         <property name="transactionManager" ref="transactionManager"></property>    
 
-         <property name="transactionAttributes">    
 
-             <props>    
 
-                 <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>    
 
-                 <prop key="modify*">PROPAGATION_REQUIRED,-myException</prop>    
 
-                 <prop key="del*">PROPAGATION_REQUIRED</prop>    
 
-                 <prop key="*">PROPAGATION_REQUIRED</prop>    
 
-             </props>    
 
-         </property>    
 
-     </bean>   
 
- </beans>  
 
 
 
 
然后配置关于SpringMVC的内容,下面配置中都有注释说明,就不再赘述,spring-mvc.xml放在config.spring包下:
- <?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-3.2.xsd  
 
-     http://www.springframework.org/schema/mvc  
 
-     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">  
 
-       
 
-     
 
-     <context:component-scan base-package="com.tgb" />  
 
-   
 
-     
 
-     <mvc:annotation-driven />  
 
-       
 
-     
 
-     <mvc:resources location="/js/" mapping="/js/**"/>  
 
-   
 
-     
 
-     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
 
-         <property name="prefix" value="/"></property>  
 
-         <property name="suffix" value=".jsp"></property>  
 
-     </bean>  
 
- </beans>  
 
 
 
 
完成这些共用的配置之后,来配置web项目起点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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>json_test</display-name>  
 
-   <welcome-file-list>  
 
-     <welcome-file>login.jsp</welcome-file>  
 
-   </welcome-file-list>  
 
-     
 
-   
 
-   <context-param>  
 
-     <param-name>contextConfigLocation</param-name>  
 
-     <param-value>classpath*:config/spring/spring-*.xml</param-value>  
 
-   </context-param>  
 
-     
 
-   
 
-   <listener>  
 
-     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
 
-   </listener>  
 
-     
 
-   
 
-   <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*:config/spring/spring-mvc.xml</param-value>  
 
-     </init-param>  
 
-     <load-on-startup>1</load-on-startup>  
 
-   </servlet>  
 
-   <servlet-mapping>  
 
-     <servlet-name>springMVC</servlet-name>  
 
-     <url-pattern>/</url-pattern>  
 
-   </servlet-mapping>  
 
-     
 
-   
 
-   <filter>  
 
-     <filter-name>encodingFilter</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>  
 
-     <init-param>  
 
-         <param-name>forceEncoding</param-name>  
 
-         <param-value>true</param-value>  
 
-     </init-param>  
 
-   </filter>  
 
-   <filter-mapping>  
 
-     <filter-name>encodingFilter</filter-name>  
 
-     <url-pattern>/*</url-pattern>  
 
-   </filter-mapping>  
 
-     
 
-   
 
-   <filter>  
 
-     <filter-name>openSession</filter-name>  
 
-     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
 
-   </filter>  
 
-   <filter-mapping>  
 
-     <filter-name>openSession</filter-name>  
 
-     <url-pattern>/*</url-pattern>  
 
-   </filter-mapping>  
 
- </web-app>  
 
 
 
 
读者需自行下载jquery包,放到webContent文件夹下的js包下。然后创建几个测试页面,分别如下:
Login.jsp,项目的入口界面。
- <h5><a href="/test_ssh/user/getAllUser">进入用户管理页</a></h5>  
 
 
Index.jsp,用户管理的主界面
- <%@ page language="java" contentType="text/html; charset=UTF-8"  
 
-     pageEncoding="UTF-8"%>  
 
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
 
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
 
- <html>  
 
- <head>  
 
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>  
 
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
 
- <title>Insert title here</title>  
 
- <script type="text/javascript">  
 
-     function del(id){  
 
-         $.get("/test_ssh/user/delUser?id=" + id,function(data){  
 
-             if("success" == data.result){  
 
-                 alert("删除成功");  
 
-                 window.location.reload();  
 
-             }else{  
 
-                 alert("删除失败");  
 
-             }  
 
-         });  
 
-     }  
 
- </script>  
 
- </head>  
 
- <body>  
 
-     <h6><a href="/test_ssh/user/toAddUser">添加用户</a></h6>  
 
-     <table border="1">  
 
-         <tbody>  
 
-             <tr>  
 
-                 <th>姓名</th>  
 
-                 <th>年龄</th>  
 
-                 <th>操作</th>  
 
-             </tr>  
 
-             <c:if test="${!empty userList }">  
 
-                 <c:forEach items="${userList }" var="user">  
 
-                     <tr>  
 
-                         <td>${user.userName }</td>  
 
-                         <td>${user.age }</td>  
 
-                         <td>  
 
-                             <a href="/test_ssh/user/getUser?id=${user.id }">编辑</a>  
 
-                             <a href="javascript:del(‘${user.id }‘)">删除</a>  
 
-                         </td>  
 
-                     </tr>               
 
-                 </c:forEach>  
 
-             </c:if>  
 
-         </tbody>  
 
-     </table>  
 
- </body>  
 
- </html>  
 
 
 
 
addUser.jsp,添加用户界面
 
- <%@ page language="java" contentType="text/html; charset=UTF-8"  
 
-     pageEncoding="UTF-8"%>  
 
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
 
- <html>  
 
- <head>  
 
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
 
- <title>Insert title here</title>  
 
- <script type="text/javascript">  
 
-     function addUser(){  
 
-         var form = document.forms[0];  
 
-         form.action = "/test_ssh/user/addUser";  
 
-         form.method="post";  
 
-         form.submit();  
 
-     }  
 
- </script>  
 
- </head>  
 
- <body>  
 
-     <h1>添加用户</h1>  
 
-     <form action="" name="userForm">  
 
-         姓名:<input type="text" name="userName">  
 
-         年龄:<input type="text" name="age">  
 
-         <input type="button" value="添加" onclick="addUser()">  
 
-     </form>  
 
- </body>  
 
- </html>  
 
 
 
editUser.jsp,修改用户信息界面。
- <%@ page language="java" contentType="text/html; charset=UTF-8"  
 
-     pageEncoding="UTF-8"%>  
 
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
 
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
 
- <html>  
 
- <head>  
 
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>  
 
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
 
- <title>Insert title here</title>  
 
- </head>  
 
- <body>  
 
-     <h1>编辑用户</h1>  
 
-     <form action="/test_ssh/user/updateUser" name="userForm" method="post">  
 
-         <input type="hidden" name="id" value="${user.id }">  
 
-         姓名:<input type="text" name="userName" value="${user.userName }">  
 
-         年龄:<input type="text" name="age" value="${user.age }">  
 
-         <input type="submit" value="编辑" >  
 
-     </form>  
 
- </body>  
 
- </html>  
 
 
 
 
还有success.jsp和error.jsp页面,无代码,就不再展示。
框架越来越多,越来越好用,但随之而来的繁杂的、各成体系的配置怎么办?项目大了感觉注解靠谱些。
 
这篇接着上篇,把没贴完的代码写完,上篇主要完成了一些公共配置和界面的东西,这篇把后台的代码完成。
首先是web包下属于的control层的类UserController,这相当于Struts中的Action,是重要的类:
- package com.tgb.web;  
 
-   
 
- import java.io.IOException;  
 
- import java.io.PrintWriter;  
 
-   
 
- import javax.annotation.Resource;  
 
- import javax.servlet.http.HttpServletRequest;  
 
- import javax.servlet.http.HttpServletResponse;  
 
-   
 
- import org.springframework.stereotype.Controller;  
 
- import org.springframework.web.bind.annotation.RequestMapping;  
 
-   
 
- import com.tgb.entity.User;  
 
- import com.tgb.manager.UserManager;  
 
-   
 
- @Controller  
 
- @RequestMapping("/user")  
 
- public class UserController {  
 
-   
 
-     @Resource(name="userManager")  
 
-     private UserManager userManager;  
 
-   
 
-     @RequestMapping("/getAllUser")  
 
-     public String getAllUser(HttpServletRequest request){  
 
-           
 
-         request.setAttribute("userList", userManager.getAllUser());  
 
-           
 
-         return "/index";  
 
-     }  
 
-       
 
-     @RequestMapping("/getUser")  
 
-     public String getUser(String id,HttpServletRequest request){  
 
-           
 
-         request.setAttribute("user", userManager.getUser(id));  
 
-       
 
-         return "/editUser";  
 
-     }  
 
-       
 
-     @RequestMapping("/toAddUser")  
 
-     public String toAddUser(){  
 
-         return "/addUser";  
 
-     }  
 
-       
 
-     @RequestMapping("/addUser")  
 
-     public String addUser(User user,HttpServletRequest request){  
 
-           
 
-         userManager.addUser(user);  
 
-           
 
-         return "redirect:/user/getAllUser";  
 
-     }  
 
-       
 
-     @RequestMapping("/delUser")  
 
-     public void delUser(String id,HttpServletResponse response){  
 
-           
 
-         String result = "{\"result\":\"error\"}";  
 
-           
 
-         if(userManager.delUser(id)){  
 
-             result = "{\"result\":\"success\"}";  
 
-         }  
 
-           
 
-         response.setContentType("application/json");  
 
-           
 
-         try {  
 
-             PrintWriter out = response.getWriter();  
 
-             out.write(result);  
 
-         } catch (IOException e) {  
 
-             e.printStackTrace();  
 
-         }  
 
-     }  
 
-       
 
-     @RequestMapping("/updateUser")  
 
-     public String updateUser(User user,HttpServletRequest request){  
 
-           
 
-         if(userManager.updateUser(user)){  
 
-             user = userManager.getUser(user.getId());  
 
-             request.setAttribute("user", user);  
 
-             return "redirect:/user/getAllUser";  
 
-         }else{  
 
-             return "/error";  
 
-         }  
 
-     }  
 
- }  
 
 
 
然后是属于manager包下的业务逻辑类,接口UserManager:
- package com.tgb.manager;  
 
-   
 
- import java.util.List;  
 
-   
 
- import com.tgb.entity.User;  
 
-   
 
- public interface UserManager {  
 
-   
 
-     public User getUser(String id);  
 
-       
 
-     public List<User> getAllUser();  
 
-       
 
-     public void addUser(User user);  
 
-       
 
-     public boolean delUser(String id);  
 
-       
 
-     public boolean updateUser(User user);  
 
- }  
 
 
 
 
实现类UserManagerImpl:
- package com.tgb.manager;  
 
-   
 
- import java.util.List;  
 
-   
 
- import com.tgb.dao.UserDao;  
 
- import com.tgb.entity.User;  
 
-   
 
- public class UserManagerImpl implements UserManager {  
 
-   
 
-     private UserDao userDao;  
 
-       
 
-     public void setUserDao(UserDao userDao) {  
 
-         this.userDao = userDao;  
 
-     }  
 
-   
 
-     @Override  
 
-     public User getUser(String id) {  
 
-         return userDao.getUser(id);  
 
-     }  
 
-   
 
-     @Override  
 
-     public List<User> getAllUser() {  
 
-         return userDao.getAllUser();  
 
-     }  
 
-   
 
-     @Override  
 
-     public void addUser(User user) {  
 
-         userDao.addUser(user);  
 
-     }  
 
-   
 
-     @Override  
 
-     public boolean delUser(String id) {  
 
-           
 
-         return userDao.delUser(id);  
 
-     }  
 
-   
 
-     @Override  
 
-     public boolean updateUser(User user) {  
 
-         return userDao.updateUser(user);  
 
-     }  
 
-   
 
- }  
 
 
 
 
最后是属于dao包底下的DAO层,主要由Hibernate完成。接口UserDao:
- package com.tgb.dao;  
 
-   
 
- import java.util.List;  
 
-   
 
- import com.tgb.entity.User;  
 
-   
 
- public interface UserDao {  
 
-   
 
-     public User getUser(String id);  
 
-       
 
-     public List<User> getAllUser();  
 
-       
 
-     public void addUser(User user);  
 
-       
 
-     public boolean delUser(String id);  
 
-       
 
-     public boolean updateUser(User user);  
 
- }  
 
 
 
 
实现类UserDaoImpl:
- package com.tgb.dao;  
 
-   
 
- import java.util.List;  
 
-   
 
- import org.hibernate.Query;  
 
- import org.hibernate.SessionFactory;  
 
-   
 
- import com.tgb.entity.User;  
 
-   
 
- public class UserDaoImpl implements UserDao {  
 
-   
 
-     private SessionFactory sessionFactory;  
 
-   
 
-     public void setSessionFactory(SessionFactory sessionFactory) {  
 
-         this.sessionFactory = sessionFactory;  
 
-     }  
 
-       
 
-     @Override  
 
-     public User getUser(String id) {  
 
-           
 
-         String hql = "from User u where u.id=?";  
 
-         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
 
-         query.setString(0, id);  
 
-           
 
-         return (User)query.uniqueResult();  
 
-     }  
 
-   
 
-     @Override  
 
-     public List<User> getAllUser() {  
 
-           
 
-         String hql = "from User";  
 
-         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
 
-           
 
-         return query.list();  
 
-     }  
 
-   
 
-     @Override  
 
-     public void addUser(User user) {  
 
-         sessionFactory.getCurrentSession().save(user);  
 
-     }  
 
-   
 
-     @Override  
 
-     public boolean delUser(String id) {  
 
-           
 
-         String hql = "delete User u where u.id = ?";  
 
-         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
 
-         query.setString(0, id);  
 
-           
 
-         return (query.executeUpdate() > 0);  
 
-     }  
 
-   
 
-     @Override  
 
-     public boolean updateUser(User user) {  
 
-           
 
-         String hql = "update User u set u.userName = ?,u.age=? where u.id = ?";  
 
-         Query query = sessionFactory.getCurrentSession().createQuery(hql);  
 
-         query.setString(0, user.getUserName());  
 
-         query.setString(1, user.getAge());  
 
-         query.setString(2, user.getId());  
 
-           
 
-         return (query.executeUpdate() > 0);  
 
-     }  
 
-   
 
- }  
 
 
 
 
最后外加一个配置spring-beans.xml,放在config.spring包下,负责为各层依赖注入需要的对象:
- <?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">  
 
-       
 
-     <bean id="userDao" class="com.tgb.dao.UserDaoImpl">  
 
-         <property name="sessionFactory" ref="sessionFactory"></property>  
 
-     </bean>  
 
-   
 
-     <bean id="userManagerBase" class="com.tgb.manager.UserManagerImpl">  
 
-         <property name="userDao" ref="userDao"></property>  
 
-     </bean>  
 
-       
 
-     
 
-     <bean name="userManager" parent="transactionProxy">  
 
-         <property name="target" ref="userManagerBase"></property>  
 
-     </bean>     
 
- </beans>  
 
 
 
 
到此为止,所有的配置和代码完成,部署—运行,运行结果如下图:
 
Spring+SpringMVC+Hibernate简单整合(转)
标签:
原文地址:http://www.cnblogs.com/yaohong/p/5906559.html