intellij 配制 maven spring mvc
用intellij工具创建基于maven构建的spring mvc工程。基于spring4.2.0只构建基于注解的mvc工程。
一,主要环境
- intellij(14.1.4)
- maven(3.3.3)
- spring(4.2.0)
- jdk(1.7.0)
二,安装maven
下载mavne并安装
配制环境变量,查看maven版本。
配制intellij
三,intellij新建工程
创建一个基于maven的空webApp
![]()
![]()
![]()
四,配制springmvc依懒
更多的依懒可以在maven仓库里面进行查询
新建java sources文件夹
如上图创建一个包名com.smvc 这个包名将在后面配制spring.xml文件中用到
在上图中添加如下代码
<!--spring mvc 核心包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.8.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--hibernate支持-->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
<!--mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<!--json数据传输-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.2</version>
</dependency>
五,配制web.xml
包含一个中文乱码的过滤器,和基本的Springmvc配制
<!--乱码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springwebxml/*-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>test.jsp</welcome-file>
</welcome-file-list>
如上图web.xml配制中spring的配制文件未找到。下面将解决之。
五,创建spring 配制文件 *-servlet.xml
如果步骤四,里面配制的是加载springwebxml文件夹下的*-servlet.xml
所以需要在WEB-INF文件夹下新建一个springwebxml的文件夹
然后在springwebxml文件下新建chapter2-servlet.xml和db-servlet.xml
输入文件名chapter2-servlet即可创建文件
<!--指明 controller 所在包,并扫描其中的注解-->
<context:component-scan base-package="com.smvc"/>
<!-- 静态资源(js、image等)的访问 -->
<mvc:default-servlet-handler/>
<!-- 开启注解 -->
<mvc:annotation-driven/>
<!--视图解析器的配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<!--<ref bean="mappingJacksonHttpMessageConverter"/>-->
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
如上图上拷入上段代码后会报错,光标定位到错误行,直接art+enter引入相应的资源即可。同时把 base-package 改为“com.smvc”
五,创建数据库配制文件文件 *-servlet.xml
在db-servlet.xml中导入以下代码
<!-- 获取配置文件 -->
<bean id="config"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db-config.properties">
</property>
</bean>
<!-- 获取数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${db.dirverClass}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
</bean>
<!-- JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
如上图在db-config.properties文件中输入以下代码
db.url= jdbc:mysql://localhost:3306/jms?useUnicode=true&characterEncoding=UTF-8
db.username=root
db.password=123456
db.dirverClass= com.mysql.jdbc.Driver
六,新建JSP文件
如上图我们在chapter2-servlet.xml中已经配制了返回视图解析器的文件目录。所以我们创建一个jsp目录,并在下面创建jsp文件。
新建一些jsp文件,主要是返回视图时用。
如上图创建一个测试用的jsp文件,主要是发起jquery的json请求。代码如下
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.9.1.js" charset="utf-8"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js" charset="utf-8"></script>
<script>
var cfg = {
type: 'POST',
data: JSON.stringify({username: 'tim.易', password: 'password'}),
dataType: 'json',
contentType: 'application/json;charset=UTF-8',
async:false,
success: function (result) {
alert(JSON.stringify(result));
},
error: function (data) {
alert("error")
}
};
function doTestJson() {
cfg.url = "testJquery.spring";
// alert(cfg.data);
$.ajax(cfg);
}
function userinfo(username, password) {
this.username = username;
this.password = password;
}
function sendAjax1() {
var userinfoRef = new userinfo('中国', '中国人');
var jsonStringRef = JSON.stringify(userinfoRef);
alert(jsonStringRef);
$.ajax({
type: "POST",
data: jsonStringRef,
url: "getJSON1.spring?t=" + new Date().getTime(),
dataType: 'json',
enctype: "application/x-www-form-urlencoded",
contentType: 'application/json;charset=UTF-8'
});
}
function sendAjax2() {
var myArray = new Array();
myArray[0] = "中国1";
myArray[1] = "中国2";
myArray[2] = "中国3";
myArray[3] = "中国4";
var jsonString = JSON.stringify(myArray);
$.ajax({
type: "POST",
data: jsonString,
url: "getJSON2.spring?t=" + new Date().getTime(),
dataType: 'json',
enctype: "application/x-www-form-urlencoded",
contentType: 'application/json;charset=UTF-8'
});
}
function sendAjax3() {
var myArray = new Array();
myArray[0] = new userinfo('中国1', '中国人1');
myArray[1] = new userinfo('中国2', '中国人2');
myArray[2] = new userinfo('中国3', '中国人3');
myArray[3] = new userinfo('中国4', '中国人4');
var jsonString = JSON.stringify(myArray);
$.ajax({
type: "POST",
data: jsonString,
url: "getJSON3.spring?t=" + new Date().getTime(),
dataType: 'json',
enctype: "application/x-www-form-urlencoded",
contentType: 'application/json;charset=UTF-8'
});
}
function sendAjax4() {
var jsonObject = {
"username": "accp",
"work": [{
"address": "address1"
}, {
"address": "address2"
}],
"school": {
"name": "tc",
"address": "pjy"
}
}
var jsonString = JSON.stringify(jsonObject);
$.ajax({
type: "POST",
data: jsonString,
url: "getJSON4.spring?t=" + new Date().getTime(),
dataType: 'json',
enctype: "application/x-www-form-urlencoded",
contentType: 'application/json;charset=UTF-8'
});
}
function sendAjax5() {
cfg.url = "dbquery";
// alert(cfg.data);
$.ajax(cfg);
}
function sendAjax6() {
cfg.url = "dbinsert";
cfg.data=JSON.stringify({userName: 'tim.易111', userAge: 13});
// alert(cfg.data);
$.ajax(cfg);
}
</script>
</head>
<body>
<%=request.getContextPath()+"/js"%>
${pageContext.request.contextPath}+"/jss"
<div id="aaa"></div>
<input type="button" onclick="doTestJson()" value="jquery"/>
<br/>
<input type="button" onclick="sendAjax1()" value="sendAjax1"/>
<br/>
<input type="button" onclick="sendAjax2()" value="sendAjax2">
<br/>
<input type="button" onclick="sendAjax3()" value="sendAjax3">
<br/>
<input type="button" onclick="sendAjax4()" value="sendAjax4">
<br/>
<input type="button" onclick="sendAjax5()" value="数据库查询">
<input type="button" onclick="sendAjax6()" value="数据库更新">
<br/>
</body>
</html>
七,新建POJO
代码如下
public class UserInfo {
public UserInfo(){
}
public UserInfo(String username,String password){
this.username=username;
this.password=password;
}
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
代码如下
public class UserPO {
private Integer userId;
private String userName;
private Integer userAge;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
代码如下
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// 此方法把USEMBO表对应的字段查询出来依次放入userPO中
public Collection<UserPO> doquery() {
String sql = "SELECT T.USERID,T.USERNAME,T.USERAGE FROM userInfo T";
return jdbcTemplate.query(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int num) throws SQLException {
UserPO user = new UserPO();
user.setUserId(rs.getInt("USERID"));
user.setUserName(rs.getString("USERNAME"));
user.setUserAge(rs.getInt("USERAGE"));
return user;
}
});
}
public Collection<UserPO> insert(UserPO userPO){
String sql = "insert into userInfo (USERNAME,USERAGE) values ('"+userPO.getUserName()+"',"+userPO.getUserAge()+")";
jdbcTemplate.update(sql);
return doquery();
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
八,新建Controller
代码如下
@Controller
public class Test {
@Autowired
private HttpServletRequest request;
@RequestMapping(value="/testJquery", method = RequestMethod.POST)
@ResponseBody
public UserInfo testJquery(@RequestBody UserInfo userinfo){
System.out.println("------getJSON1---start----"+request.getContentType());
System.out.println(userinfo.getUsername());
System.out.println(userinfo.getPassword());
try {
System.out.println(URLDecoder.decode(userinfo.getUsername(),"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
userinfo.setUsername(userinfo.getUsername()+"-->服务器");
System.out.println("------getJSON1---end----");
return userinfo;
}
@RequestMapping(value="/getJSON1")
@ResponseBody
public void getJSON1(@RequestBody UserInfo userinfo){
System.out.println("------getJSON1---start----");
System.out.println(userinfo.getUsername());
System.out.println(userinfo.getPassword());
System.out.println("------getJSON1---end----");
}
@RequestMapping(value="/getJSON2")
public void getJSON2(@RequestBody ArrayList<String> list){
System.out.println("------getJSON2---start----");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("------getJSON2---end----");
}
@RequestMapping(value="/getJSON3")
public void getJSON3(@RequestBody List<Map> list){
System.out.println("------getJSON3---start----");
for (int i = 0; i < list.size(); i++) {
Map map=list.get(i);
System.out.println(map.get("username")+" "+map.get("password"));
}
System.out.println("------getJSON3---end----");
}
@RequestMapping(value="/getJSON4")
public void getJSON4(@RequestBody Map map){
System.out.println("------getJSON4---start----");
System.out.println(map.get("username"));
List<Map> workList=(List)map.get("work");
for (int i = 0; i < workList.size(); i++) {
Map eachAddressMap=workList.get(i);
System.out.println("address="+eachAddressMap.get("address"));
}
Map schoolMap=(Map)map.get("school");
System.out.println(schoolMap.get("name"));
System.out.println(schoolMap.get("address"));
System.out.println("------getJSON4---end----");
}
}
九,使用Springmvc dao操作数据库
代码如下
@Controller
public class DbTest {
@Autowired
UserDao dao;
/**
* 数据库测试,查询用户表数据
* @param userinfo
* @return
*/
@RequestMapping(value="/dbquery", method = RequestMethod.POST)
@ResponseBody
public List<UserPO> testDb(@RequestBody UserInfo userinfo){
System.out.println("------getJSON1---start----");
Collection<UserPO> list = dao.doquery();
List<UserPO> users = new ArrayList<UserPO>();
UserPO user = null;
for (UserPO userPO : list) {
user = new UserPO();
user.setUserId(userPO.getUserId());
user.setUserName(userPO.getUserName());
System.out.println(user.getUserName());
user.setUserAge(userPO.getUserAge());
users.add(user);
}
System.out.println("------getJSON1---end----");
return users;
}
/**
* 数据库测试,写入数据到用户表中,并查询返回结果
* @param userPO1
* @return
*/
@RequestMapping(value="/dbinsert", method = RequestMethod.POST)
@ResponseBody
private List<UserPO> insert(@RequestBody UserPO userPO1){
Collection<UserPO> list = dao.insert(userPO1);
List<UserPO> users = new ArrayList<UserPO>();
UserPO user = null;
for (UserPO userPO : list) {
user = new UserPO();
user.setUserId(userPO.getUserId());
user.setUserName(userPO.getUserName());
System.out.println(user.getUserName());
user.setUserAge(userPO.getUserAge());
users.add(user);
}
return users;
}
}
十新建tomcat发布APP并访问