spring MVC整合框架
user类
public class User {
private Integer id;
private String name;
private String address;
private Integer balance;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
", balance=" + balance +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getBalance() {
return balance;
}
public void setBalance(Integer balance) {
this.balance = balance;
}
}
queryVO
public class QueryVO {
private User user;
private Integer id;
private List<Integer> list = new ArrayList<Integer>();
@Override
public String toString() {
return "QueryVO{" +
"user=" + user +
", id=" + id +
", list=" + list +
'}';
}
public List<Integer> getList() {
return list;
}
public void setList(List<Integer> list) {
this.list = list;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
整合框架的结构流程:
需要程序员做的就只有,配置前端控制器(DispatcherServlet)然后书写handler(controller)
springMVC绑定参数
1、获得原生态的Servlet对象
Request
Response
Session
ServletContext
public void servletNative(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
想要获得原生态对象,只需要把这个对象放在controller的访问方法中,就能直接获得对应的对象
2、普通类型的参数绑定
String + 8大基本数据类型
public void normalParam(String name,Integer id){
System.out.println(name);
}
只要把参数的名字写在函数的参数中,就可以直接进行绑定
8大数据类型最好采用他们的封装类,好处是不传也不会报异常,比如如果是用int id那么在访问的时候没有传id的参数,就会报异常,改为Integer就不报
3、pojo类型参数的封装
public void pojoParam(User user){
System.out.println(user);
}
直接把pojo对象放入参数中,自动将参数封装到实体类中,并且如果还有其他的基本类型,也会将参数放入基本类型中
4、直接对pojo的封装类绑定
public void queryVo(QueryVO queryVO){
System.out.println(queryVO);
}
要求在传参的时候必须使用ognl表达式的方式传参
比如user.name user.id 这样才会把参数封装到vo的user属性中
5、数组参数
public void arrayParam(Integer[] ids){
for (Integer id:ids) {
System.out.println(id);
}
}
要求地址为 ids=1&ids=2
6、集合参数
public void listParam(QueryVO qv){
System.out.println(qv);
}
集合类型参数只能使用封装类
传参的时候List=1&list=2list=3方式传参
请求的限制
1、地址的限制
@RequestMapping(value = "/listParam",”/listget”)
2、请求方法的限制
如果不写method就默认两种都有
@RequestMapping(value = "/listParam",method = RequestMethod.GET)
可以限制get、post
3、请求的方法不仅有post和get
中国人 Post、get
添加、修改 post
删除采用post、get
查找get
外国人 post get put delete ResultFul风格
增 查 改 删
Controller返回值
4种
1、modelAndView
既可以控制页面的跳转,也可以实现数据的封装
2、void
想使用Servlet原生态的开发方式
Request和response
3、String
才是官方推荐使用的
可以控制页面的跳转
@RequestMapping("/stringDemo")
public String stringDemo(Model model){
model.addAttribute("name","小明");
return "/index.jsp";
}
数据的封装需要借助model,在方法中写上参数model,调用model的addAttribute的方法去实现数据封装
页面的跳转方式:默认是转发
重定向: "redirect:/index.jsp";
转发:"forward:/index.jsp"
4、json
对比json技术的优劣(fastjson Jackson gson)
导包
<!-- 使用Json所依赖的jar包 -->
<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-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.4</version>
</dependency>
在sprigMVC.xml中开启转换的方法
可以省略里面的转换器,加上<mvc:annotation-driven>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
在方法中返回值加上@ResponseBody注解
@RequestMapping("/jsonDemo")
public @ResponseBody Object jsonDemo(){
Map map = new HashMap();
map.put("code",1);
map.put("msg","访问成功");
return map;
}
SSM框架整合
Spring跟mybatis整合
Spring跟springMVC整合
1、导包
Mybatis log4j
实际上就是把spring和mybatis放到web里面来
Web.xml要配置 项目启动就读取spring配置文件
拦截器
自定义拦截器
相当于原来的过滤器的作用,在访问目标的controller之前,先访问过滤器
自定义一个类去实现HandlerInterceptor接口,去重写它的三个方法
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("调用前");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
//方法调用后
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
//页面渲染后调用
}
}
再把自定义的拦截器配置到springMVC核心配置文件中
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/sys/*"/>
<bean class="com.hd.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
springMVC文件上传
流
SpringMVC提供的防暑
Spring提供的方式(推荐)
导包:文件上传需要两个依赖
Commons –IO
Commons-fileUpload
书写前端页面
Form表单提交
请求方式:post
Enctype :必须是enctype="multipart/form-data"
异常处理器
写个类实现HandlerExceptionResolver接口
并实现这个接口的方法
public class MyExceptionController implements HandlerExceptionResolver{
@Nullable
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @Nullable Object o, Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("error",e.getMessage());
mav.setViewName("/error.jsp");
return mav;
}
}
需要在springMVC配置文件中配置这个类
<bean class="com.hd.exception.MyExceptionController"></bean>
上一篇: mybatis 多条件查询
下一篇: 同一个世界同一个妈