springMVC 在我看来是用spring的有点来实现MVC架构 这样可以整合许多优秀的框架中的功能
例如本篇重点介绍的spring同mybatis 的整合
a. 使拦截器执行springmvc的拦截器
<--
默认的拦截器在web.xml 中 配置,下面是把这个拦截功能交给spring的代码
spring 中如果你没有指定用哪个配置文件去作为spring拦截的配置文件 会自动寻找文件名为
xxxx-servlet.xml 的配置文件
-->
springweb
org.springframework.web.servlet.DispatcherServlet
<-- 下面的代码是指定默认的配置文件 否则会默认寻找名为xxxx-servlet.xml 的配置文件
contextConfigLocation
/WEB-INF/springweb.xml
-->
1
springweb
/
b. 在web.xml 中加载spring上下文 也就是指定spring配置文件的位置
<--
下面代码中 就是初始化的作用
-->
org.springframework.web.context.ContextLoaderListener
<--
初始化文件的位置 具体怎么加载的spring已经为我们写好了 我们所可以改的就是
classpath:Resource/SpringConf.xml
还句话说 配置此处的目的就是告诉spring要加载的配置文件的路径
-->
contextConfigLocation
classpath:Resource/SpringConf.xml
c. 在web.xml 中编写字符过滤器防止乱码
setcharacter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceEncoding
true
setcharacter
/*
a. 首先我们要配置的是视图解析 也就是配置前缀 后缀
<--
例如我有一个a.jsp 文件 位于WEB-INF 目录下 那么这个WEB-INF 就是前缀
这个jsp 就是后缀 这样我们在servlet中只需要返回a 就可以定位到a.jsp 这个文件了
-->
b. 接着我们配置json转换器 也就是前后端传数据所需要的格式,这里我们需要jackson 包
text/html;charset=UTF-8
c. 我们spring一般会采用注解的方式去拦截请求 这些注解写在我们的代码中 这时候需要在配置文件中
注册,采用注解的方式扫描
d. 对于一些静态资源 例如css 图片等文件 我们不希望用spring的拦截 所以我们要在springweb.xml 说明
除了在springweb.xml 中 说明 我们还要在web.xml 中设置处理的方式 这里实际使用中我注视掉了 但是仍然可以访问,我也不知道为什么,可能是我记忆有偏差
default
*.js
这句话的意思是 对于所有的后缀为js 的spring都不拦截
setcharacter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceEncoding
true
setcharacter
/*
default
*.js
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:Resource/SpringConf.xml
springweb
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/springweb.xml
1
springweb
/
text/html;charset=UTF-8
a 页面 index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Insert title here
欢迎!!!!!!!!!!
姓名:
这里是div
b 执行请求的t.js
$(document).ready(function(){
$("#sua").click(submit);
});
function submit() {
var name = $("#name").val();
$.ajax({
url : "http://localhost:8080/spring_mybatis_mvc/t",
type : "post",
data : {
"yourname":name
},
dataType:"json",
success : function(flag){
alert(flag)
}
});
}
css 文件 无关紧要 不贴了 就是测试一下静态拦截的问题
mybatis-spring 是mybatis 与spring的完美整合 这里就直接顺路讲了
这个文件的主要作用就是整合spring与mybatis 同时 配置数据库数据源
这样我们就不需要写mybatis 的配置文件了 只需要写映射文件就ok了
a 文件springConfig.xml 的内容为
classpath:com/ccut/DAO/*.xml
b 然后我们建立数据库模型 也就是Model 层
package com.ccut.Model;
/*
* 对应数据库中的表结构
* */
public class T {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
前台参数的封装类 Name.java
package com.ccut.Model;
public class Name {
private String yourname;
public String getYourname() {
return yourname;
}
public void setYourname(String yourname) {
this.yourname = yourname;
}
}
package com.ccut.Model;
public class Name {
private String yourname;
public String getYourname() {
return yourname;
}
public void setYourname(String yourname) {
this.yourname = yourname;
}
}
c 接下来就是操作数据库的DAO 层 userMapper.xml
d 然后是这个映射文件对应的操作接口UserMapper.java
package com.ccut.DAO;
import com.ccut.Model.T;
public interface UserMapper {
public T selectAll();
}
e 有了数据库的模型和操作 我们接下来写业务层services
业务层引用DAO 层 注意是引用不应该包含具体的对象,所以代码如下
接口SelectFromT.java(对没错 和UserMapper .java 一样)
package com.ccut.services;
import com.ccut.Model.T;
public interface SelectFromT {
public T selectInformation();
}
f 上面接口的实现类SelectFromTimp.java(这里就是引用 引用DAO层的接口 注意DAO层的接口 不需要我们实现,你按照mybatis的标准写,mybatis 就已经帮你实现了)
package com.ccut.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.ccut.DAO.UserMapper;
import com.ccut.Model.T;
@Service
public class SelectFromTimp implements SelectFromT {
@Autowired
UserMapper mapper;
@Override
public T selectInformation() {
return mapper.selectAll();
}
}
g 后台逻辑写好了 我们下一步写啥呢?就是 Action 层 也就是servlet
SpringServlet.java 内容如下
package com.ccut.Action;
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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.ResponseBody;
import com.ccut.Model.Name;
import com.ccut.services.SelectFromT;
import com.ccut.services.SelectFromTimp;
@Controller
@RequestMapping("/t")
public class SpringServlet {
@Resource
SelectFromT fromT;
//这里的name 类是我封装好的javaBean类 为了匹配前台的参数 例如前台的参数名是username userpassword
//那么username userpassword就是name类的属性
@RequestMapping(method=RequestMethod.POST)
@ResponseBody
public boolean servetGet(Name name,HttpServletRequest req,HttpServletResponse resp) {
System.out.println("反正我执行了");
String namString = fromT.selectInformation().getName();
System.out.println(namString);
if(namString.equals(name.getYourname()))
{
System.out.println("你猜");
return true;
}
else {
return false;
}
}
@RequestMapping(method=RequestMethod.POST,value="/redirect")
public String name() {
return "hello";
}
}
全部ok
说明前后台 交互完成