SpringMVC(二)

第一节 SpringMVC结合Ajax使用

@Controller
public class MyCon {
    /**
     * 注意的内容
     * 【1】我们使用SpringMVC结合ajax的时候 把查询出来的内容直接返回即可
     *
     * 【2】需要在方法上增加@ResponseBody
     *
     *  【3】响应的结果集直接是JSON对象 不需要进行任何的转换
    
     * */

    @RequestMapping(value = "demo2",produces = "application/json;charset=UTF-8")
    @ResponseBody
    public    User   demo2(){
        //【1】接受页面的数据
        //【2】数据的处理
        User  user=new User("lisi",20,"男");
        //【3】做出响应
         return  user;
    }
    /***
     *  这种方式响应的是json 字符串
     */
    @RequestMapping("/demo1")
    public  void    demo1(HttpServletResponse  resp, String  name, int age) throws IOException {
          resp.setContentType("text/html;charset=utf-8");
         //【1】接受页面数据
        //【2】数据处理
        User  user=new User("lisi",20,"男");
        //【3】给用户做出响应
        //String json = new Gson().toJson(user);
        //resp.getWriter().print(json);

    }

}

第二节 SpringMVC中转发和重定向

@Controller
@RequestMapping("/MyCon2")
public class MyCon2 {
    public ModelAndView   demo4(HttpServletRequest  req){
         ModelAndView mv=new ModelAndView();
         //转发一
         mv.setViewName("forward:/index.jsp");
        //重定向一
         mv.setViewName("redirect:/index.jsp");
         //转发二
         mv.setView(new InternalResourceView("/index.jsp"));
         //重定向二
 mv.setView(new RedirectView(req.getContextPath()+"/index.jsp"));
         return   mv;
    }
    /**转发和重定向的底层*/
    @RequestMapping("demo3")
    public View   demo3(HttpServletRequest  req){
        //转发
        //View   v=new InternalResourceView("/index.jsp");
        //重定向
        View  v =new RedirectView(req.getContextPath()+"/index.jsp");
        return  v;
    }
    /***
     * 重定向: return  "redirect:index.jsp";
     *
     *  A、相对路径 :支持  ../
     *  B、根路径:  支持的    /--上下文
     *  C、绝对路径:支持的
     */
    @RequestMapping("demo2")
    public    String    demo2(){
          return  "redirect:http://www.bjsxt.com";
      }
    /**
     * 转发  默认书写是转发
     * return "forward:/index.jsp";
     *
     * 路径支持的方式
     *   A、相对路径 支持的 ,但是这个相对地址是相对于URL地址栏来说的,使用起来不是很方便
 *把地址栏最后一个换成转发的。
* return "forward:../index.jsp";
     *
     *   B、根路径  支持的  /--上下文
 C、绝对路径:不支持的  转发是服务器内部的跳转
     *
     * */
    @RequestMapping("/demo1")
    public  String  demo1(){
        System.out.println("进入控制单元");
        return "forward:http://www.bjsxt.com";
    }
}

第三节 自定义视图解析器

[1]遇到的问题

我们发现文件放到web-inf下,这个时候文件就不可以直接访问了,这样的作用就是提升项目的安全性。
如果用户 就要访问WEB-INF下的文件 只可以通过转发的形式跳转到指定的页面中

[2] 跳转的方式

<%--转发到指定的页面中--%>


@RequestMapping("/update")
public   String   demo1(){

   return "forward:/WEB-INF/update.jsp";
}

[3] 遇到的新问题

我们发现 文件放到WEB-INF下 虽然是安全了,但是我们书写项目的时候可能有30个页面,这样一来,我们书写访问的方法需要书写30个这样就非常的麻烦。

[4]解决方案实现




     

     


@Controller
public class MyCon3 {

    //  http://127.0.0.1:8888/springmvc02/show
    @RequestMapping("/{path}")
    public   String   getPath(@PathVariable String path){

        return  path;
    }
    /***
     * demo11--->@RequestMapping("/demo11")-->@RequestMapping("/{path}")
     *
     *  再给用户做出响应的时候 直接return 的时候就不再默认是转发了,这个时候会经过自定义
     *  视图解析器
     *  如果我们想要进行转发或者重定向 就必须
     *
     *  return "forward:index.jsp";

       return "redirect:index.jsp";
     */
    @RequestMapping("/demo11")
    public   String    demo1(){
        System.out.println("进入了demo1方法");
        //return "forward:index.jsp";
        return "redirect:index.jsp";
    }

}

