DispatcherServlet中一些特殊的Bean总结

最后更新于:2022-04-01 09:46:15

**前言:**在Spring MVC文档中有关于DispatcherServlet中Bean的总结,做个笔记。我个人有个习惯,觉得自己记不住的东西就写下来以后翻着看,心里留个印象。所以需要说明的是,这些东西其实并不需要强制记忆…实际项目中理解需求,合理运用就好。 **正文:** DispatcherServlet中使用的是WebApplicationContext作为默认的上下文。在这个上下文中有一些Bean值得总结。 1.**Controller**:页面控制器,处理器,怎么理解都行。熟悉Spring MVC的人都知道Controller是整个应用的核心Bean。它主要是做一些对请求的处理。 2.**HandlerMapping**:请求到处理器的映射。如果映射成功,返回一个HandlerExecutionChain对象,其中包含一个Handler处理器对象,几个HandlerInterceptor对象。例如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器。 3.**HandlerAdapter**:顾名思义,它会把处理器包装为适配器,从而支持多种类型的处理器。如 SimpleControllerHandlerAdapter 将对实现了 Controller 接口的Bean 进行适配,并且调用处理器的 handleRequest 方法进行功能处理 4.**ViewResolver**:它将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图 5.**LocalResover**:本地化解析,因为 Spring 支持国际化,因此 LocalResover 解析客户端的 Locale 信息从而方便进行国际化 6.**ThemeResovler**:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果 7.**MultipartResolver**:文件上传解析器,用来支持文件上传的 8.**HandlerExceptionResolver**:很明显,是用来处理异常的 9.**RequestToViewNameTranslator**:当处理器没有返回逻辑视图名等相关信息时,自动将请求 URL 映射为逻辑视图名。这种一般属于框架自定义功能。 10.**FlashMapManager**:用于管理 FlashMap 的策略接口,FlashMap 用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景
';

Spring MVC常用注解整理

最后更新于:2022-04-01 09:46:13

