SpringMVC第二天

回顾SpringMVC的工作原理

客户发送的请求,首先由SpringMVC的前端控制器进行拦截,然后交给处理器映射器去找要请求的action,处理器映射器会返回具体的地址给前端控制器,前端控制器把具体的地址给处理器适配器,处理器适配器去调用(执行)具体的action.执行后会返回ModelandView,由前端控制器交给视图解析器进行解析返回View,视图渲染返回给客户。

SpringMVC的参数绑定方式

  1. 使用request.getParameter();l来获取页面传过来的参数
  2. 自定义封装类(DTO)
    DTO:DTO的里面封装的属性主要是页面和web交互的数据,可能来自一个Model的属性,也可能来自多个Model的属性,如果页面提交数据很多,就避免使用多个request来得到属性
    注意点:页面上使用的具体控件字段的名称需要和封装类中的属性一致。
    在页面提交数据后,在Action里面可以这样写,在方法的参数列表里面传入一个DTO对象
@RequestMapping("/addType.do")
    public ModelAndView addType(BookTypeDTO dto,HttpServletRequest request,HttpServletResponse response){
        ModelAndView mv = new ModelAndView();
        //获得页面上传递过来的数据
        String typename = request.getParameter("typename");
        String typedesc = request.getParameter("typedesc");
        System.out.println(typename+"\t"+typedesc);
        //从DTO中获取数据
        System.out.println("从DTO中获取:"+dto.getTypename()+"\t"+dto.getTypedesc());
        mv.setViewName("/index.jsp");
        return mv;

关联对象:


SpringMVC第二天_第1张图片
DTO关联对象
@RequestMapping("/addType.do")
    public ModelAndView addType(HttpServletRequest request,HttpServletResponse response,BookTypeDTO dto){
        ModelAndView mv = new ModelAndView();
        //获得页面上传递过来的数据
        String typename = request.getParameter("typename");
        String typedesc = request.getParameter("typedesc");
        System.out.println(typename+"\t"+typedesc);
        //从DTO中获取数据
        System.out.println("从DTO中获取:"+dto.getTypename()+"\t"+dto.getTypedesc());
        //从DTO中得到来源
        System.out.println(dto.getUserDTO().getUname());
        mv.setViewName("/index.jsp");
        return mv;
        
    }

重定向方式

@RequestMapping("/redirect.action")
    protected String redirectTest(HttpServletRequest request,HttpServletResponse response){
        System.out.println("redirectTest");
        
        return "redirect:test.action";//地址栏改变
    }

文件上传

  • 依赖包(当然也要导入spring的依赖了)

    
        commons-fileupload
        commons-fileupload
        1.2.2
    
    
        commons-io
        commons-io
        2.0.1
    
  • 表单类型
用户名:
照片:

注意 enctype="multipart/form-data"

  • 在spring配置文件中配置文件解析器

    
        
    
  • action接收页面提交数据
@Controller
public class UploadAction {
    
    @RequestMapping("upload.action")
    protected ModelAndView upload(HttpServletRequest request,HttpServletResponse response,@RequestParam("image")MultipartFile mf){
        ModelAndView mav = new ModelAndView();
        System.out.println(request.getParameter("name"));
        //得到上传文件名
        String fileName = mf.getOriginalFilename();
        //得到上传目录
        String realPath = request.getServletContext().getRealPath("upload");
        System.out.println(realPath);
        //定义上传的目标文件
        File file = new File(realPath+"\\"+fileName);
        try {
            mf.transferTo(file);
            System.out.println("上传成功!!");
        } catch (IllegalStateException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mav.setViewName("/index.jsp");
        return mav;
    }
} 

@RequestParam("image"):接收页面指定name的标签传过来的数据

JSON处理

  • 导入依赖

        com.fasterxml.jackson.core
        jackson-core
        2.7.4
    
    
        com.fasterxml.jackson.core
        jackson-databind
        2.7.4
           
    
        com.fasterxml.jackson.core
        jackson-annotations
        2.7.4
    
  • 使用注解ResponseBody,使方法的返回值为转为json
    @RequestMapping("/show.action")
    @ResponseBody
    protected  List showAllCar(HttpServletRequest request,HttpServletResponse response){
        
        return tCarService.findAllCar();
    }

访问该接口直接得到json数据

总结

本章主要介绍的是基于SpringMVC的一些实用功能

你可能感兴趣的:(SpringMVC第二天)