- 浏览: 521845 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
鬼一天:
代码有问题,没有考虑负数的情况。
根据经纬度和半径计算经纬度范围 -
Tair:
...
通过反射把map中的属性赋值到实体类bean对象中 -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
Spring3.0 MVC的初次尝试 -
酷的飞上天空:
haiyinlong 写道private File value ...
使用HttpUrlConnection进行post请求上传文件 -
lliiqiang:
分析很难,好的规则持久,靠某个方法条件局限不能证明长久
ruby的基本类型
Spring的mvc在2.5的时候尝试过一次,感觉配置繁琐,比struts2还难用
但看了3.0后,感觉新的基于注解的mvc变得简单易用,而且强大。。。。
附上Spring mvc的简易入门教程,我使用的是注解
首先下载需要的jar文件,我用到的有
aopalliance-1.0.jar
c3p0-0.9.1.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar
commons-lang-2.3.jar
commons-logging-1.1.1.jar
jackson-all-1.7.3.jar
jstl.jar
log4j-1.2.16.jar
mysql-connector-java-5.1.10-bin.jar
org.springframework.aop-3.0.4.RELEASE.jar
org.springframework.asm-3.0.4.RELEASE.jar
org.springframework.beans-3.0.4.RELEASE.jar
org.springframework.context-3.0.4.RELEASE.jar
org.springframework.core-3.0.4.RELEASE.jar
org.springframework.expression-3.0.4.RELEASE.jar
org.springframework.jdbc-3.0.4.RELEASE.jar
org.springframework.transaction-3.0.4.RELEASE.jar
org.springframework.web-3.0.4.RELEASE.jar
org.springframework.web.servlet-3.0.4.RELEASE.jar
standard.jar
commons-codec-1.4.jar
其中标注为红色的包,为非必须的,可以根据情况自由选择
下面配置 web.xml文件
添加如下内容
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
指定spring mvc配置文件的位置
然后在 WEB-INF目录下建立servlet-context.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- @Controller, @Service, @Configuration, etc. --> <context:component-scan base-package="com.web" /> <!-- Enables the Spring MVC @Controller programming model --> <mvc:annotation-driven /> <!-- Enable placeholderConfig --> <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:database.properties</value> </property> </bean> <!-- Configuration dataSource --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${driverClass}" /> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${username}"/> <property name="password" value="${password}"/> <property name="acquireIncrement" value="1"/> <property name="minPoolSize" value="5"/> <property name="maxPoolSize" value="50"/> <property name="maxIdleTime" value="1800"/> <property name="maxStatements" value="0"/> <property name="idleConnectionTestPeriod" value="1800"/> </bean> <!-- Enable transactionManager --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <!-- Configuration Transaction --> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.web.service.*.*(..))" /> </aop:config> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- FileUpload Support --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> <!-- Support static resource <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/images/**" location="/images/" /> --> <mvc:default-servlet-handler/> <!-- Spring Interceptors --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/admin/*"/> <bean class="com.web.interceptor.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!-- Support json ResponseBody --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> </beans>
配置文件方面,spring的常见配置就不在累述
其中org.springframework.web.servlet.view.InternalResourceViewResolver 这里配置视图文件位置, 我配置的是/WEB-INF/views 目录下后缀为jsp的文件
下面这个配置是,开启sring的文件上传功能
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
这些则是配置静态资源的路径,比如js,和图片,这样就不用被spring mvc进行解析处理
<!-- Support static resource -->
<mvc:resources mapping="/js/**" location="/js/" />
最下面的注释为<!-- Support json ResponseBody -->的配置是,是配置spring的返回json功能
OK,下面开始写demo代码
控制器的代码如下
package com.web.controller; import java.util.HashMap; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; 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 com.web.service.HelloWorldService; @Controller public class HelloWorld { private HelloWorldService helloWorldService; @Resource(name="helloWorldService") public void setHelloWorldService(HelloWorldService helloWorldService) { this.helloWorldService = helloWorldService; } @RequestMapping(value="/helloworld") @ResponseBody public Map<String,Object> renderJson(@RequestParam(value="id",required=false) Integer id,HttpServletRequest req){ Map<String,Object> map = new HashMap<String, Object>(); map.put("say", helloWorldService.sayHello()); map.put("test", "value"); return map; } @RequestMapping(value="/test") public ModelAndView renderView(){ ModelAndView mv = new ModelAndView(); mv.setViewName("test"); mv.addObject("key", "value"); return mv; } @RequestMapping(value="/upload") public ModelAndView uploadFile(@RequestParam("file") MultipartFile file){ System.out.println(file.getContentType()); System.out.println(file.getOriginalFilename()); System.out.println(file.getSize()); ModelAndView mv = new ModelAndView(); mv.setViewName("view"); mv.addObject("result", "success"); return mv; } }
上面三个方法分别定义了三个url路径,为/helloworld,/test,/upload
其中/helloworld 返回的是一个Map对象,这个map对象在返回给客户端的时候会自动转化为json字符串
/test 返回一个 ModelAndView 对象,这个对象里面包含了要返回的视图名称和一些展示数据,在视图页面可以使用el 和jstl进行取值展示,类似于servlet的forward
/upload 上传文件的处理路径,上传的文件会被spring自动封装为一个MultipartFile对象,可以对此对象进行相关操作。
spring 会自动把传递的参数注入到方法的参数中,这里有个问题,比如public Map<String,Object> renderJson(@RequestParam("name") String name) 这个方法需要一个参数名为name的参数,如果在浏览器访问这个路径的时候没有带上这个name参数,则会获得400的错误。解决办法是使用public Map<String,Object> renderJson(HttpServletRequest req) 这个方法代替,自己从req中取得参数。
好了,控制器的代码完成了。
下面完善service代码
service类为
package com.web.service; public interface HelloWorldService { public String sayHello(); } package com.web.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.web.dao.HelloWorldDao; import com.web.service.HelloWorldService; @Service("helloWorldService") public class HelloWorldServiceImp implements HelloWorldService { private HelloWorldDao helloWorldDao; @Resource(name="helloWorldDao") public void setHelloWorldDao(HelloWorldDao helloWorldDao) { this.helloWorldDao = helloWorldDao; } @Override public String sayHello() { return helloWorldDao.sayHello(); } }
通过 @Service("helloWorldService") 这个注解注册名称为helloWorldService的HelloWorldServiceImp类到spring容器中
@Resource(name="helloWorldDao") 这个注解表示 给这个类中注入 HelloWorldDao的实现类
最后是Dao层的代码
package com.web.dao; public interface HelloWorldDao { public String sayHello(); } package com.web.dao.impl; import org.springframework.stereotype.Repository; import com.util.LogUtil; import com.web.dao.HelloWorldDao; @Repository("helloWorldDao") public class HelloWorldDaoImp extends BaseDaoImp implements HelloWorldDao { @Override public String sayHello() { String testSql = "set names utf8"; String insert = "insert user(name) values(?)"; this.getJdbcTemplate().execute(testSql); this.getSimpleJdbcTemplate().update(insert, "test"); //int i = 1/0; test rollback LogUtil.info(testSql); return "hello"; } }
BaseDaoImp这个类作为所有Dao的基础类,提供操作JdbcTemplate和SimpleJdbcTemplate的访问接口,其中的
package com.web.dao.impl; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; public class BaseDaoImp{ private DataSource dataSource; private JdbcTemplate jdbcTemplate; private SimpleJdbcTemplate simpleJdbcTemplate; public DataSource getDataSource() { return dataSource; } @Autowired public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); this.dataSource = dataSource; } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public SimpleJdbcTemplate getSimpleJdbcTemplate() { return simpleJdbcTemplate; } }
这段代码为自动注入DataSource
其中//int i = 1/0; test rollback 这行代码为测试时候,事物在出现异常后会自动回滚
至此基本告一段落。
可以看到以前的一些大段的配置,已经变为了代码里的注解,这样确实可以快速开发。 但缺点是没有使用xml配置明了。。。
还有一个不知道算不算问题,这样利用注解配置,每个controller里面有可能包含还多url路径方法,以前的action泛滥有可能变成一个类包含太多的逻辑而变的异常庞大
最后还发现一个问题,就是下面这段代码
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />
如果在上面的目录中含有后缀为rar的文件,则访问此文件会出现404的错误,具体原因不知。。。
用<mvc:default-servlet-handler/> 替代上面的静态资源映射,问题解决。
注意:这个一个bug为后来发现,所以附件的项目工程中servlet-context.xml并未更正,请自己更正。
最后附上项目源码,为eclipse3.5jee的web项目
- SringMVC.zip (7.7 MB)
- 下载次数: 2064
发表评论
-
接上篇补上window平台自动上传证书文件的批处理问卷
2012-09-20 12:54 1438@echo off : host=服务器证书域名或ip ... -
tomcat6的https双向认证
2012-09-19 21:41 14151.生成服务器端证书 ... -
使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException
2012-08-20 21:08 100820有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近 ... -
通过反射把map中的属性赋值到实体类bean对象中
2012-08-16 23:16 33330使用过struts2后感觉最方便的就是这个框架能自动把表单的参 ... -
定时对大数据量的表进行分表对数据备份
2012-02-25 23:37 1886工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下 ... -
导出excel并提供下载
2012-02-24 14:03 1435工作中需要动态生成excel并提供下载,留在这个为了以后方面 ... -
Nginx + tomcat 其中出现的cookie问题
2012-01-10 15:16 1731简单说就是:cookie设置时如果设置了路径,则只对此路径下面 ... -
记一次hibernate无法取得jdbc插入数据的问题折腾
2010-09-22 10:19 2512大概情况如下 前端:struts2+spring3+hibe ... -
基于jquery的ajax小例子
2010-05-29 15:01 1857献给那些懒得看jquery文档的人。 jquery比较常用的 ... -
sessionDestroyed执行时间的奇怪问题
2010-05-25 11:12 7917问题描述: 用户登陆后转到list.jsp页面,此页面不停向 ... -
Struts2+Hibernate3+Spring3简单整合练习
2010-04-28 11:38 16800第一步:Struts2环境的搭 ...
相关推荐
### Spring 3.0 MVC框架知识点详解 #### 一、Spring 3.0 MVC框架概述 **Spring 3.0 MVC**是Spring框架的一个重要组成部分,专注于构建Web应用程序。相较于之前的版本,Spring 3.0 MVC引入了许多重要的改进和新特性...
### Spring 3.0 MVC中文教程知识点概览 #### 一、Spring 3.0 MVC框架简介 **Spring 3.0 MVC** 是Spring框架的一部分,专注于构建Web应用程序。相较于之前的版本,Spring 3.0引入了许多新特性,使得开发者能够更加...
这个“spring3.0Mvc简单示例”旨在帮助开发者快速理解并入门Spring MVC的基本概念和操作流程。让我们深入探讨一下Spring MVC的核心特性以及如何在项目中设置和使用它。 首先,Spring MVC是Spring框架的一部分,它...
本篇文章将深入探讨Spring 3.0 MVC的相关知识点。 一、Spring MVC 架构 Spring MVC采用模型-视图-控制器(Model-View-Controller)设计模式,将业务逻辑、数据展示和用户交互分离,提高了代码的可维护性和可测试性...
spring3.0MVC注解(附实例)
Spring 3.0 MVC 和 REST 是 Java Web 开发中的重要组成部分,它们为构建现代、高效的应用程序提供了强大的框架支持。本文将深入探讨这两个概念以及如何通过一个入门实例来理解它们。 Spring MVC(Model-View-...
【Spring3.0 MVC框架简介】 Spring3.0 MVC是Spring框架的重要组成部分,专注于构建高性能、健壮的Web应用程序。这个框架具有高度可配置性,允许开发者将各个逻辑和功能模块进行分离,增强了代码的可维护性和可扩展性...
Spring 3.0 MVC 框架是 Spring 的 Web 组件,提供了丰富的功能,为建设强大的 Web 应用程序。它可以毫不费力地与其他流行的 Web 框架集成,如 Struts、WebWork、Java Server Faces 和 Tapestry。Spring 3.0 MVC 框架...
Spring3.0 MVC.pdf java spring framework 3.0 mvc
《Spring 3.0 MVC 框架深度解析与实战指南》 在现代Web开发中,Spring框架以其强大的功能和灵活性备受青睐,尤其是其MVC模块,为构建高性能、易于维护的Web应用提供了坚实的基础。本文将深入探讨Spring 3.0版本的...
### Spring3.0MVC框架概述 Spring3.0MVC是Spring框架的Web模块,专为构建高效、可扩展的Web应用程序而设计。它不仅提供了丰富的功能来满足Web开发的需求,还具备高度的可配置性和灵活性,能够无缝集成到现有的Web...
Spring3.0 MVC框架是Java Web开发中广泛使用的轻量级框架,它为开发者提供了模型-视图-控制器(MVC)的结构支持,简化了Web应用的开发过程。Mybatis3.0则是一个持久层框架,它允许开发者将SQL语句与Java代码紧密结合...
### Spring 3.0 MVC框架知识点详解 #### 一、Spring MVC框架概述 Spring MVC是Spring框架中的一个重要组成部分,主要用于构建强大的Web应用程序。它不仅具备丰富的功能,而且具有高度的可配置性和灵活性,使得...
Spring 3.0 MVC 是一个用于构建 Web 应用程序的全功能模型-视图-控制器(MVC)框架,它是 Spring 框架的一个核心模块。Spring MVC 提供了一种可插拔的架构,允许开发者选择使用内置的 Spring Web 框架,或者与其他 ...
在本文中,我们将深入探讨如何使用Spring 3.0 MVC框架通过注解方式实现一个简单的“Hello, World!”输出。Spring MVC是Spring框架的一部分,它为构建基于模型-视图-控制器(MVC)架构的Web应用程序提供了一个强大的...
Spring 3.0 MVC 是一个强大的Java框架,用于构建企业级Web应用程序。它以其模块化、松耦合和高度可配置性而闻名。本自学教程集合了多种资源,旨在帮助初学者逐步掌握Spring 3.0 MVC的核心概念,并通过实际项目实例...
Spring 3.0 MVC 和 Hibernate 是两个非常重要的Java Web开发框架,它们的结合为开发者提供了强大的数据持久化和Web应用程序构建能力。在这个压缩包中,我们可能会找到一系列相关的jar文件,这些文件是运行Spring MVC...