### 1. @Controller Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。如想自动检测生效,需在XML头文件下引入 spring-context: ~~~ <?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="org.springframework.samples.petclinic.web"/> <!-- ... --></beans> ~~~ ### 2.@RequestMapping 我们可以 @RequestMapping 注解将类似 “/favsoft”这样的URL映射到整个类或特定的处理方法上。一般来说,类级别的注解映射特定的请求路径到表单控制器上,而方法级别的注解只是映射为一个特定的HTTP方法请求(“GET”,“POST”等)或HTTP请求参数。 ~~~ @Controller @RequestMapping("/favsoft") public class AnnotationController { @RequestMapping(method=RequestMethod.GET) public String get(){ return ""; } @RequestMapping(value="/getName", method = RequestMethod.GET) public String getName(String userName) { return userName; } @RequestMapping(value="/{day}", method=RequestMethod.GET) public String getDay(Date day){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.format(day); } @RequestMapping(value="/addUser", method=RequestMethod.GET) public String addFavUser(@Validated FavUser favUser,BindingResult result){ if(result.hasErrors()){ return "favUser"; } //favUserService.addFavUser(favUser); return "redirect:/favlist"; } @RequestMapping("/test") @ResponseBody public String test(){ return "aa"; } } ~~~ @RequestMapping 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到 /favsoft 路径下。@RequestMapping中可以使用 method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。 @RequestMapping 可以使用 @Validated与BindingResult联合验证输入的参数,在验证通过和失败的情况下,分别返回不同的视图。 @RequestMapping支持使用URI模板访问URL。URI模板像是URL模样的字符串,由一个或多个变量名字组成,当这些变量有值的时候,它就变成了URI。 ### 3.@PathVariable 在Spring MVC中,可以使用 @PathVariable 注解方法参数并将其绑定到URI模板变量的值上。如下代码所示: ~~~ String findOwner( String , Model model) { FavUser favUser = favUserService.findFavUser(); model.addAttribute( ; } ~~~ URI模板 “favusers/{favUserId}”指定变量的名字 favUserId ,当控制器处理这个请求的时候, favUserId的值会被设定到URI中。比如,当有一个像“favusers/favccxx”这样的请求时,favUserId的值就是 favccxx。 ~~~ @PathVariable 可以有多个注解,像下面这样: @RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { Owner owner = ownerService.findOwner(ownerId); Pet pet = owner.getPet(petId); model.addAttribute("pet", pet); return "displayPet"; } ~~~ @PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。Spring会自动将其转换成合适的类型或者抛出 TypeMismatchException异常。当然,我们也可以注册支持额外的数据类型。 如果@PathVariable使用Map<String, String>类型的参数时, Map会填充到所有的URI模板变量中。 @PathVariable支持使用正则表达式,这就决定了它的超强大属性,它能在路径模板中使用占位符,可以设定特定的前缀匹配,后缀匹配等自定义格式。 @PathVariable还支持矩阵变量,因为现实场景中用的不多,这就不详细介绍了,有需要的童鞋请查看官网的文档。 ### 4.@RequestParam @RequestParam将请求的参数绑定到方法中的参数上,如下面的代码所示。其实,即使不配置该参数,注解也会默认使用该参数。如果想自定义指定参数的话,如果将@RequestParam的 required 属性设置为false(如@RequestParam(value="id",required=false))。 ### 5.@RequestBody @RequestBody是指方法参数应该被绑定到HTTP请求Body上。 ~~~ @RequestMapping(value = "/something", method = RequestMethod.PUT)public void handle(@RequestBody String body, Writer writer) throws IOException { writer.write(body); } ~~~ 如果觉得@RequestBody不如@RequestParam趁手,我们可以使用 HttpMessageConverter将request的body转移到方法参数上, HttMessageConverser将 HTTP请求消息在Object对象之间互相转换,但一般情况下不会这么做。事实证明,@RequestBody在构建REST架构时,比@RequestParam有着更大的优势。 ### 6.@ResponseBody @ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。@ResponseBody在输出JSON格式的数据时,会经常用到,代码见下图: ~~~ @RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() { return "Hello World"; } ~~~ ### 7.@RestController 我们经常见到一些控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody。 ~~~ @RestController public class FavRestfulController { @RequestMapping(value="/getUserName",method=RequestMethod.POST) public String getUserName(@RequestParam(value="name") String name){ return name; } } ~~~ ### 8.HttpEntity HttpEntity除了能获得request请求和response响应之外,它还能访问请求和响应头,如下所示: ~~~ @RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException { String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader")); byte[] requestBody = requestEntity.getBody(); // do something with request header and body HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED); } ~~~ ### 9.@ModelAttribute @ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)。该方法支持与@RequestMapping一样的参数类型,但并不能直接映射成请求。控制器中的@ModelAttribute方法会在@RequestMapping方法调用之前而调用,示例如下: ~~~ @ModelAttribute public Account addAccount(@RequestParam String number) { return accountManager.findAccount(number); } @ModelAttribute public void populateModel(@RequestParam String number, Model model) { model.addAttribute(accountManager.findAccount(number)); // add more ... } ~~~ @ModelAttribute方法用来在model中填充属性,如填充下拉列表、宠物类型或检索一个命令对象比如账户(用来在HTML表单上呈现数据)。 @ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。 @ModelAttribute作用在方法参数上 当@ModelAttribute作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是Spring MVC中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。 @ModelAttribute是一种很常见的从数据库中检索属性的方法,它通过@SessionAttributes使用request请求存储。在一些情况下,可以很方便的通过URI模板变量和类型转换器检索属性。 Spring3.0 引入 RESTful 架构风格支持(通过@PathVariable 注解和一些其他特性支持),且又引入了 更多的注解支持: **@CookieValue**:cookie 数据到处理器功能处理方法的方法参数上的绑定; **@RequestHeader**:请求头(header)数据到处理器功能处理方法的方法参数上的绑定; **@RequestBody**:请求的 body 体的绑定(通过 HttpMessageConverter 进行类型转换); **@ResponseBody**:处理器功能处理方法的返回值作为响应体(通过 HttpMessageConverter 进行类型转换); **@ResponseStatus**:定义处理器功能处理方法/异常处理器返回的状态码和原因; **@ExceptionHandler**:注解式声明异常处理器; **@PathVariable**:请求 URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持 RESTful 架构风 格的 URI,以后会详细介绍RESTful风格的Java Web实现。
';

Maven创建web项目具体过程

最后更新于:2022-04-01 09:46:10

## 使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97ef636.png)   我们勾选上Create a simple project (不使用骨架)   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98092c0.png)     这里的Packing 选择 war的形式   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e981c030.png)   由于packing是war包,那么下面也就多出了webapp的目录 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e982c195.png)   由于我们的项目要使用eclipse发布到tomcat下面,这里我们需要先把项目转成dynamic web project   在我们的项目上点击右键,选择properties 并找到 Project Facets ,并点击Convert to faceted form…   如下图:   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9839988.png)       然后勾选Dynamic Web Module 并点击ok  如下图:(3.0只有tomcat7才支持) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e984c295.png)       接下来观察我们的项目结构,多了一个web content目录 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9862614.png)     虽然此时我们可以发布到tomcat中,但这不符合maven的结构,我们还要做如下修改 把上图WebContent下面两个目录 META-INF ,WEB-INF 直接剪切到src/main/webapp目录下,并删掉WebContent目录,那么现在的项目结构如下图:   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9872a0c.png)     然后我们要修改发布规则,右键点击项目, 选择 Deployment Assembly   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98830df.png)   选择WebContent,把它remove掉,测试类我们也不需要发布,test的两个目录页可以remove   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9891bfd.png)     接着重新指定一个web的路径,点击add,选择Folder -- 〉  next   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e989ebc9.png)     在src下找到webapp目录,然后finish   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98b48bd.png)     最后一步,我们要把当前的build path 指向 Maven Dependency, 直接点击add,选择Java Build Path Entries 然后next   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98c6ee6.png)       然后再点击finish完成   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98d84de.png)     完成后如下图:   ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e98e8c37.png)     至此一个基于maven的webapp就建立好了,并可以直接从eclipse中发布到tomcat中   补充:我们需要在src/main/webapp/WEB-INF下面创建一个web.xml     ## 导入我们的Spring mvc依赖jar包 ~~~ <dependencies>     <dependency>         <groupId>org.springframework</groupId>         <artifactId>spring-core</artifactId>         <version>3.0.7.RELEASE</version>     </dependency>        <dependency>         <groupId>org.springframework</groupId>         <artifactId>spring-web</artifactId>         <version>3.0.7.RELEASE</version>     </dependency>        <dependency>         <groupId>org.springframework</groupId>         <artifactId>spring-webmvc</artifactId>         <version>3.0.7.RELEASE</version>     </dependency>       <dependency>         <groupId>org.codehaus.jackson</groupId>         <artifactId>jackson-mapper-asl</artifactId>         <version>1.7.1</version>     </dependency>   </dependencies> ~~~ 直接保存,maven就会自动为我们下载所需jar文件
';

