SpringMVC(二)SpringMVC处理Web请求、获取返回值

一、注解

  • @Controller

作用:用于创建控制器对象。该对象能够处理Web请求。

位置:该注解位于类名上方。

@Controller
public class MyController {}
  • @RequestMapping

作用:请求映射,用于将指定请求绑定到指定方法上,该方法用于处理对应请求。

属性:value:设置请求的url,值唯一;method:设置提交请求的方式(取值为get/post)

位置:该注解位于方法名上方。

@RequestMapping(value = "/some.do", method = RequestMethod.GET)
public ModelAndView doSome(){}

二、视图解析器

  视图解析器用于简化指定返回视图的操作,直接使用文件名即可——modelAndView.setViewName("文件名称")

prefix:文件路径前缀

suffix:文件后缀名,例如:".jsp"

<!--声明springmvc框架中的视图解析器,帮助开发人员设置视图文件路径-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--前缀:视图文件路径-->
    <property name="prefix" value="/WEB-INF/view/"/>
    <!--后缀:视图文件扩展名-->
    <property name="suffix" value=".jsp"/>
</bean>

转发路径:"/WEB-INF/view/" + “文件名称” + “.jsp”

三、接收参数

  1. 直接在处理器方法中获取

    在处理器方法的参数中加入HttpServletRequest、HttpServletResponse、HttpSession三个参数。

@RequestMapping(value = "/return-view.do")
public String returnView(HttpServletRequest request, HttpServletResponse response, HttpSession session){
    //可以手工在request域中加入参数
    request.setAttribute("name",name);
    request.setAttribute("age",age);
    return "show";
}
  1. 接收简单类型参数

    表单中代码:

<h1>请输入姓名和年龄:</h1><br>
<form action="receiveproperty.do" method="post">
    姓名:<input type="text" name="name"><br><br>
    年龄:<input type="text" name="age"><br><br>
    <input type="submit" value="提交"><br>
</form>

参数名相同时:在处理器方法中加入与表单参数名称和个数相同的参数。

@RequestMapping(value = "/receiveproperty.do")
public ModelAndView doSome(String name, Integer age){
    ModelAndView mv = new ModelAndView();
    mv.addObject("myName",name);
    mv.addObject("myAge",age);
    mv.setViewName("show");
    return mv;
}

与表单参数名不同时:在处理器方法中加入相同个数的参数;在对应参数前使用@RequestParam(value = “与表单参数名相同的参数名”),即可将参数赋给对应变量。

<h1>表单中参数名与控制器方法中的参数名不一致时</h1><br>
<form action="receiveparam.do" method="post">
    姓名:<input type="text" name="rname"><br><br>
    年龄:<input type="text" name="rage"><br><br>
    <input type="submit" value="提交"><br>
</form>
@RequestMapping(value = "/receiveparam.do")
public ModelAndView receiveparam(@RequestParam(value = "rname") String name,
                                 @RequestParam(value = "rage") Integer age){
    System.out.println("name:"+name+"    age:"+age);
    ModelAndView mv = new ModelAndView();
    mv.addObject("myName",name);
    mv.addObject("myAge",age);
    mv.setViewName("show");
    return mv;
}
  1. 接收引用类型参数
<h1>使用java对象接收参数</h1><br>
<form action="receiveObj.do" method="post">
    姓名:<input type="text" name="name"><br><br>
    年龄:<input type="text" name="age"><br><br>
    <input type="submit" value="提交"><br>
</form>

Student对象:

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 +
                '}';
    }
}

在处理器方法中加入Student变量,表单中的参数会通过容器调用对应setXXX()方法,为对应属性赋值。

注意:表单中的参数名必须和对象中的属性名一致。

@RequestMapping(value = "/receiveObj.do")
public ModelAndView receiveObj(Student myStudent){
    ModelAndView mv = new ModelAndView();
    mv.addObject("myName",myStudent.getName());
    mv.addObject("myAge",myStudent.getAge());
    mv.addObject("myStudent",myStudent);
    mv.setViewName("show");
    return mv;
}
  1. 接收Map、List、数组等(与应用类型赋值相同)

三、设置参数编码

在表单提交时,通过post方式会产生中文乱码,使用过滤器解决——CharacterEncodingFilter,解决POST提交方式中文乱码问题。

在web.xml文件中注册过滤器如下:

<!--注册过虑器,解决post请求乱码问题-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--设置项目中使用的字符编码-->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
    <!--强制该对象(HttpServletRequest)使用encoding编码的值-->
    <init-param>
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <!--强制该对象(HttpServletResponse)使用encoding编码的值-->
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <!--
            "/*"表示所有的请求都要先通过过滤器处理
        -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

