1.springMVC的基本概念
1.1三层架构
1.2MVC模型
2.springMVC的入门
2.1springmvc是什么?
是由java实现MVC设计模型的请求驱动类型的轻量级的web框架
2.2springMVC的优势
- 1.清晰的角色划分
- 前端控制器
- 请求到处理映射
- 处理器适配器
- 视图解析器
- 处理器或页面控制器
- 验证器
- 命令对象
- 表单对象
- 2.分工明确,扩展点相当灵活
- 3.和spring框架无缝集成
- 4.命令对象就是一个pojo,无需继承框架特定api,可以使用命令对象直接作为业务对象
- 5.强大的jsp标签库,使jsp编写更加容易
- 5.restful编程风格的支持
2.3springmvc和struts2的优略分析
- 共同点:
- 表现层框架,基于mvc设计模型编写
- 底层离不开servletAPI
- 处理请求的机制都是一个核心控制器
- 区别:
- springmvc的入口是servlet,struts的入口是filter
- springMVc是基于方法设计的(单例的),而struts2是基于类设计的(多利对象)
- springmvc的代码更加简洁,处理ajax的请求更加方便
- Struts2的OGNL表达式使页面的开发效率比springmvc高,但执行效率没有JSTL高
2.4springmvc的入门
需求:
2.4.1启动服务器,加载一些配置文件
- 创建DispatcherServlet对象
- springmvcxml文件加载
- 创建表现层类的对象(单例)
2.4.2发送http请求,后台处理请求
- 创建具有超链接的页面
配置了
<mvc:annotstion-driven/>
注解之后就相当于配置了处理器适配器和处理器映射器组件
springmvc的三大组件:
- 处理器映射器
- 处理器适配器
- 视图解析器
2.5requestMapping注解
作用:用于建立请求url和处理请求方法之间的对应关系
属性:
- value:映射路径
- path:映射路径
- method:方法 的请求方式
- params:用于指定限制请求参数的条件,指定参数名或者值必须相等
- header:用于指定限制请求消息头的条件
2.6配置步骤:
第一步:添加坐标
<!--配置版本锁定-->
<properties>
<spring-version>5.0.2.RELEASE</spring-version>
</properties>
<!--配置与spring和springmvc相关的坐标-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</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.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5-20081211</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
第二步:添加index和success的jsp页面
第三步:在web.xml中配置前端控制器
<!--配置前端控制器,也就是servlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 发送任何请求都会经过前端控制器-->
<url-pattern>/</url-pattern>
</servlet-mapping>
第四步:创建controller类
@Controller
public class HelloController {
@RequestMapping(path = "/hello")
public String sayHello() {
System.out.println("入门成功!");
//如果要默认返回success页面,还需要对视图解析器进行配置,视图解析器在springmvc自己的配置文件中
return "success";
}
}
第五步:继续配置web.xml中的前端控制器中的内容(向里面加)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置前端控制器,也就是servlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化参数-->
<init-param>
<!-- 加载springmvc的配置文件类路径-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--配置文件加载时就创建前端控制器对象-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 表示所有的方法都拦截,都经过前端控制器-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
第六步:创建springmvc的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.配置要扫描的包-->
<context:component-scan base-package="com.itblp"></context:component-scan>
<!-- 2.配置视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--文件所在目录-->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!--文件的后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--springmvc的三大组件为:处理器映射器,处理器适配器,视图解析器-->
<!-- 开启springmvc注解的扫描:开启整个扫描就相当于已经配置了处理器映射器,处理器适配器-->
<mvc:annotation-driven/>
</beans>
第七步:编写index.jsp中的内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>springmvc</h1>
<a href="hello">入门咯</a>
</body>
</html>
第八步:配置tomcat
第九步:启动
3.请求参数的绑定(重要)
3.1参数绑定
3.1.1绑定url
*只要方法参数列表中的参数与请求参数的变量名是相同的,mvc框架就可以实现自动绑定
username=hehe&password=123
MVC框架: submit(String username,String password)
只要方法参数列表中的参数与请求参数的变量名是相同的,mvc框架就可以实现自动绑定
第一步:创建param.jsp
<a href="login/logins?username=123&password=123"></a>
第二步:创建ParamController
//请求参数绑定
@Controller
@RequestMapping("/login")
public class ParamController{
@RequestMapping("/logins")
public String login(String username,String password){
System.out.println(username+"---->"+password);
renturn "success";
}
}
3.1.2绑定javaBean
*表单中name和javabean中属性名相同
第一步:编写Account实体类
public class Account implements Serializable{
private String usernam;
private String password;
private Double money;
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
}
第二步:编写jsp:name标签的值要和javabean中的属性相同
javabean参数绑定
<form action="login/saveAccount" method="post">
姓名:<input type="text" name="username"></br>
密码:<input type="password" name="password"></br>
金额:<input type="text" name="money"></br>
<input type="submit" value="提交">
</form>
第三步:编写controller中的方法:
@RequestMapping(path = "/saveAccount")
public String saveAccount(Account account){
System.out.println(account.toString());
return "success";
}
如果javabean中包含引用类型
实体类简写
public class Account implements Serializable{
private String usernam;
private String password;
private Double money;
private User user;
//……………所有属性的get和set方法
【注意】:引用类型要有get和set方法,因为springmvc是根据实体类中的set方法封装的
jsp:
<%--javabean中的引用类型参数绑定--%>
<form action="login/saveAccount" method="post">
姓名:<input type="text" name="username"></br>
密码:<input type="password" name="password"></br>
金额:<input type="text" name="money"></br>
用户名:<input type="text" name="user.uname"></br>
年龄:<input type="text" name="user.age"></br>
<input type="submit" value="提交">
</form>
使用属性打点调用属性名
3.2支持的数据类型
- 基本类型和字符串类型
- 实体类型(javabean)
- 集合数据类型(List,map集合等)
3.3配置解决乱码的过滤器
在web.xml中配置过滤器
<!--配置解决中文乱码的过滤器-->
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.4封装集合类型
//实体类
public class Account {
private Integer id;
private String name;
private String password;
// 绑定集合对象参数
List<User> users;
Map<String,User> userMap;
//省略get和set方法
}
*jsp页面
<%--绑定集合类型的参数--%>
<form method="post" action="param/welcome">
账户id:<input type="text" name="id"></br>
账户名:<input type="text" name="name"></br>
账户密码:<input type="password" name="password"></br>
<!--将user对象存入list集合中-->
用户姓名:<input type="text" name="users[0].username"></br>
用户性别:<input type="text" name="users[0].usersex"></br>
<!--将user对象存入map中-->
用户姓名:<input type="text" name="userMap['one'].username"></br>
用户性别:<input type="text" name="userMap['one'].usersex"></br>
<input type="submit" value="提交">
</form>
controller
@RequestMapping("/welcome")
public String welcome(Account account) {
System.out.println(account);
return "welcome";
}
3.5特殊情况:自定义类型转换器
第一步.创建类实现converter接口
public class StringToDateConverter implements Converter<String,Date>{
@Override
public Date convert(String s) {
//判断字符串是否有效
if(s == null){
throw new RunTimeException("字符串有误");
}
try{
DateFormate df = new SimpleDateFormate("yyyy-MM-dd");
return df.parse(s);
}catch(Exctption e){
throw new RunTimeException("转换异常");
}
}
}
第二步:配置springmvc文件
<!--自定义类型转换器-->
<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itblp.utils.StringToDateConverter"></bean>
</set>
</property>
</bean>
<!--在driven中注册自定义类型转换器-->
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>
3.6获取原生的servletAPI
直接在controller层中调用变量即可
@RequestMapping("/welcome")
public String welcome(HttpServletRequest request,HttpServletResponse response){
System.out.println(request);
HttpSession session = request.getSession();
System.out.println(session);
ServletContext servletContext = session.getServletContext();
System.out.println(servletContext);
System.out.println(response);
return "welcome";
}
4.常用注解
4.1RequestParam
解决前端与controller层中传的参数名不一致问题
<a href="anno/testRequestParam?name=哈哈">RequestParam</a>//controller层使用了@RequestParam之后,此处前端必须传的参数名叫name并且必须有参数名
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("name") String username){
System.out.println("开始执行");
System.out.println(username);
return "welcome";
}
}
4.2RequestBody
获取请求体内容
<form method="post" action="anno/saveUser">--%>
用户姓名:<input type="text" name="username"></br>
用户性别:<input type="text" name="usersex"></br>
<input type="submit" value="提交">
</form>
@RequestMapping("/saveUser")
public String saveUser(@RequestBody String body){
System.out.println(body);//username=31&usersex=ni
return "welcome";
}
4.3PathVariable
4.3.1restful风格
便于缓存管理使用相同的映射路径,而通过请求类型和请求参数的不同来区分执行哪个方法
4.3.2PathVariable注解的使用
<%--PathVariable注解--%>
<a href="anno/testPathVaribale/哈哈">PathVariable</a>
@RequestMapping("/testPathVaribale/{name}")
public String testPathVaribale(@PathVariable("name") String username){
System.out.println(username);//哈哈
return "welcome";
}
4.4RequestHeader
获取请求头
4.5CookieValue
获取cookie中的值
4.6ModelAttribute
作用:放在方法上优先执行
使用场景:表单不完整,可以获取表单中的参数去数据库中查询后再进行封装
如果有返回值,就直接封装,如果没有,就用map集合来接收,@ModelAttribute注解封装
<form method="post" action="anno/testModelAttribute">–%>--%>
用户姓名:<input type="text" name="username"></br>
用户性别:<input type="text" name="usersex"></br>
<input type="submit" value="提交">
</form>
@RequestMapping("/testModelAttribute")
public String testPathVaribale(User user){
System.out.println(user);
return "welcome";
}
@ModelAttribute
public User getUser(String username,String usersex){
System.out.println(username+"-->"+usersex);
//模拟通过用户名查询用户生日
User user = new User();
user.setUsername(username);
user.setUsersex(usersex);
user.setBirthday(new Date());
return user;
}
@RequestMapping("/testModelAttribute")
public String testPathVaribale(@ModelAttribute("abc") User user){
System.out.println(user);
return "welcome";
}
@ModelAttribute
public void getUser(String username, Map<String,User> map){
System.out.println(username);
//模拟通过用户名查询用户生日
User user = new User();
user.setUsername(username);
user.setBirthday(new Date());
map.put("abc",user);
}
4.7SessionAttribute
多次执行控制器之间的参数共享
作用在类上,向session域中存值和取值,删除
5.响应数据与结果视图
5.1字符串
控制层使用model类来将获取到的对象传到前端
@RequestMapping("/testString")
public String testString(Model model){
//模拟从数据库中将user对象取出来
User user = new User();
user.setUsername("你好");
user.setAge(12);
user.setPassword("1324324");
model.addAttribute("user",user);
return "hello";
}
jsp中不忽略EL表达式
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>欢迎${user.age}岁的${user.username}</h1>
</body>
</html>
5.2void
默认跳转到requestMapping的jsp下
//默认跳转到webinfo下的pages/test/testVoid.jsp中,没有就404
@RequestMapping("test/testVoid")
public void testVoid(){
System.out.println("hello");
}
分为转发,重定向,直接响应三种
@RequestMapping("test/testVoid")
public void testVoid(HttpServletRequest request,HttpServletResponse response){
System.out.println("void方法执行");
//编写请求转发的程序
try {
//不会创建视图解析器对象,因此需要自己些完整的路径名称
// request.getRequestDispatcher("/WEB-INF/pages/hello.jsp").forward(request,response);
// return;
//编写重定向的程序,重定向向服务器请求两次,需要通过项目名访问,并且不能访问web-info下的文件
// response.sendRedirect(request.getContextPath()+"/response.jsp");
//直接响应需要配置解决中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//直接响应
response.getWriter().print("你好");
} catch (Exception e) {
e.printStackTrace();
}
}
5.3ModelAndView
不仅可以跳转页面,还可以将对象返回
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView(){
//创建modelandview对象
ModelAndView modelAndView = new ModelAndView();
User user = new User();
user.setUsername("每天");
user.setAge(12);
modelAndView.addObject("user",user);
modelAndView.setViewName("hello");
return modelAndView;
}
5.4转发和重定向
不能使用视图解析器,需要写正确路径
@RequestMapping("testForwardOrReDirect")
public void testForwardOrReDirect(){
//请求转发使用forward关键字
//return "forward:/WEB-INF/pages/hello.jsp";
//重定向使用redirect关键字
return "redirect:/hello.jsp";
}
5.5ResponseBody响应json数据
前端控制器默认拦截所有的资源,必须在springmvc配置文件中设置对静态资源不进行拦截才可以实现js效果的实现
<!--配置前端控制器不会拦截静态资源
js文件夹下的文件都不会拦截-->
<mvc:resource mapping="/js/**" location="/js/**"/>
<mvc:resource mapping="/images/**" location="/images/**"/>
<mvc:resource mapping="/css/**" location="/css/**"/>
web.xml中还要配置才可以调用js
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
ajax传值,并响应json
需要使用jacksonjar包来实现对象和json字符串之间的转换
pom.xml
<!--帮我们把json字符串转为对象,或者将对象转为json字符串-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
jsp:
$.ajax({
url:"test/testAjax",
type:"post",
contentType:"application/json",
dataType:"json",
data:'{"username":"dahuang","age":12,"password":"45646"}'
success:function(data){
console.log(data.username);
console.log(data.age);
}
})
controller:
@RequestMapping("/test/testAjax")
@RsponseBody//返回json字符串
public User testAjax(@RequestBody User user){
user.setUsername("zhangsan");
user.setAge(45);
return user;
}
6.文件上传
6.1使用传统方式进行文件上传
文件上传必要条件
- form 的enctype必须设置为multipart/form-data
- 请求方式必须为post
- 必须有input type=“file”
第一步:添加坐标
<!--文件上传中文件解析-->
<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>
第二步:写表单
<form enctype="multipart/form-data" action="file/upload" method="post">
文件上传:<input type="file" name="file" id="file">
<input type="submit" value="提交">
</form>
第三步:controller
@RequestMapping(value = "/upload")
public String fileUpload(HttpServletRequest request) throws Exception {
System.out.println("文件上传执行");
//使用fileupload组件完成文件上传
//设置上传的位置
String path = request.getSession().getServletContext().getRealPath("/upload/");
//判断路径是否存在
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
// 解析request,获取文件项
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//解析request
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
fileItems.forEach(fileItem -> {
//判断文件项是否为表单项
if (fileItem.isFormField()) {
// user.setName("li");
// user.setAge(24);
} else {
//获取文件上传名
String fileName=fileItem.getName();
fileName= UUID.randomUUID().toString().replace("_","")+fileName;
try {
fileItem.write(new File(path,fileName));
//删除临时文件
fileItem.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
});
return "success";
}
6.2springmvc上传文件
原理:
配置文件解析器对象
<!--配置文件解析器对象 id名字必须叫multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--配置文件大小-->
<property name="maxUploadSize" value="17367648787"></property>
<!--上传文件的编码-->
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
controller
/**
* 使用springmvc方式上传文件
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/upload2")
public String fileUpload2(HttpServletRequest request, MultipartFile file) throws Exception {
System.out.println("文件上传执行");
//使用fileupload组件完成文件上传
//设置上传的位置
String path = request.getSession().getServletContext().getRealPath("/upload/");
//判断路径是否存在
File files = new File(path);
if (!files.exists()) {
files.mkdir();
}
//获取文件原始名
String fileName = file.getOriginalFilename();
fileName = UUID.randomUUID().toString().replace("_", "") + fileName;
file.transferTo(new File(path, fileName));
return "success";
}
7.SSM
7.1搭建整合环境
整合思想就是将spring,springmvc,mybatis的环境都配置好,然后spring逐个整合他们
spring整合springmvc时,在web.xml中添加了监听器,用于监听servletContext域对象的生命周期,加载spring配置文件
spring整合mybatis时,将连接数据源放到spring配置文件中,配置sqlsessionfactorybean对象和扫描dao层的对象
具体步骤:
创建数据库,导坐标,三层
坐标
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</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-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-test</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-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<!--页面表达式-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
</dependencies>
spring配置文件
<?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:aop="http://www.springframework.org/schema/aop"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.itblp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"></property>
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.itblp.dao"></property>
</bean>
</beans>
springmvc配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.itblp">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:annotation-driven/>
</beans>
web.xml配置文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvcContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>