使用MyBatis_Generator生成Dto、Dao、Mapping

最后更新于:2022-04-01 09:46:08

由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类、Dao接口类甚至Mapping映射文件。 ## 一、建立表结构 CREATE TABLE `user` (   `id` varchar(50) NOT NULL,   `username` varchar(18) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,   `password` varchar(18) DEFAULT NULL,   `email` varchar(50) DEFAULT NULL,   `name` varchar(18) DEFAULT NULL,   `sex` varchar(2) DEFAULT NULL,   `birthday` varchar(50) DEFAULT NULL,   `address` varchar(500) DEFAULT NULL,   `tel` varchar(18) DEFAULT NULL,   `qq` varchar(18) DEFAULT NULL,   `image` varchar(50) DEFAULT NULL,   `sfjh` varchar(1) DEFAULT NULL,   `sfzx` varchar(1) DEFAULT NULL,   `sfhf` varchar(1) DEFAULT NULL,   `sfpl` varchar(1) DEFAULT NULL,   `sffx` varchar(1) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf-8; ## 二、下载mybatis-generator-core 进入:http://code.google.com/p/mybatis/ 选择Downloads,再选择[MyBatis Generator Tool](http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DGenerator)下载即可。 ## 三、生成配置文件 新建一个空的XML配置文件,名称可以随便取,这里以generatorConfig.xml为名。最好将这个文件放在下载后的lib目录中,如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97b4464.jpg) 其中mysql的驱动可以随便放在非中文路径的地方,这里为了方便就放在lib目录下。 自动生成最重要的就是配置文件的书写,现在就开始介绍generatorConfig.xml这个文件的具体内容: ~~~ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库驱动--> <classPathEntry location="mysql-connector-java-5.0.6-bin.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接URL,用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/test" userId="test" password="test"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成模型的包名和位置--> <javaModelGenerator targetPackage="test.model" targetProject="src"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成映射文件的包名和位置--> <sqlMapGenerator targetPackage="test.mapping" targetProject="src"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成DAO的包名和位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 要生成哪些表--> <table tableName="about" domainObjectName="AboutDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="user" domainObjectName="UserDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> <table tableName="syslogs" domainObjectName="SyslogsDto" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> </context> </generatorConfiguration> ~~~ 1、其中需要注意的有数据库驱动、数据库URL、用户名、密码、生成模型的包名和位置、生成映射文件的包名和位置、生成DAO的包名和位置以及最后需要生成的表名和对应的类名。 ## 四、运行 需要通过CMD命令行方式来运行,首先可以先准备一个运行的脚本,这里使用的脚本是:java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite 需要注意的是:mybatis-generator-core-1.3.2.jar为下载的对应版本的jar,generatorConfig.xml 为配置文件名,如果不为这个可以在这里进行修改。 启动cmd进入到“F:\soft\mybatis-generator-core-1.3.2\lib”这个目录下,如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97cd09a.jpg) 生成成功后进到src目录下,可以看到已经生成了对应的model、dao、mapping,如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97dcce9.jpg) 下面可以看看生成后的UserMapper.xml ~~~ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="test.dao.UserDtoMapper" > <resultMap id="BaseResultMap" type="test.model.UserDto" > <id column="id" property="id" jdbcType="VARCHAR" /> <result column="username" property="username" jdbcType="VARCHAR" /> <result column="password" property="password" jdbcType="VARCHAR" /> <result column="email" property="email" jdbcType="VARCHAR" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="sex" property="sex" jdbcType="VARCHAR" /> <result column="birthday" property="birthday" jdbcType="VARCHAR" /> <result column="address" property="address" jdbcType="VARCHAR" /> <result column="tel" property="tel" jdbcType="VARCHAR" /> <result column="qq" property="qq" jdbcType="VARCHAR" /> <result column="image" property="image" jdbcType="VARCHAR" /> <result column="sfjh" property="sfjh" jdbcType="VARCHAR" /> <result column="sfzx" property="sfzx" jdbcType="VARCHAR" /> <result column="sfhf" property="sfhf" jdbcType="VARCHAR" /> <result column="sfpl" property="sfpl" jdbcType="VARCHAR" /> <result column="sffx" property="sffx" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > id, username, password, email, name, sex, birthday, address, tel, qq, image, sfjh, sfzx, sfhf, sfpl, sffx </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from user where id = #{id,jdbcType=VARCHAR} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > delete from user where id = #{id,jdbcType=VARCHAR} </delete> <insert id="insert" parameterType="test.model.UserDto" > insert into user (id, username, password, email, name, sex, birthday, address, tel, qq, image, sfjh, sfzx, sfhf, sfpl, sffx) values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{birthday,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR}, #{qq,jdbcType=VARCHAR}, #{image,jdbcType=VARCHAR}, #{sfjh,jdbcType=VARCHAR}, #{sfzx,jdbcType=VARCHAR}, #{sfhf,jdbcType=VARCHAR}, #{sfpl,jdbcType=VARCHAR}, #{sffx,jdbcType=VARCHAR}) </insert> <insert id="insertSelective" parameterType="test.model.UserDto" > insert into user <trim prefix="(" suffix=")" suffixOverrides="," > <if test="id != null" > id, </if> <if test="username != null" > username, </if> <if test="password != null" > password, </if> <if test="email != null" > email, </if> <if test="name != null" > name, </if> <if test="sex != null" > sex, </if> <if test="birthday != null" > birthday, </if> <if test="address != null" > address, </if> <if test="tel != null" > tel, </if> <if test="qq != null" > qq, </if> <if test="image != null" > image, </if> <if test="sfjh != null" > sfjh, </if> <if test="sfzx != null" > sfzx, </if> <if test="sfhf != null" > sfhf, </if> <if test="sfpl != null" > sfpl, </if> <if test="sffx != null" > sffx, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="id != null" > #{id,jdbcType=VARCHAR}, </if> <if test="username != null" > #{username,jdbcType=VARCHAR}, </if> <if test="password != null" > #{password,jdbcType=VARCHAR}, </if> <if test="email != null" > #{email,jdbcType=VARCHAR}, </if> <if test="name != null" > #{name,jdbcType=VARCHAR}, </if> <if test="sex != null" > #{sex,jdbcType=VARCHAR}, </if> <if test="birthday != null" > #{birthday,jdbcType=VARCHAR}, </if> <if test="address != null" > #{address,jdbcType=VARCHAR}, </if> <if test="tel != null" > #{tel,jdbcType=VARCHAR}, </if> <if test="qq != null" > #{qq,jdbcType=VARCHAR}, </if> <if test="image != null" > #{image,jdbcType=VARCHAR}, </if> <if test="sfjh != null" > #{sfjh,jdbcType=VARCHAR}, </if> <if test="sfzx != null" > #{sfzx,jdbcType=VARCHAR}, </if> <if test="sfhf != null" > #{sfhf,jdbcType=VARCHAR}, </if> <if test="sfpl != null" > #{sfpl,jdbcType=VARCHAR}, </if> <if test="sffx != null" > #{sffx,jdbcType=VARCHAR}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="test.model.UserDto" > update user <set > <if test="username != null" > username = #{username,jdbcType=VARCHAR}, </if> <if test="password != null" > password = #{password,jdbcType=VARCHAR}, </if> <if test="email != null" > email = #{email,jdbcType=VARCHAR}, </if> <if test="name != null" > name = #{name,jdbcType=VARCHAR}, </if> <if test="sex != null" > sex = #{sex,jdbcType=VARCHAR}, </if> <if test="birthday != null" > birthday = #{birthday,jdbcType=VARCHAR}, </if> <if test="address != null" > address = #{address,jdbcType=VARCHAR}, </if> <if test="tel != null" > tel = #{tel,jdbcType=VARCHAR}, </if> <if test="qq != null" > qq = #{qq,jdbcType=VARCHAR}, </if> <if test="image != null" > image = #{image,jdbcType=VARCHAR}, </if> <if test="sfjh != null" > sfjh = #{sfjh,jdbcType=VARCHAR}, </if> <if test="sfzx != null" > sfzx = #{sfzx,jdbcType=VARCHAR}, </if> <if test="sfhf != null" > sfhf = #{sfhf,jdbcType=VARCHAR}, </if> <if test="sfpl != null" > sfpl = #{sfpl,jdbcType=VARCHAR}, </if> <if test="sffx != null" > sffx = #{sffx,jdbcType=VARCHAR}, </if> </set> where id = #{id,jdbcType=VARCHAR} </update> <update id="updateByPrimaryKey" parameterType="test.model.UserDto" > update user set username = #{username,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, email = #{email,jdbcType=VARCHAR}, name = #{name,jdbcType=VARCHAR}, sex = #{sex,jdbcType=VARCHAR}, birthday = #{birthday,jdbcType=VARCHAR}, address = #{address,jdbcType=VARCHAR}, tel = #{tel,jdbcType=VARCHAR}, qq = #{qq,jdbcType=VARCHAR}, image = #{image,jdbcType=VARCHAR}, sfjh = #{sfjh,jdbcType=VARCHAR}, sfzx = #{sfzx,jdbcType=VARCHAR}, sfhf = #{sfhf,jdbcType=VARCHAR}, sfpl = #{sfpl,jdbcType=VARCHAR}, sffx = #{sffx,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} </update> </mapper> ~~~ 接下来就可以将这三个目录拷贝到对应项目的目录中,如果需要新增自己的方法可以修改dao类。
';

Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架

