千里马

天马行空

Spring MVC 示例讲解(使用注解)

   Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

     具体原理概念之类的知识网上都可以找到,学习和实践任何一个东西,示例很重要(不过了解概念也是很重要的),所以我这里用一个例子和大家一起探讨下Spring MVC 的搭建:

     第一步:建一个SpringMVC工程:

     第二步:导入相应的jar文件,spring+hibernate+mysql相关的jar包。

     第三步:配置相应的配置文件:web.xml applicationContext.xml,hibernate.prooerties等

<?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>SpringMVC</display-name>
  <!– Spring 配置文件路径配置 –>
   <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>  

 <servlet>  
     <servlet-name>spring</servlet-name>  
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
     <load-on-startup>1</load-on-startup>  
 </servlet>  
 <servlet-mapping>  
     <servlet-name>spring</servlet-name>  <!– 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来配置它的controller –>
     <url-pattern>*.do</url-pattern>  
 </servlet-mapping>  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

hibernate.properties数据库连接配置:

dataSource.password=123
dataSource.username=root
dataSource.databaseName=test
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.dialect=org.hibernate.dialect.MySQL5Dialect
dataSource.serverName=localhost:3306
dataSource.url=jdbc:mysql://localhost:3306/test
dataSource.properties=user=${dataSource.username};databaseName=${dataSource.databaseName};serverName=${dataSource.serverName};password=${dataSource.password}
dataSource.hbm2ddl.auto=update

  创建数据表:

CREATE TABLE  `test`.`student` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `psw` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
)

建好表后,生成实体类

package com.mvc.entity;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "student")
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Integer id;
    @Column(name = "name")
    private String user;
    @Column(name = "psw")
    private String psw;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPsw() {
        return psw;
    }
    public void setPsw(String psw) {
        this.psw = psw;
    }
}

 Dao层实现:

 接口:

 package com.mvc.dao;

import java.util.List;

public interface EntityDao {
    public List<Object> createQuery(final String queryString);
    public Object save(final Object model);
    public void update(final Object model);
    public void delete(final Object model);
}

接口实现:

package com.mvc.dao;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class EntityDaoImpl extends HibernateDaoSupport implements EntityDao{
    public List<Object> createQuery(final String queryString) {
        return (List<Object>) getHibernateTemplate().execute(
                new HibernateCallback<Object>() {
                    public Object doInHibernate(org.hibernate.Session session)
                            throws org.hibernate.HibernateException {
                        Query query = session.createQuery(queryString);
                        List<Object> rows = query.list();
                        return rows;
                    }
                });
    }
    public Object save(final Object model) {
        return  getHibernateTemplate().execute(
                new HibernateCallback<Object>() {
                    public Object doInHibernate(org.hibernate.Session session)
                            throws org.hibernate.HibernateException {
                        session.save(model);
                        return null;
                    }
                });
    }
    public void update(final Object model) {
        getHibernateTemplate().execute(new HibernateCallback<Object>() {
            public Object doInHibernate(org.hibernate.Session session)
                    throws org.hibernate.HibernateException {
                session.update(model);
                return null;
            }
        });
    }
    public void delete(final Object model) {
        getHibernateTemplate().execute(new HibernateCallback<Object>() {
            public Object doInHibernate(org.hibernate.Session session)
                    throws org.hibernate.HibernateException {
                session.delete(model);
                return null;
            }
        });
    }
}

service类实现:

package com.mvc.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mvc.dao.EntityDao;
import com.mvc.entity.Student;

@Service
public class StudentService {
 @Autowired
 private EntityDao entityDao;
 
 @Transactional
 public List<Object> getStudentList(){
  StringBuffer sff = new StringBuffer();
  sff.append("select a from ").append(Student.class.getSimpleName()).append(" a ");
  List<Object> list = entityDao.createQuery(sff.toString());
  return list;
 }
 
 public void save(Student st){
  entityDao.save(st);
 }
 public void delete(Object obj){
  entityDao.delete(obj);
 }
}

controller类实现,只需把注解写上,spring就会自动帮你找到相应的bean,相应的注解标记意义,不明白的,可以自己查下@Service,@Controller,@Entity等等的内容。

 

package com.mvc.controller;

import java.util.List;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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.servlet.ModelAndView;

import com.mvc.entity.Student;
import com.mvc.service.StudentService;

@Controller
@RequestMapping("/student.do")
public class StudentController {
    protected final transient Log log = LogFactory
    .getLog(StudentController.class);
    @Autowired
    private StudentService studentService;
    public StudentController(){
        
    }
    
    @RequestMapping
    public String load(ModelMap modelMap){
        List<Object> list = studentService.getStudentList();
        modelMap.put("list", list);
        return "student";
    }
    
    @RequestMapping(params = "method=add")
    public String add(HttpServletRequest request, ModelMap modelMap) throws Exception{
        return "student_add";
    }
    
    @RequestMapping(params = "method=save")
    public String save(HttpServletRequest request, ModelMap modelMap){
        String user = request.getParameter("user");
        String psw = request.getParameter("psw");
        Student st = new Student();
        st.setUser(user);
        st.setPsw(psw);
        try{
            studentService.save(st);
            modelMap.put("addstate", "添加成功");
        }
        catch(Exception e){
            log.error(e.getMessage());
            modelMap.put("addstate", "添加失败");
        }
        
        return "student_add";
    }
    
