`
孟雪雪
  • 浏览: 53008 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

spring

阅读更多
spring mvc注解例子 转载自http://www.blogjava.net/pengo/archive/2010/11/28/339229.html
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。
文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。

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>s3h3</display-name>  
   <context-param>    
     <param-name>contextConfigLocation</param-name>    
     <param-value>classpath:applicationContext*.xml</param-value>    
</context-param>    
  <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> 


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> 


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 


配置已经完成,下面开始例子
先在数据库建表,例子用的是mysql数据库

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;  
            }  
        });  
    }  


Dao在applicationContext.xml注入
<bean id="entityDao" class="com.mvc.dao.EntityDaoImpl"> 
  <property name="sessionFactory" ref="sessionFactory" />
</bean>



Dao只有一个类的实现,直接供其它service层调用,如果你想更换为其它的Dao实现,也只需修改这里的配置就行了。
开始写view页面,WEB-INF/view下新建页面student.jsp,WEB-INF/view这路径是在spring-servlet.xml文件配置的,你可以配置成其它,也可以多个路径。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><style mce_bogus="1">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="编辑"/>       
            <input type="button" onclick="del('<c:out value="${student.id}"/>')" value="删除"/> 
        </td> 
    </tr> 
    </c:forEach> 
      
</table> 
</body> 
</html> 


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> 


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();  
        }  
    }  



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);  
}  
}

OK,例子写完。有其它业务内容,只需直接新建view,并实现相应comtroller和service就行了,配置和dao层的内容基本不变,也就是每次只需写jsp(view),controller和service调用dao就行了。

怎样,看了这个,spring mvc是不是比ssh实现更方便灵活。
分享到:
评论

相关推荐

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    Spring Integration + Spring WS 整合

    Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...

    spring boot、spring cloud、spring boot Alibaba以及配套组件版本关系

    ### Spring Boot、Spring Cloud、Spring Boot Alibaba及其配套组件版本关系详解 #### 一、引言 随着微服务架构的流行,Spring Boot、Spring Cloud、Spring Boot Alibaba等技术栈成为构建现代分布式系统的基石。然而...

    spring3.0.5 所有jar文件

    包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...

    spring2.0升级到spring3.0.5的开发包

    Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    spring3.1 官方全部jar包

    spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....

    Spring MVC 入门实例

    这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...

    Getting started with Spring Framework: covers Spring 5(epub)

    Getting started with Spring Framework (4th Edition) is a hands-on guide to begin developing applications using Spring Framework 5. The examples (consisting of 88 sample projects) that accompany this ...

    spring6pdf详细讲解

    Spring 详细讲解 Spring 是一个功能强大且功能齐全的 Java 应用程序框架,提供了一个通用的基础结构来支持开发企业级应用程序。 Spring 框架的核心是控制反转(IoC)和依赖注入(DI)模式,它们使得应用程序更加...

    基于Spring Boot 3.0、 Spring Cloud 2022 & Alibaba 的微服务RBAC 权限管理系统

    介绍一个基于Spring Boot 3.0、Spring Cloud 2022 & Alibaba的微服务RBAC权限管理系统。该系统可以实现微服务RBAC权限管理,通过RBAC权限管理机制对用户访问系统的权限进行限制,从而提高系统的安全性和可用性。同时...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    Spring cloud与Spring boot 集成完整案例

    Spring Cloud和Spring Boot是两个非常重要的Java开发框架,它们在微服务架构中扮演着核心角色。Spring Boot简化了创建独立的、生产级别的基于Spring的应用程序的过程,而Spring Cloud则为开发者提供了快速构建分布式...

    spring-ai-core 0.8.1

    《Spring AI Core 0.8.1:开启人工智能之旅》 在现代软件开发领域,Spring框架以其强大的功能和灵活性,已经成为Java开发中的首选框架之一。而Spring AI Core则是Spring生态系统中专门为人工智能(AI)和机器学习...

    Spring技术内幕:深入解析Spring架构与设计原理

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...

    spring 4.3.14(全)最新的spring4正式版

    Spring 框架是 Java 开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。Spring 4.3.14 是该框架的最后一个4.x系列正式版,发布于2018年2月24日。这个版本在Spring 5.0发布之前提供了一个...

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一整套服务来简化企业级应用的构建。RabbitMQ则是一个流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地...

Global site tag (gtag.js) - Google Analytics