最后更新于:2022-04-01 09:46:06

项目建设完成之后的结构: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e96e0809.jpg)    数据库的表结构如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9702d7a.jpg) 环境建设:搭建Maven环境、Tomcat环境、需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备); 开始创建工程: 1.创建一个Maven工程: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97186fe.jpg) 选择webapp  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e972f862.jpg) 随便填写了: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e97465ad.jpg) 创建完成之后工程会报错: 接下来怎么解决的? 选中项目点击右键,选择“Properties”  进入下面界面: 选中project facets ,然后将java版本改成 你的jdk版本,或者1.6以上版本。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9759bd0.jpg) 之后选择 java build path ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9776b7d.jpg) 修改lib里面的java版本: 选中上面的jre System Library 然后选择 edit ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9792ab8.jpg) 保存之后再看看工程。上面的操作主要是让目录结构显示正常。(上面的不一定可以解决问题,工程还是会报错的) 在pom.xml文件中添加依赖: ~~~       <dependency>               <groupId>javax</groupId>               <artifactId>javaee-api</artifactId>               <version>7.0</version>           </dependency>   ~~~ 这个立竿见影;不报错了。 之后再pom文件中添加依赖包,最终pom.xml文件如下: ~~~ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>G1</groupId> <artifactId>C1</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>C1 Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 表示开发的时候引入,发布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 导入java ee jar 包 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志文件管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- 格式化对象,方便输出日志 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 映入JSON --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> </dependencies> <build> <finalName>C1</finalName> </build> </project> ~~~ 之后再看lib里面是否都导入了jar包: 接着需要配置resource下面的四个配置文件,目录结构如下: jdbc.properties 、log4j.properties、  spring-mvc.xml 、 spring-mybatis.xml 这些文件可能都需要自己创建。 需要自己创建一个数据库表testu,包括四个字段 id username password age  jdbc.properties 配置如下: ~~~ jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/testu?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=root #\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570 jdbc.initialSize=0 #\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570 jdbc.maxActive=20 #\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2 jdbc.maxIdle=20 #\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2 jdbc.minIdle=1 #\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4 jdbc.maxWait=60000 ~~~ log4j.properties配置如下: ~~~ #定义LOG输出级别 log4j.rootLogger=INFO,Console,File #定义日志输出目的地为控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out #可以灵活地指定日志输出格式,下面一行是指定具体的格式 log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n #文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File = logs/ssm.log #定义文件最大大小 log4j.appender.File.MaxFileSize = 10MB # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n ~~~ spring-mvc.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:p="http://www.springframework.org/schema/p" 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-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.cn.uuu.controller" /> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 --> </list> </property> </bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> </beans> ~~~ spring-mybatis.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:p="http://www.springframework.org/schema/p" 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-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.cn.uuu" /> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${jdbc.maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/cn/uuu/mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.cn.uuu.IDao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans> ~~~ 到这里配置文件基本配置完毕 接下来怎么创建一个简单的实例运行: 可以参考这篇文章 http://blog.csdn.net/cool_easy/article/details/42778239   使用代码生成。生成 这三个包,还有几个文件需要自己创建。 代码结构如下 最后的代码详见:http://download.csdn.net/detail/naploen8/8381755 
';

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

