前言

上一次复习搭建了SpringMVC+Mybatis,这次搭建一下SpringMVC,采用的是SpringJDBC,没有采用任何其他的ORM框架,SpringMVC提供了一整套的WEB框架,所以如果想搭建纯的SpringMVC的话,而且不必映入别的任何框架,SpringMVC都给我们提供了,下面试Spring + SpringMVC的详细搭建过程。

项目包含:数据库mysql(其实那个数据库都无所谓),连接池采用的是c3p0。

1、创建数据表

数据表很简单,user_info

2、搭建Maven项目

Maven项目搭建一笔带过(前面有介绍),其搭建后的webapp结构项目如下:

3、配置Maven的pom.xml文件

导入所需的spring,以及数据源,spring-mvc,json等依赖。

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>org.andy.springmvc</groupId><artifactId>springmvc_demo</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>springmvc_demo Maven Webapp</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.1.4.RELEASE</spring.version><jackson.version>2.5.0</jackson.version></properties><dependencies><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</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-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-web</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-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><!-- log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- mysql连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency><!-- c3p0数据源 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5-pre10</version></dependency><!-- json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0-alpha-1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 文件上传 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency></dependencies><build><finalName>springmvc_demo</finalName><plugins><!-- Run the JUnit unit tests in an isolated classloader --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.4.2</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.3</version><configuration><webXml>src/main/webapp/WEB-INF/web.xml</webXml></configuration></plugin><!-- generate java doc --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.9.1</version><configuration><javadocDirectory>target/javadoc</javadocDirectory><reportOutputDirectory>target/javadoc</reportOutputDirectory><charset>UTF-8</charset><encoding>UTF-8</encoding><docencoding>UTF-8</docencoding><show>private</show></configuration></plugin><!-- 部署至本机 --><plugin><groupId>org.codehaus.cargo</groupId><artifactId>cargo-maven2-plugin</artifactId><version>1.0</version><configuration><container><containerId>tomcat6x</containerId><home>D:\WebServer\apache-tomcat-6.0.39</home></container><configuration><type>existing</type><home>D:\WebServer\apache-tomcat-6.0.39</home></configuration></configuration></plugin></plugins></build>
</project>

4、搭建Spring

4.1、 创建配置文件,添加c3p0数据源配置信息

src/main/resources/applicationConfig.xml

#application all config#jdbc c3p0
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8
jdbc.username = root
jdbc.password = 12345

4.2、创建Spring配置文件

src/main/resources/applicationContext.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd"><!--引入配置属性文件 --><context:property-placeholder location="classpath*:/applicationConfig.properties" /><!--扫描org.andy.work下文件,自动注入dao,entity,service为bean --><context:component-scan base-package="org.andy.shop.dao.Impl,org.andy.shop.service.Impl" /><!-- c3p0数据源配置 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${jdbc.driver}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- 请求超时时间 --><property name="checkoutTimeout" value="30000" /><!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 --><property name="idleConnectionTestPeriod" value="30" /><!-- 连接数据库连接池最大空闲时间 --><property name="maxIdleTime" value="30" /><!-- 连接池初始化连接数 --><property name="initialPoolSize" value="5" /><property name="minPoolSize" value="5" /><property name="maxPoolSize" value="20" /><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 --><property name="acquireIncrement" value="5" /></bean><!-- spring jdbc --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" /></bean><bean id="namedParameterJdbcTemplate"class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"><constructor-arg ref="dataSource" /></bean><!-- 配置事务管理 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 声明式事务,事务拦截器 --><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionManager" /><!-- 配置事务属性 --><property name="transactionAttributes"><!--下面定义事务传播属性 --><props><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="del*">PROPAGATION_REQUIRED</prop><prop key="update">PROPAGATION_REQUIRED</prop><prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop><prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean><!-- Bean后处理器BeanNameAutoProxyCreator,根据List配置创建事务代理 --><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><!-- 下面是所有需要自动创建事务代理的bean --><property name="beanNames"><list><value>*Service</value></list></property><!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 --><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean></beans>

上面配置的详细功能已写出。

4.3、添加Log4j日志配置

src/main/resources/log4j.properties

### set log levels ###
log4j.rootLogger = INFO , C , D , E ### console ###
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n### log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ../logs/springmvc-mybatis-demo.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n### exception ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ../logs/springmvc-mybatis-demo_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

5、Entity,Dao,Service实现

创建如下包:

5.1、entity创建UserInfo实体

org.andy.shop.entity中添加