四、接收返回值

  1. ModelAndView类型

    addObject()方法用于添加数据,底层使用reques.setAttribute()方法实现;

    setViewName()方法用于转发视图,底层使用forward或redirect实现。

@RequestMapping(value = "/receiveproperty.do")
public ModelAndView doSome(String name, Integer age){
    ModelAndView mv = new ModelAndView();
    mv.addObject("myName",name);
    mv.addObject("myAge",age);
    mv.setViewName("show");
    return mv;
}
  1. void类型

void类型通常配合ajax使用。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>发送请求</title>
    <script type="text/javascript" src="js/jQuery-3.5.1.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#bt").click(function () {
                $.ajax({
                    url:"returnVoid-ajax.do",
                    data:{
                        name:"zhangsan",
                        age:20
                    },
                    type:"post",
                    dataType:"text",
                    success(resp){
                        //resp是从服务器返回的json格式的字符串,{name:"zhangsan",age:"20"}
                        //jQuery会把字符转化为json对象,赋值给resp
                        alert(resp.name+"    "+resp.age)
                    }
                })
            })
        })
    </script>
</head>
<body>
    <button id="bt">发起Ajax请求</button>
</body>
</html>
@RequestMapping(value = "/returnVoid-ajax.do")
public void returnVoid(HttpServletResponse response,String name, Integer age) throws IOException {
    Student student = new Student();
    student.setName(name);
    student.setAge(age);

    //转化为json格式
    String json = "";
    if (student!=null){
        ObjectMapper om = new ObjectMapper();
        json = om.writeValueAsString(student);
        System.out.println("student转换为json:"+json);
    }

    //输出数据,响应json请求
    response.setContentType("application/json;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println(json);
    out.flush();
    out.close();
}
  1. String类型

    表示数据:

    返回值是String类型,表示数据,此时含有@ResponseBody注解

    默认编码为:text/plain;charset=ISO-8859-1,会出现中文乱码,使用produces更改编码

@RequestMapping(value = "/returnStringData.do",produces = "text/plain;charset=UTF-8")
@ResponseBody
public String returnStringData(String name, Integer age){
    return "Hello SpringMVC ========奥利奥";
}

  表示视图:

  理器方法返回String(表示视图,此时没有@ResponseBody注解)——表示逻辑视图名称,需要配置视图解析器

  当返回值是视图完整路径时需要取消视图解析器,因为视图解析器会进行字符拼接。

@RequestMapping(value = "/return-view.do")
public String returnView(HttpServletRequest request, String name, Integer age){
    System.out.println("name:"+name+"    age:"+age);
    //可以手工在request域中加入参数
    request.setAttribute("name",name);
    request.setAttribute("age",age);
    return "show";
}
  1. Object类型

    使用Ajax时主要使用json数据类型
    <mvc:annotation-driven />:注解驱动,能够将java对象转化为json、xml、二进制等数据类型
    @ResponseBody注解:放到处理器方法上面
    处理器将对象转化为json后,在内部通过HttpServletResponse输出数据,相应Ajax请求

@RequestMapping(value = "/returnStudentObject.do")
@ResponseBody
public Student returnStudentObject(String name, Integer age){
    Student student = new Student();
    student.setName("lisi");
    student.setAge(23);
    return student;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringMVC是一个用于构建Web应用程序的Java框架。在SpringMVC中,处理请求和响应是通过使用控制器方法来实现的。控制器方法使用@RequestMapping注解来映射请求的URL,并通过方法参数来获取请求参数和响应对象。 在处理请求时,可以使用@RequestParam注解来获取请求参数的。例如,可以在方法参数上使用@RequestParam注解来获取请求中的特定参数。另外,也可以使用@PathVariable注解来获取URL中的路径参数。 在处理响应时,可以使用@ResponseBody注解将方法的返回直接写入HTTP响应体中,而不是进行视图跳转。这样可以直接返回字符串、JSON格式的数据或其他类型的数据。 另外,在SpringMVC中,还有一些核心组件,如处理器映射器、处理器适配器和视图解析器。处理器映射器负责将请求映射到相应的控制器方法,处理器适配器负责将请求参数绑定到方法参数,并调用相应的控制器方法,视图解析器负责将方法的返回解析为视图。 总结起来,SpringMVC通过控制器方法、注解和核心组件来处理请求和响应,使得开发者可以方便地构建Web应用程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [springMVC请求和响应](https://blog.csdn.net/weixin_38088097/article/details/105840310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVC请求和响应](https://blog.csdn.net/weixin_51146329/article/details/123166475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

krain.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值