最后更新于:2022-04-01 09:46:03

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想。实践出真知。(可通过图片水印查看博客地址) ## 1、基本概念 ### 1.1、Spring         Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ### 1.2、SpringMVC         Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了[控制器](http://baike.baidu.com/view/122229.htm)、模型[对象](http://baike.baidu.com/view/2387.htm)、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。 ### 1.3、MyBatis        MyBatis 本是[apache](http://baike.baidu.com/view/28283.htm)的一个开源项目[iBatis](http://baike.baidu.com/view/628102.htm), 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的[持久层](http://baike.baidu.com/view/198047.htm)框架。iBATIS提供的[持久层](http://baike.baidu.com/view/198047.htm)框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 ## 2、开发环境搭建 如果需要,参看之前的博文:[http://blog.csdn.net/zhshulin/article/details/30779873](http://blog.csdn.net/zhshulin/article/details/30779873) ## 3、Maven Web项目创建 如果需要,参看之前的博文:[http://blog.csdn.net/zhshulin/article/details/37921705](http://blog.csdn.net/zhshulin/article/details/37921705) ## 4、SSM整合         下面主要介绍三大框架的整合,至于环境的搭建以及项目的创建,参看上面的博文。这次整合我分了2个配置文件,分别是spring-mybatis.xml,包含spring和mybatis的配置文件,还有个是spring-mvc的配置文件,此外有2个资源文件:jdbc.propertis和log4j.properties。完整目录结构如下(最后附上源码下载地址,不建议直接使用源码,因为此教程已经有了全部代码): ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9601e2c.jpg) 使用框架都是较新的版本:        Spring 4.0.2 RELEASE        Spring MVC 4.0.2 RELEASE        MyBatis 3.2.6 ### 4.1、Maven引入需要的JAR包          为了方便后面说的时候不需要引入JAR包,我这里直接给出所有需要的JAR包,这都是基本的JAR包,每个包的是干什么的都有注释,就不再多说了。 pom.xml ~~~ <properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 表示开发的时候引入,发布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 导入java ee jar 包 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志文件管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- 格式化对象,方便输出日志 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 映入JSON --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> </dependencies> ~~~ ### 4.2、Spring与MyBatis的整合 所有需要的JAR包都引入以后,首先进行Spring与MyBatis的整合,然后再进行JUnit测试,先看一个项目结构图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e962c6ac.jpg) ### 4.2.1、建立JDBC属性文件 jdbc.properties(文件编码修改为utf-8) ~~~ driver=com.mysql.jdbc.Driver url=jdbc:mysql://10.221.10.111:8080/db_zsl username=demao password=demao #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000 ~~~ ### 4.2.2、建立spring-mybatis.xml配置文件         这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。注释也很详细,大家看看就明白了。 spring-mybatis.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:p="http://www.springframework.org/schema/p" 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-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.cn.hnust" /> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.cn.hnust.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans> ~~~ ### 4.2.3、Log4j的配置       为了方便调试,一般都会使用日志来输出信息,Log4j是[Apache](http://baike.baidu.com/subview/28283/5418753.htm)的一个开放源代码项目,通过使用Log4j,我们可以控制[日志](http://baike.baidu.com/view/269351.htm)信息输送的目的地是[控制台](http://baike.baidu.com/view/135167.htm)、文件、[GUI](http://baike.baidu.com/view/25309.htm)组件,甚至是套接口服务器、[NT](http://baike.baidu.com/subview/378/5113303.htm)的事件记录器、[UNIX](http://baike.baidu.com/view/8095.htm) [Syslog](http://baike.baidu.com/view/1614723.htm)[守护进程](http://baike.baidu.com/view/53123.htm)等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。       Log4j的配置很简单,而且也是通用的,下面给出一个基本的配置,换到其他项目中也无需做多大的调整,如果想做调整或者想了解Log4j的各种配置,参看我转载的一篇博文,很详细: [http://blog.csdn.net/zhshulin/article/details/37937365](http://blog.csdn.net/zhshulin/article/details/37937365) 下面给出配置文件目录: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e963fa47.jpg) log4j.properties ~~~ log4j.rootLogger=INFO,Console,File #定义日志输出目的地为控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out #可以灵活地指定日志输出格式,下面一行是指定具体的格式 log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n #文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File = logs/ssm.log #定义文件最大大小 log4j.appender.File.MaxFileSize = 10MB # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n ~~~ ### 4.2.4、JUnit测试       经过以上步骤(到4.2.2,log4j不配也没影响),我们已经完成了Spring和mybatis的整合,这样我们就可以编写一段测试代码来试试是否成功了。 #### 4.2.4.1、创建测试用表 既然我们需要测试,那么我们就需要建立在数据库中建立一个测试表,这个表建的很简单,SQL语句为: ~~~ DROP TABLE IF EXISTS `user_t`; CREATE TABLE `user_t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(40) NOT NULL, `password` varchar(255) NOT NULL, `age` int(4) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; /*Data for the table `user_t` */ insert into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'测试','sfasgfaf',24); ~~~ #### 4.2.4.2、利用MyBatis Generator自动创建代码 参考博文:[http://blog.csdn.net/zhshulin/article/details/23912615](http://blog.csdn.net/zhshulin/article/details/23912615)        这个可根据表自动创建实体类、MyBatis映射文件以及DAO接口,当然,我习惯将生成的接口名改为IUserDao,而不是直接用它生成的UserMapper。如果不想麻烦就可以不改。完成后将文件复制到工程中。如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e964e002.jpg) #### 4.2.4.3、建立Service接口和实现类 目录结构: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e96617b1.jpg) 下面给出具体的内容: IUserService.jave ~~~ package com.cn.hnust.service; import com.cn.hnust.pojo.User; public interface IUserService { public User getUserById(int userId); ~~~ UserServiceImpl.java ~~~ package com.cn.hnust.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.cn.hnust.dao.IUserDao; import com.cn.hnust.pojo.User; import com.cn.hnust.service.IUserService; @Service("userService") public class UserServiceImpl implements IUserService { @Resource private IUserDao userDao; @Override public User getUserById(int userId) { // TODO Auto-generated method stub return this.userDao.selectByPrimaryKey(userId); ~~~ #### 4.2.4.4、建立测试类        测试类在src/test/java中建立,下面测试类中注释掉的部分是不使用Spring时,一般情况下的一种测试方法;如果使用了Spring那么就可以使用注解的方式来引入配置文件和类,然后再将service接口对象注入,就可以进行测试了。        如果测试成功,表示Spring和Mybatis已经整合成功了。输出信息使用的是Log4j打印到控制台。 ~~~ package org.zsl.testmybatis; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.alibaba.fastjson.JSON; import com.cn.hnust.pojo.User; import com.cn.hnust.service.IUserService; @RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类 @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"}) public class TestMyBatis { private static Logger logger = Logger.getLogger(TestMyBatis.class); // private ApplicationContext ac = null; @Resource private IUserService userService = null; // @Before // public void before() { // ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // userService = (IUserService) ac.getBean("userService"); // } @Test public void test1() { User user = userService.getUserById(1); // System.out.println(user.getUserName()); // logger.info("值:"+user.getUserName()); logger.info(JSON.toJSONString(user)); } } ~~~ 测试结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9673dd1.jpg) 至此,完成Spring和mybatis这两大框架的整合,下面在继续进行SpringMVC的整合。 ### 4.3、整合SpringMVC          上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合。 #### 4.3.1、配置spring-mvc.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:p="http://www.springframework.org/schema/p" 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-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.cn.hnust.controller" /> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 --> </list> </property> </bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> </beans> ~~~ #### 4.3.2、配置web.xml文件          这里面对spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。配置一样有详细注释,不多解释了。 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_3_0.xsd" version="3.0"> <display-name>Archetype Created Web Application</display-name> <!-- Spring和mybatis的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止Spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC servlet --> <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app> ~~~ #### 4.3.3、测试         至此已经完成了SSM三大框架的整合了,接下来测试一下,如果成功了,那么恭喜你,如果失败了,继续调试吧,作为程序员就是不停的与BUG做斗争! #### 4.3.3.1、新建jsp页面 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e9693a58.jpg) showUser.jsp   此页面仅输出一下用户名,完成一个完整的简单流程。 ~~~ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>测试</title> </head> <body> ${user.userName} </body> </html> ~~~ #### 4.3.3.2、建立UserController类 UserController.java  控制器 ~~~ package com.cn.hnust.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.cn.hnust.pojo.User; import com.cn.hnust.service.IUserService; @Controller @RequestMapping("/user") public class UserController { @Resource private IUserService userService; @RequestMapping("/showUser") public String toIndex(HttpServletRequest request,Model model){ int userId = Integer.parseInt(request.getParameter("id")); User user = this.userService.getUserById(userId); model.addAttribute("user", user); return "showUser"; } } ~~~ #### 4.3.3.3、部署项目 输入地址:localhost:8080/项目名称/user/showUser?id=1 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-01_56d50e96afea1.jpg) 至此,SSM三大框架的整合就完成了,在此基础上可再添加其他功能。 源码下载地址:[http://download.csdn.net/detail/u012909091/7658611](http://download.csdn.net/detail/u012909091/7658611)  (转载注明出处:[http://blog.csdn.net/zhshulin](http://blog.csdn.net/zhshulin))
';