package org.andy.shop.entity;import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;import org.springframework.jdbc.core.RowMapper;/*** 实现数据表与字段的映射* * @author andy* */
public class UserInfo implements RowMapper<UserInfo>, Serializable {/*** */private static final long serialVersionUID = -8823504831198719837L;private Integer id;private String uname;private Integer unumber;private Date uRegisterTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname == null ? null : uname.trim();}public Integer getUnumber() {return unumber;}public void setUnumber(Integer unumber) {this.unumber = unumber;}public Date getuRegisterTime() {return uRegisterTime;}public void setuRegisterTime(Date uRegisterTime) {this.uRegisterTime = uRegisterTime;}@Overridepublic UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {UserInfo userInfo = new UserInfo();userInfo.setId(rs.getInt("id"));userInfo.setUname(rs.getString("uname"));userInfo.setUnumber(rs.getInt("unumber"));userInfo.setuRegisterTime(rs.getDate("uregister_time"));return userInfo;}}

实现RowMapper接口是为了方便SpringJDBC管理实体与数据库字段的映射。

5.2、实现Dao层

org.andy.shop.dao添加通用Dao接口

GenericDao.java:

package org.andy.shop.dao;import java.io.Serializable;
import java.util.List;/*** 创建时间:2015-1-30 上午10:11:59* * @author andy* @version 2.2* * Dao通用接口*/interface GenericDao<T, PK extends Serializable> {T getById(PK id);List<T> findAll();PK save(T entity);
}

添加UserInfoDao.java

package org.andy.shop.dao;import org.andy.shop.entity.UserInfo;/*** 创建时间:2015-1-30 上午11:22:37* * @author andy* @version 2.2* * UserInfoDao*/public interface UserInfoDao extends GenericDao<UserInfo, Integer> {}

在org.andy.shop.dao.Impl包中添加UserInfoDao的Dao实现类

UserInfoDaoImpl.java

package org.andy.shop.dao.Impl;import java.util.List;import org.andy.shop.dao.UserInfoDao;
import org.andy.shop.entity.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;/*** 创建时间:2015-1-30 上午11:25:30* * @author andy* @version 2.2* * UserInfoDao实现类*/
@Repository("userInfoDao")
public class UserInfoDaoImpl implements UserInfoDao {@Autowiredprivate JdbcTemplate jdbcTemplate;@Autowiredprivate NamedParameterJdbcTemplate namedParameterJdbcTemplate;@Overridepublic UserInfo getById(Integer id) {String sql = "SELECT * FROM user_info WHERE id = ?";UserInfo userInfo = jdbcTemplate.queryForObject(sql, new UserInfo(),new Object[] { id });return userInfo;}@Overridepublic List<UserInfo> findAll() {String sql = "SELECT * FROM user_info";List<UserInfo> userInfos = jdbcTemplate.query(sql, new UserInfo());return userInfos;}@Overridepublic Integer save(UserInfo entity) {String sql = "INSERT INTO user_info(uname, unumber, uregister_time) VALUES(:uname, :unumber, :uregister_time)";MapSqlParameterSource paramSource = new MapSqlParameterSource();paramSource.addValue("uname", entity.getUname());paramSource.addValue("unumber", entity.getUnumber());paramSource.addValue("uregister_time", entity.getuRegisterTime());int result = namedParameterJdbcTemplate.update(sql, paramSource);return result;}}

5.3、实现Service层

org.andy.shop.dao.service添加UserInfoService接口

UserInfoService.java

