springmvc框架的搭建
目录
用 [TOC]来生成目录:
springmvc框架的搭建
目录 目录缩略图
需要的jar包webxml的配置mybatis-configxml文件的编写spring-mvcxml文件的编写spring-commenxml文件的编写 log4jproperties的编写indexjsp的编写controller的编写userjava的编写运行效果图谢谢各位
目录缩略图
项目结构图
需要的jar包
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_1
</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation
</param-name>
<param-value>classpath*:config/spring-*.xml
</param-value>
</context-param>
<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*:config/spring-mvc.xml
</param-value>
</init-param>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC
</servlet-name>
<url-pattern>/
</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>web/index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
mybatis-config.xml文件的编写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.test.cn.entity"/>
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
<property name="offsetAsPageNum" value="true"/>
<property name="rowBoundsWithCount" value="true"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="true"/>
<property name="supportMethodsArguments" value="true"/>
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
<mappers>
<package name="com.test.cn.mapper"/>
</mappers>
</configuration>
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: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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:component-scan base-package="com.test.cn" />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/web/" />
<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="10485760" />
</bean>
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload
</prop>
</props>
</property>
</bean>
</beans>
spring-commen.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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="你的数据库url"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:config/mybatis-config.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.cn.mapper"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
log4j.properties的编写
### set log levels ###
log4j
.rootLogger = info , Console , D
#Console
log4j
.appender.Console=org
.apache.log4j
.ConsoleAppender
log4j
.appender.Console.layout=org
.apache.log4j
.PatternLayout
log4j
.appender.Console.layout.ConversionPattern=%d [%t] %-
5p [%c] - %m%n
log4j
.logger.java.sql.ResultSet=INFO
log4j
.logger.org.apache=INFO
log4j
.logger.java.sql.Connection=INFO
log4j
.logger.java.sql.Statement=INFO
log4j
.logger.java.sql.PreparedStatement=INFO
#output2file
log4j
.appender.D = org
.apache.log4j
.DailyRollingFileAppender
log4j
.appender.D.File = D:/logs/log
.log
log4j
.appender.D.Append = true
log4j
.appender.D.Threshold = INFO
## 输出info级别以上的日志
log4j
.appender.D.layout = org
.apache.log4j
.PatternLayout
log4j
.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
index.jsp的编写
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Index
</title>
</head>
<script
src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
<%-- <script src="<%=basePath%>js/jquery.flexslider-min.js" type="text/javascript">
</script>
<script src="<%=basePath%>js/jquery.waypoints.min.js" type="text/javascript"></script>
<script src="<%=basePath%>js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="<%=basePath%>js/jquery.easing.1.3.js" type="text/javascript"></script>
<script src="<%=basePath%>js/jquery.SuperSlide.2.1.1.js" type="text/javascript"></script> --%>
<body>
<form class="aaa" action="<%=request.getContextPath()%>/user/add" method="POST"
enctype="multipart/form-data">
username:
<input type="text" name="username" /><br />
nickname:
<input type="text" name="nickname" /><br />
password:
<input type="password" name="password" /><br />
yourmail:
<input type="text" name="email" /><br />
yourfile:
<input type="file" name="myfiles" /><br />
yourfile:
<input type="file" name="myfiles" /><br />
yourfile:
<input type="file" name="myfiles" /> <br />
<input type="submit" value="添加新用户" />
</form>
<input class="send_callback" type="button" value="发送ajax并返回" />
</body>
<script type="text/javascript">
$('.send_callback').click(function(){
alert(123456);
$.post('<%=basePath%>user/ajaxTest',
{
name : "张三",
url : "www.baidu.com"
}, function(data,status) {
alert("数据: \n" + data + "\n状态: " + status);
});
var a=[];
var data1={username:"test",nickname:"123456",email:"123@qq.com",password:"gz"};
var data2={username:"test1",nickname:"67890",email:"123@qq.com1",password:"gz1"};
a.push(data1);
a.push(data2);
$.ajax({
async:false,
type:"POST",
url:'<%=basePath%>user/ajaxTest1',
dataType:"json",
contentType:"application/json",
data:JSON.stringify(a),
success:function(data){
alert("数据: \n" + data);
}
});
});
</script>
</html>
controller的编写
package
com.test.cn.controller
import java
.io.File
import java
.io.IOException
import java
.util.ArrayList
import java
.util.HashMap
import java
.util.List
import java
.util.Map
import javax
.servlet.http.HttpServletRequest
import org
.apache.commons.io.FileUtils
import org
.springframework.http.HttpHeaders
import org
.springframework.http.HttpStatus
import org
.springframework.http.MediaType
import org
.springframework.http.ResponseEntity
import org
.springframework.stereotype.Controller
import org
.springframework.ui.Model
import org
.springframework.web.bind.annotation.RequestBody
import org
.springframework.web.bind.annotation.RequestMapping
import org
.springframework.web.bind.annotation.RequestMethod
import org
.springframework.web.bind.annotation.RequestParam
import org
.springframework.web.bind.annotation.ResponseBody
import org
.springframework.web.multipart.MultipartFile
import
com.test.cn.entity.User
@Controller
@RequestMapping(
"/user")
public class UserController {
private final static Map<String, User> users = new HashMap<String, User>()
// 模拟数据源,构造初始数据
public UserController() {
users
.put(
"张起灵", new User(
"张起灵",
"闷油瓶",
"02200059",
"menyouping@yeah.net"))
users
.put(
"李寻欢", new User(
"李寻欢",
"李探花",
"08866659",
"lixunhuan@gulong.cn"))
users
.put(
"拓拔野", new User(
"拓拔野",
"搜神记",
"05577759",
"tuobaye@manhuang.cc"))
users
.put(
"孙悟空", new User(
"孙悟空",
"美猴王",
"03311159",
"sunhouzi@xiyouji.zh"))
}
@RequestMapping(
"/list")
public String list(Model model) {
model
.addAttribute(
"users", users)
return
"list"
}
@RequestMapping(value =
"/add", method = RequestMethod
.GET)
public String addUser() {
return
"index"
}
@RequestMapping(value =
"/add", method = RequestMethod
.POST)
public String addUser(User user, @RequestParam MultipartFile[] myfiles,
HttpServletRequest request) throws IOException {
// 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解
// 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且还要指定@RequestParam注解
// 并且上传多个文件时,前台表单中的所有<input
// type=
"file"/>的name都应该是myfiles,否则参数里的myfiles无法获取到所有上传的文件
for (MultipartFile myfile : myfiles) {
if (myfile
.isEmpty()) {
System
.out.println(
"文件未上传")
} else {
System
.out.println(
"文件长度: " + myfile
.getSize())
System
.out.println(
"文件类型: " + myfile
.getContentType())
System
.out.println(
"文件名称: " + myfile
.getName())
System
.out.println(
"文件原名: " + myfile
.getOriginalFilename())
System
.out.println(
"========================================")
// 如果用的是Tomcat服务器,则文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\WEB-INF\\upload\\文件夹中
String realPath = request
.getSession()
.getServletContext()
.getRealPath(
"/WEB-INF/upload")
// 这里不必处理IO流关闭的问题,因为FileUtils
.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
FileUtils
.copyInputStreamToFile(myfile
.getInputStream(),
new File(realPath, myfile
.getOriginalFilename()))
}
}
users
.put(user
.getUsername(), user)
return
"redirect:/user/list"
}
@RequestMapping(
"/download")
public ResponseEntity<byte[]> download(String filename, File file,
HttpServletRequest request) throws IOException {
// String filename =
"电子商务通讯录.xlsx"
// String realPath = request
.getSession()
.getServletContext()
//
.getRealPath(
"/WEB-INF/upload/电子商务通讯录.xlsx")
// File file = new File(realPath)
String dfilename = new String(filename
.getBytes(
"gb2312"),
"iso-8859-1")
HttpHeaders headers = new HttpHeaders()
headers
.setContentType(MediaType
.APPLICATION_OCTET_STREAM)
headers
.setContentDispositionFormData(
"attachment", dfilename)
ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(
FileUtils
.readFileToByteArray(file), headers,
HttpStatus
.CREATED)
return entity
}
@RequestMapping(value =
"ajaxTest")
@ResponseBody
public List<String> ajaxTest(String name, String url) {
System
.out.println(name +
"--" + url)
List<String> list = new ArrayList<String>()
list
.add(name)
list
.add(url)
return list
}
@RequestMapping(value =
"ajaxTest1")
@ResponseBody
public List<String> ajaxTest1(@RequestBody List<User> users) {
System
.out.println(
"后台数据---------------------------")
System
.out.println(users
.get(
0)
.getUsername()+
"--"+users
.get(
0)
.getPassword())
ArrayList<String> list = new ArrayList<String>()
for (User u : users) {
list
.add(u
.getUsername())
list
.add(u
.getPassword())
}
return list
}
}
user.java的编写
package com.test.cn.entity;
public class User {
private String username;
private String nickname;
private String password;
private String email;
public String
getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String
getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String
getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String
getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User() {
}
public User(String username, String nickname, String password, String email) {
this.username = username;
this.nickname = nickname;
this.password = password;
this.email = email;
}
}
运行效果图
谢谢各位!!!!!!!