第四节 文件上传

Jsp页面必须注意的事项:
1. method=”post”,get提交的方式有大小限制,且get方式依附于url地址的
2.

指定文件按照二进制流的方式传输

文件上传的方法(这个id不能变,其他的可以变)


    
    

@RequestMapping("/fileLoad")
    public String fileLoad(MultipartFile fil){
        System.out.println(fil.getName()+"---"+fil.getSize()+"---"+fil.getContentType()+"---"+fil.getOriginalFilename());
        return "forward:success.jsp";
    }

SpringMVC(二)_第1张图片
文件上传

本地的文件搬到服务器(不会自动创建)

@RequestMapping("/fileLoad")
    public String fileLoad(MultipartFile fil) throws IOException {
    
        //文件上传到D:/imgs/
        fil.transferTo(new File("D:/imgs/"+fil.getOriginalFilename()));
        
        System.out.println(fil.getName()+"---"+fil.getSize()+"---"+fil.getContentType()+"---"+fil.getOriginalFilename());
        return "forward:success.jsp";
        
    }

六大问题

  1. 上传文件的时候出现中文乱码(或者用过滤器)

    
    

  1. 上传文件夹名称必须给出

    //创建一个File对象
    File file = new File("D:/imgs2/");
    //判断路径是否存在,不存在就创建
    if (!file.exists()){
        file.mkdirs();
    }
    
  2. 上传不到当前文件夹路径中

    @RequestMapping("/fileLoad01")
        public String fileLoad01(HttpServletRequest req, MultipartFile fil) throws IOException {
            //获得服务器目录
            String path = req.getServletContext().getRealPath("/imgs");
    
            //判断路径是否存在
            File file = new File(path);
            if (!file.exists()){
                file.mkdirs();
            }
    
            //文件上传到D:/imgs/
            fil.transferTo(new File(file,fil.getOriginalFilename()));
    
            /*System.out.println(path);*/
            /*System.out.println(fil.getName()+"---"+fil.getSize()+"---"+fil.getContentType()+"---"+fil.getOriginalFilename());*/
            return "forward:success.jsp";
        }
    
  3. 相同名称图片会覆盖

    @RequestMapping("/fileLoad02")
        public String fileLoad02(HttpServletRequest req, MultipartFile fil) throws IOException {
            //获取随机uuid
            String uuid = UUID.randomUUID().toString();
            //获取名称最后的.类型名称
            String substring = fil.getOriginalFilename().substring(fil.getOriginalFilename().lastIndexOf("."));
            String filename = uuid + substring;
            //获得服务器目录
            String path = req.getServletContext().getRealPath("/imgs");
            //判断路径是否存在
            File file = new File(path);
            if (!file.exists()){
                file.mkdirs();
            }
            //文件上传到D:/imgs/
            fil.transferTo(new File(file,filename));
    
            /*System.out.println(path);*/
            /*System.out.println(fil.getName()+"---"+fil.getSize()+"---"+fil.getContentType()+"---"+fil.getOriginalFilename());*/
            return "forward:success.jsp";
        }
    
  4. 无法指定上传图片的大小
    第一种
    SpringMVC(二)_第2张图片
    第二种

    
    
    
    
        
            
                
                forward:error.jsp
            
        
    
    
  5. 无法指定上传文件的类型
    SpringMVC(二)_第3张图片
    数据库加密

    select * MD5(‘123’)

第五节 文件下载

1.下载到游览器内存中去了,点击下载就是查看
SpringMVC(二)_第4张图片
获取每个人的客户端(游览器默认下载位置)
在这里插入图片描述

自己完成读写操作
SpringMVC(二)_第5张图片
SpringMVC(二)_第6张图片
下载到硬盘中
SpringMVC(二)_第7张图片
SpringMVC(二)_第8张图片

你可能感兴趣的:(框架)