maven项目使用spring报java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListe

最后更新于:2022-04-01 09:46:01

1.Add maven dependencies   Right click the web project “properties” -------> click the “Deployment Assembly” ----> Click add button 2.Choose Java Build Path Entires ---> click Next 3.Choose Maven Dependencies------>  Finish 亲测可行,发给需要的朋友
';

使用Maven管理Spring

最后更新于:2022-04-01 09:45:59

### 1\. 概述 本教程向您展示如何通过 Maven 管理 Spring 的依赖关系.最新的Spring版本可以在 [Maven Central仓库](http://search.maven.org/#search|ga|1|g%3A%22org.springframework.security%22) 中找到. 也可以访问  [mvnrepository:org.springframework](http://www.mvnrepository.com/artifact/org.springframework). ### 2\. 使用Maven管理基本的Spring依赖关系  Spring被设计为可高度模块化的 —— 使用Spring中的一部分,不应该也不需要引用另一个不相关的部分. 例如, 使用基本的Spring Context可以不使用 Persistence或MVC相关的Spring库. 让我们从一个非常简单的Maven设置开始,这里只使用 spring-context 依赖 : ~~~ <properties> <org.springframework.version>3.2.8.RELEASE</org.springframework.version> <!-- <org.springframework.version>4.0.2.RELEASE</org.springframework.version> --> </properties> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework.version}</version> <scope>runtime</scope> </dependency> ~~~ spring-context 包定义了Spring注入(Injection)容器,并依赖很少的Spring包: spring-core, spring-expression, spring-aop 和 spring-beans. 通过启用支持一些 Spring的核心技术增强了Spring容器: [Spring表达式语言 (SpEL)](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/expressions.html), [面向切面编程](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-introduction) 支持以及 [JavaBeans机制](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-definition). 注意,我们将spring-context依赖的范围指定为 runtime scope —— 这将确保在编译时没有任何依赖Spring特定api的部分. 对于一些底层开发的情况,可以将 runtime scope 从选定的Spring依赖项中移除(Maven 默认是compile),但对于简单的项目来说,并不需要在编码时对Spring 的整个框架进行调用. 还要注意,从Spring 3.2开始, 不需要定义CGLIB 依赖关系(现在升级到了CGLIB3.0)—— 它已经被重新打包(现在所有 net.sf.cglib 包变成了 org.springframework.cglib包)并直接集成在 spring-core 这个 JAR包中(详情请参考 [JIRA计划文档](https://jira.springsource.org/browse/SPR-9669)). ### 3\. Spring Persistence与Maven 现在让我们看看 Spring持久化依赖项 —— 主要是 spring-orm : ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework.version}</version> </dependency> ~~~ 它提供了Hibernate和JPA支持,如 HibernateTemplate 和 JpaTemplate —— 以及持久性相关的一些依赖关系: spring-jdbc 和 spring-tx. JDBC Data Access库定义了 [Spring JDBC支持](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/jdbc.html) 以及 JdbcTemplate, 而 spring-tx 代表了非常灵活的 [事务管理的抽象](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/transaction.html)(Transaction Management Abstraction). ###4\. Spring MVC与Maven 要使用Spring Web和Servlet支持,需要在pom中添加两个依赖项, 当然,也需要上面所说的核心依赖: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework.version}</version> </dependency> ~~~ spring-web 依赖包含Servlet和Portlet环境中常用的web特定工具,而 spring-webmvc 对Servlet环境提供了MVC支持. 因为 spring-webmvc 将 spring-web 作为一个依赖,所以在使用 spring-webmvc时不需要显式地定义 spring-web. ### 5\. Spring Security与Maven 关于 Security Maven依赖的深入讨论请参考 [Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理](http://blog.csdn.net/renfufei/article/details/35787159). ### 6\. Spring Test与Maven Spring Test框架可以通过以下依赖引入到项目中: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> ~~~ 从Spring 3.2开始,Spring MVC Test项目 作为一个独立的项目[在github上提供下载](https://github.com/SpringSource/spring-test-mvc) ,并且已被列入 core Test框架,只需要依赖 spring-test 就够了. 注意,那些仍然依赖Spring 3.1及以下版本的较老的项目,独立的旧的Maven依赖[仍然存在并可继续使用](https://github.com/SpringSource/spring-test-mvc#readme),几乎是一样的结果. 但不是在Maven Central仓库中,所以使用他们需要添加一个自定义仓库到项目的pom中. ### 7\. 使用里程碑版本(Milestones) Spring的release版本托管在Maven中央仓库中. 但是,如果一个项目需要使用里程碑版本,那么需要在pom中添加Spring自己的Maven库: ~~~ <repositories> <repository> <id>repository.springframework.maven.milestone</id> <name>Spring Framework Maven Milestone Repository</name> <url>http://repo.spring.io/milestone/</url> </repository> </repositories> ~~~ 添加这个仓库以后,项目就可以定义如下的依赖关系: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.0.RC2</version> </dependency> ~~~ ### 8\. 使用Snapshots(快照) 和milestons版本一样, Spring的快照版也托管在自己的仓库中: ~~~ <repositories> <repository> <id>repository.springframework.maven.snapshot</id> <name>Spring Framework Maven Snapshot Repository</name> <url>http://repo.spring.io/snapshot/</url> </repository> </repositories> ~~~ 只要在pom中启用了 SNAPSHOT 仓库,就可以引用以下的依赖关系: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.3.0.BUILD-SNAPSHOT</version> </dependency> ~~~ 当然, 4.x 也是一样的: ~~~ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.3.BUILD-SNAPSHOT</version> </dependency> ~~~ ### 9\. 总结 本文讨论了使用Maven管理 Spring的实际情况. 主要介绍的是Maven依赖,还有其他一些知识点. 这应该是在项目中使用Spring的一篇很好的入门文章.
';

