栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC框架从入门到入土(二):教你掌握SpringMVC的注解式开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC框架从入门到入土(二):教你掌握SpringMVC的注解式开发

SpringMVC框架从入门到入土(二):教你掌握SpringMVC的注解式开发 @RequestMapping的使用
  • 放在类的上面
@RequestMapping("/test")
public class MyController {
  xxxxxx
}
  • 指定请求的方式
    
    @RequestMapping(value = "/some.do",method = RequestMethod.GET)
    public ModelAndView doSome(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","欢迎使用springmvc开发");
        mv.addObject("fun","执行的是doSome方法");
        mv.setViewName("show");
        return mv;
    }

    
    @RequestMapping(value = "/other.do",method = RequestMethod.POST)
    public ModelAndView doOther(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","欢迎使用springmvc开发");
        mv.addObject("fun","执行的是doOther方法");
        mv.setViewName("show");
        return mv;
    }

发起some请求


处理器方法的参数 处理器方法形参
  • HttpServletRequest
  • HttpServletResponse
  • HttpSession

以上三类会在系统调用时由系统自动赋值,即程序员可以在方法内直接使用。

public ModelAndView doOther(HttpServletRequest request, HttpServletResponse resp, HttpSession session){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","欢迎使用springmvc开发" + + request.getParameter("name"));
        mv.setViewName("show");
        return mv;
    }
逐个接收参数
  • 逐个接收

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    接收参数


提交参数给Controller

姓名:
年龄:

 
    @RequestMapping(value = "receiveProperty.do")
    public ModelAndView receiveParameter(String name,Integer age){
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("showparamter");
        return mv;
    }

注意:注意:在提交请求参数的时候get请求方式中文没有乱码。
在使用post方式请求时候,中文会有乱码,需要使用过滤器处理乱码的问题

过滤器的设置(解决中文乱码)
  • 在web.xml文件中设置

    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter

        
            encoding
            utf-8
        
        
        
            forceRequestEncoding
            true
        
        
        
            forceResponseEncoding
            true
        
    
    
        characterEncodingFilter
        
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("showparamter");
        return mv;
    }

对象接收参数
  • 创建接收参数的对象
package com.liar.entity;


public class Student {
    //属性名和请求中的参数名保持一致
    private String name;
    private Integer age;

    public Student() {
        System.out.println("Student的无参构造!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}
  • MyController方法
    
    @RequestMapping(value = "receiveObject.do")
    public ModelAndView receiveObject(Student student){
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",student.getName());
        mv.addObject("myage",student.getAge());
        mv.addObject("mystudent",student);
        mv.setViewName("showparamter");
        return mv;
    }
  • 对象参数名和请求参数名保持一致

测试用java对象接收请求参数

姓名:
年龄:

处理器方法的返回值

常用的有四种类型

  • ModelAndView
  • String
  • 无返回值
  • 返回自定义类型
返回ModelAndView

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时
处理器方法返回ModelAndView比较好。当然,若要返回ModelAndView, 则处理器方法中需要定义ModelAndView对象。
在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何
资源跳转(如对页面的Ajax异步响应),此时若返回ModelAndView,则将总是有一部分多
余:要么Model多余,要么View多余。即此时返回ModelAndView将不合适。

返回String

处理器方法返回的字符串可以指定逻辑视图名,通过视图解释可以将其转换未物理视图的地址

返回内部资源逻辑视图名
若要跳转的资源为内部资源,则视图解析器可以使用InternalResourceViewResolver 内部
资源视图解析器。此时处理器方法返回的字符串就是要跳转页面的文件名去掉文件扩展名后的部分。这个字符串与视图解析器中的prefix、 suffix 相结合,即可形成要访问的URI。

    
    @RequestMapping(value = "returnString-view.do")
    public String returnStringView(HttpServletRequest request,Student student){
        //可以自己手动添加数据到request作用域
        request.setAttribute("myname",student.getName());
        request.setAttribute("myage",student.getAge());
        request.setAttribute("mystudent",student);
        //showReturn:逻辑地址名称,项目中配置了视图解释器
        //框架对视图执行转发操作
        return "showparamter";
    }

如果处理器方法返回String表示完整视图路径,那么此时不能配置视图解析器!

返回Void(了解)
  • 不能表示数据,也不能表示视图
  • 在处理ajax的时候。可以使用void返回值。通过HttpServletResponse输出到屏幕,响应ajax请求,ajax服务器端返回的是数据,和视图无关。

    @RequestMapping(value = "returnVoid-view.do")
    public void returnVoidView(HttpServletResponse response,String name,Integer age) throws IOException {
        //假设Service完成了
        Student stu = new Student(name,age);
        //把结果转换未json对象
        String json = "{}";
        if(stu != null){
            ObjectMapper om = new ObjectMapper();
             json = om.writeValueAsString(stu);
            System.out.println("syudent转换的json"+json);
        }

        //输出数据
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println(json);
        writer.flush();
        writer.close();
    }
返回Object

注解驱动的作用:

完成java对象到json,xml,text,二进制等数据格式的转换。

HttpMessageConverter:消息转换器。这个接口有很多的实现类。这些实现类完成了java对象到json,java对象到xml,java对象到二进制数据的转换。

  • canWriter的作用检查处理器方法的返回值,能不能转为var2表示的数据格式

    检查student(list,20)能不能转成var2表示的格式。

    如果可以转为json,canwriter返回True

    MediaType:表示数据的格式,比如json、xml

  • write:把处理器方法的返回值对象,调用jackson中的ObjectMapper转为字符串。

    json = om,writeValueAsString(Student)

@ResponseBody

放在处理器的上面,通过HttpServletResponse输出数据,响应ajax的请求。

实现:

  1. spring配置文件中加入注解驱动

    
  1. 注解驱动前后对比

返回Student-Json
    
    @RequestMapping(value = "returnStudentJson.do")
    @ResponseBody
    public Student returnStudentJson(HttpServletResponse response,String name,Integer age){
        //调用service,获取请求结果数据,student对象表示结果数据
        Student student = new Student();
        student.setName(name);
        student.setAge(age);
        return student;
    }
返回字符串对象

若要返回非中文字符串,将前面返回数值型数据的返回值直接修改为字符串即可。但若返回的字符串中带有中文字符,则接收方页面将会出现乱码。此时需要使用@RequestMapping的produces属性指定字符集。
produces,产品,结果,即该属性用于设置输出结果类型。

    
    @RequestMapping(value = "returnStringData.do",produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String doObject(String name,Integer age){
        return "ZXW ,我爱你!";
    }
访问静态资源

tomcat本身就能处理静态资源的访问,像html,图片,js文件都是静态资源


        springmvc
        
        /
    
使用default-servlet-handler


    
使用resources(掌握)





    
    
    

改进:在webapp目录下新建一个目录static

    
绝对路径和相对路径

在jsp、html中使用的地址,都是在前端页面中的地址,都是相对地址

地址分类:

  • 绝对地址:带有协议名称的是绝对地址
  • 相对地址:没有协议开头的,必须有一个参考地址,通过参考地址+相对地址本身才能指定资源

参考地址:


获取页面路径:

<%
     String basePath = request.getScheme() +""+
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
%>

指定base标签:


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号