package org.andy.shop.service;import java.util.List;
import org.andy.shop.entity.UserInfo;/*** 创建时间:2015-1-30 上午11:31:34* * @author andy* @version 2.2* * UserInfoService 接口*/public interface UserInfoService {// 通过Id查询UserInfoUserInfo getById(Integer id);// 查询全部的UserInfoList<UserInfo> findAll();// 添加UserInfoInteger save(UserInfo userInfo);}

实现UserInfoService接口

package org.andy.shop.service.Impl;import java.util.List;import org.andy.shop.dao.UserInfoDao;
import org.andy.shop.entity.UserInfo;
import org.andy.shop.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 创建时间:2015-1-30 上午11:40:19* * @author andy* @version 2.2 实现接口*/@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {@Autowiredprivate UserInfoDao userInfoDao;@Overridepublic UserInfo getById(Integer id) {return userInfoDao.getById(id);}@Overridepublic List<UserInfo> findAll() {return userInfoDao.findAll();}@Overridepublic Integer save(UserInfo userInfo) {return userInfoDao.save(userInfo);}}

6、测试Spring搭建

单元测试Service中的方法,如果全部成功,Spring和数据连接池搭建完成。

package org.andy.shop.test.service;import java.util.Date;
import java.util.List;import org.andy.shop.entity.UserInfo;
import org.andy.shop.service.UserInfoService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.alibaba.fastjson.JSON;/*** 创建时间:2015-1-30 下午12:01:47* * @author andy* @version 2.2*/
// 引入Spring环境测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class TestUserInfoService {private static final Logger LOGGER = Logger.getLogger(TestUserInfoService.class);@Autowiredprivate UserInfoService userInfoService;@Testpublic void testGetById() {//测试查询对应的用户UserInfo userInfo = userInfoService.getById(1);LOGGER.info(JSON.toJSONStringWithDateFormat(userInfo,"yyyy-MM-dd HH:mm:ss"));}@Testpublic void testFindAll() {//测试查询全部用户List<UserInfo> userInfos = userInfoService.findAll();for (UserInfo userInfo : userInfos) {LOGGER.info(JSON.toJSONStringWithDateFormat(userInfo,"yyyy-MM-dd HH:mm:ss"));}}@Testpublic void testSave() {//测试保存用户数据UserInfo userInfo = new UserInfo();userInfo.setUname("xiaohonghong");userInfo.setUnumber(5);userInfo.setuRegisterTime(new Date());int result = userInfoService.save(userInfo);LOGGER.info("result = " + result);}
}

7、搭建SpringMVC

src/main/resources/springMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" 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-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"><!-- 自动扫描controller包下的所有类,如果@Controller注入为bean --><context:component-scan base-package="org.andy.shop.controller" /><!-- 以下为SpringMVC配置 --><mvc:annotation-driven><!-- 返回json数据,@response使用 --><mvc:message-converters register-defaults="true"><beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean></mvc:message-converters></mvc:annotation-driven><!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/views" /><property name="suffix" value=".jsp" /></bean><!-- 配置多文件上传 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding"><value>UTF-8</value></property><property name="maxUploadSize"><!-- 上传文件大小限制为 --><value>32505856</value></property><property name="maxInMemorySize"><value>4096</value></property></bean></beans>

8、控制层Controller

添加UserInfoController控制层

package org.andy.shop.controller;import java.util.List;import org.andy.shop.entity.UserInfo;
import org.andy.shop.service.UserInfoService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** 创建时间:2015-2-1 下午9:40:03* * @author andy* @version 2.2* * userInfo的控制层*/
@Controller
@RequestMapping("/user")
public class UserInfoController {private static final Logger LOGGER = Logger.getLogger(UserInfoController.class);@Autowiredprivate UserInfoService userInfoService;@RequestMapping("/showInfo/{userId}")public String showUserInfo(ModelMap modelMap, @PathVariable int userId) {LOGGER.info("查看用户:" + userId);UserInfo userInfo = userInfoService.getById(1);modelMap.addAttribute("userInfo", userInfo);return "/user/showInfo";}@RequestMapping("/showInfos")public @ResponseBody List<UserInfo> showUserInfos() {LOGGER.info("json返回全部用户的信息");List<UserInfo> userInfos = userInfoService.findAll();return userInfos;}
}

9、视图层

在webapp/WEB-INF/views/user中创建showInfo.jsp文件。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<title>userInfo</title>
</head>
<body>姓名: ${userInfo.uname} <br/>ajax显示全部用户信息:<div id="show_all_user"></div>
</body>
<script type="text/javascript">$.ajax({type : "get",url : "user/showInfos.htmls",dataType : "json",success : function(data) {$(data).each(function(i, user) {var p = "<p>username:" + user.uname + "    unumber:"+ user.unumber + "    uregister:"+ user.uRegisterTime + "</p>";$("#show_all_user").append(p);});},async : true});
</script>
</html>

10、配置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>springmvc_demo</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/applicationContext.xml</param-value></context-param><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 监听servletContext,启动contextConfigLocation中的spring配置信息 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 防止spring内存溢出监听器 --><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><servlet><description>spring mvc servlet</description><servlet-name>rest</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!-- 此处配置的是SpringMVC的配置文件 --><param-value>classpath*:/springMVC.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>rest</servlet-name><url-pattern>*.htmls</url-pattern></servlet-mapping><!-- 配置session超时时间,单位分钟 --><session-config><session-timeout>30</session-timeout></session-config><welcome-file-list><welcome-file>/index.jsp</welcome-file></welcome-file-list>
</web-app>

11、测试项目

maven编译打包部署到tomcat,测试:http://localhost:8080/springmvc_demo/user/showInfo/1.htmls分别测试添加的两个请求地址。