配置Maven并新建项目遇到的问题

最后更新于:2022-04-01 09:45:57

配置Maven的方法:[http://www.iteye.com/topic/1127097](http://www.iteye.com/topic/1127097) 遇到的问题:新建Maven项目后报错:Could not get the value for parameter encoding for plugin execution default- resources ### 解决方法: #### 解决: #### 问题: Could not get the value for parameter encoding for plugin execution default-resources Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to collect dependencies for org.apache.maven.plugins:maven……. ### 解决方法: 1.Close Eclipse. 2.Navigate to user home directory. (For example: “C:\Users\YourUserName.m2”) 3.Delete the “repository” folder. 4.Re-open Eclipse. 5.Click on the Maven project that has an issue and go to “Project” –> “Clean”. 6.Right-click on the project and go to “Maven” –> “Update Project…”. 7.Close Eclipse. 8.Open Eclipse. 9.Click on the project folder in the “Project Explorer” window (usually on the left). 10.Hit the “F5” key a few times to Refresh your project. Done! 另外遇到问题:jsp页面报错:The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path 解决方法:项目右键—>build path—> configure build path —>librarys—>Add Library—>Server Runtime —>Apache Tomcat v7.0—>finish
';

前言

最后更新于:2022-04-01 09:45:54

> 原文出处:[SSM框架笔记](http://blog.csdn.net/column/details/lunaticssm.html) 作者:[tryitboy](http://blog.csdn.net/tryitboy) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # SSM框架笔记 > Spring+SpringMVC+MyBatis 框架笔记 结合Maven
';