    @RequestMapping(params = "method=del")
    public void del(@RequestParam("id") String id, HttpServletResponse response){
        try{
            Student st = new Student();
            st.setId(Integer.valueOf(id));
            studentService.delete(st);
            response.getWriter().print("{\"del\":\"true\"}");
        }
        catch(Exception e){
            log.error(e.getMessage());
            e.printStackTrace();
        }
    }
}

view层实现:

head.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="com.mvc.entity.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

student_add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>
<%@ include file="/include/head.jsp"%>
<!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>学生添加</title>
<mce:script type="text/javascript"><!–
function turnback(){
    window.location.href="<%=request.getContextPath() %>/student.do";
}
// –></mce:script>
</head>
<body>
<form method="post" action="<%=request.getContextPath() %>/student.do?method=save">
<div><c:out value="${addstate}"></c:out></div>
<table>
    <tr><td>姓名</td><td><input id="user" name="user" type="text" /></td></tr>
    <tr><td>密码</td><td><input id="psw" name="psw"  type="text" /></td></tr>
    <tr><td colSpan="2" align="center"><input type="submit" value="提交"/><input type="button" onclick="turnback()" value="返回" /> </td></tr>
</table>

</form>
</body>
</html>

student.jsp代码

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/include/head.jsp"%>
<!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>添加</title>
<script language="javascript" src="<%=request.getContextPath()%>/script/jquery.min.js"></script>
<style>
table{  border-collapse:collapse;  }
td{  border:1px solid #f00;  }
</style>
<script type="text/javascript">
function add(){
    window.location.href="<%=request.getContextPath() %>/student.do?method=add";
}

function del(id){
$.ajax( {
    type : "POST",
    url : "<%=request.getContextPath()%>/student.do?method=del&id=" + id,
    dataType: "json",
    success : function(data) {
        if(data.del == "true"){
            alert("删除成功!");
            $("#" + id).remove();
        }
        else{
            alert("删除失败!");
        }
    },
    error :function(){
        alert("网络连接出错!");
    }
});
}
</script>
</head>
<body>

<input id="add" type="button" onclick="add()" value="添加"/>
<table >
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>密码</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${list}" var="student">
    <tr id="<c:out value="${student.id}"/>">
        <td><c:out value="${student.id}"/></td>
        <td><c:out value="${student.user}"/></td>
        <td><c:out value="${student.psw}"/></td>
        <td>
            <input type="button" value="编辑"/> &nbsp;&nbsp;&nbsp;&nbsp;
            <input type="button" onclick="del('<c:out value="${student.id}"/>')" value="删除"/>
        </td>
    </tr>
    </c:forEach>
    
</table>
</body>
</html>

spring-servlet,主要配置controller的信息

<?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-3.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  
  <context:annotation-config />
       <!– 把标记了@Controller注解的类转换为bean –>  
      <context:component-scan base-package="com.mvc.controller" />  
  <!– 启动Spring MVC的注解功能,完成请求和注解POJO的映射 –>  
      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
     
       <!– 对模型视图名称的解析,即在模型视图名称添加前后缀 –>  
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  
          p:prefix="/WEB-INF/view/" p:suffix=".jsp" />  
        
       <bean id="multipartResolver"  
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver"  
          p:defaultEncoding="utf-8" />  
 </beans>

applicationContext.xml代码

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
 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-3.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

 <context:annotation-config />
 <context:component-scan base-package="com.mvc" />  <!– 自动扫描所有注解该路径 –>

 <context:property-placeholder location="classpath:/hibernate.properties" />

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">${dataSource.dialect}</prop>
    <prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="packagesToScan">
   <list>
    <value>com.mvc.entity</value><!– 扫描实体类,也就是平时所说的model –>
   </list>
    </property>
 </bean>

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
  <property name="dataSource" ref="dataSource" />
 </bean>

 <bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="${dataSource.driverClassName}" />
  <property name="url" value="${dataSource.url}" />
  <property name="username" value="${dataSource.username}" />
  <property name="password" value="${dataSource.password}" />
 </bean>
 <!– Dao的实现 –>
 <bean id="entityDao" class="com.mvc.dao.EntityDaoImpl">  
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <tx:annotation-driven transaction-manager="transactionManager" />
 <tx:annotation-driven mode="aspectj"/>
  
    <aop:aspectj-autoproxy/>  
</beans>

 源码下载:http://download.csdn.net/detail/lizi22/6795285

posted on 2014-01-01 11:40 Mr Lee 阅读(5846) 评论(2)  编辑  收藏 所属分类: java技术

Feedback

# re: Spring MVC 示例讲解(使用注解) 2014-01-01 11:47 鹏达锁业

支持博主分享  回复  更多评论   

# re: Spring MVC 示例讲解(使用注解) 2014-01-01 12:12 私人订制

不错,可以作为很好的入门学习例子了  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿

随笔分类

随笔档案

文章档案

(hibernate)http://www.blogjava.net/dyllove98/archive/2012/05/12/377959.html

搜索

最新评论

阅读排行榜

评论排行榜