至此,SpringMVC搭建完毕。

博客来源:http://blog.csdn.net/fengshizty

项目源码: http://download.csdn.net/detail/fengshizty/8416837

Maven搭建SpringMVC项目详解相关推荐

  1. 用Eclipse 搭建一个Maven Spring SpringMVC 项目

    1: 先创建一个maven web  项目: 可以参照之前的文章:  用Maven 创建一个 简单的 JavaWeb 项目 创建好之后的目录是这样的; 2: 先配置maven  修改pom.xml & ...

  2. Maven(一):安装与环境配置、使用Maven搭建web项目

    相关阅读: Maven(一):安装与环境配置.使用Maven搭建web项目 Maven(二):常用命令.依赖管理 Maven(三):将web项目的war包热部署到远程Tomcat服务器 Maven(四 ...

  3. idea 执行java maven,IDEA的run maven方式启动步骤详解

    安装jetty插件 1. 找到Plugins,查找jetty插件,安装"IDEA Jetty Runner",安装好后重启IDEA 安装插件:Maven Helper 方法同Jet ...

  4. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  5. 从无到有整合SpringMVC-MyBatis项目(2):搭建SpringMVC项目

    前言:本次搭建SpringMVC项目,建立在已完成从无到有整合SpringMVC-MyBatis项目(1):搭建JavaWeb项目 的基础上,本篇的重点在于如何将SpringMVC框架引入到普通的Ja ...

  6. pycharm+python3.7+pyqt配置_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  7. 零配置简单搭建SpringMVC 项目

    SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...

  8. pycharm python3.7环境_Python3+Pycharm+PyQt5环境搭建步骤图文详解

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载到安装包后打开,如果想安装到默认路径(C盘)的话一直点下一步就可以了 ...

  9. 【JavaWeb篇】快速上手Tomcat|实战项目详解

    作者主页:橙子! 主页 系列专栏:JavaWeb基础教程系列 精彩回顾:HTTP协议详解 文章目的:Web服务器TomCat的使用以及配置问题 文章目录 前言 1.Web服务器 2.Tomcat简介 ...

  10. openstack ice自定义调度算法项目详解(horizon、novaclient、api、scheduler、db、自定义数据库)

    原文转自:openstack ice自定义调度算法项目详解(horizon.novaclient.api.scheduler.db.自定义数据库) 第一部分:页面层即horizon与novaclien ...

最新文章

  1. 独家 | 虚假疫苗网站如何获取你的个人信息
  2. JS URL 编码 PHP 解码{%u5F00%u53D1}
  3. UIAlertController 简单修改title以及按钮的字体颜色
  4. 计算机专业毕业论文的参考文献,计算机专业毕业专著类参考文献 计算机专业毕业论文参考文献哪里找...
  5. 产品经理经验谈50篇(五):如何做好一份通透的竞品调研
  6. 航空购票系统源码java_航空售票系统 - WEB源码|JSP源码/Java|源代码 - 源码中国
  7. 音视频技术开发周刊 | 179
  8. 大数据集群部署时ssh的公钥和似钥作用汇总
  9. 重磅!华为发布2025年十大趋势
  10. netty 校验_Netty SSL双向验证
  11. python type help copyright_python学习 第二天
  12. 网络拓扑图画图工具_一款功能强大的免费在线作图工具
  13. springboot controller 分页查询_Spring Boot实战分页查询附近的人: Redis+GeoHash+Lua
  14. .Net Discovery 系列之三--深入理解.Net垃圾收集机制(上)
  15. DHCP服务器控制企业成本
  16. 【数据结构笔记07】不带头结点链表实现多项式相加、相乘
  17. 时间序列分析工具箱——timetk
  18. 脚本重启项目-定时启动
  19. 现代通信技术之交换技术基础
  20. Revit二次开发-设置视图范围无限制

热门文章

  1. 阿里云云计算 48 云安全中心
  2. 深度学习图解 - 具备高中数学知识就能从入门到精通的神书 Andrew W· Trask
  3. this指针常识性问题
  4. 《自然语言处理技术在中文全文检索中的应用》笔记
  5. 机器学习,斯坦福公开课
  6. 最小二乘的概率解释 广义线性模型解释
  7. 最新回归算法理解、实现及应用(1)线性回归
  8. 扩展linux swap分区大小,扩展Linux系统swap分区的大小
  9. mysql 存储引擎文件夹_4种常用MySQL存储引擎
  10. [你必须知道的异步编程]——基于任务的异步模式