当前位置: 首页 > 图灵资讯 > 技术篇> 处理器方法的参数

处理器方法的参数

来源:图灵教育
时间:2023-06-02 09:25:43

course3中代码1.处理器方法参数15

处理器方法可包括系统调用时自动赋值的四种参数,即程序

该方法可直接使用人员。

➢HttpServletRequest

➢HttpServletResponse

➢HttpSession

➢用户提交的数据

1.1浏览器地址上的参数15

///没有指定请求方式,没有限制  14    @RequestMapping(value = "/first.do")    public ModelAndView doFirst(HttpServletRequest request,                                HttpServletResponse response,                                HttpSession session){        ModelAndView mv  = new ModelAndView();        mv.addObject("msg",====欢迎使用springmvc进行web开发== + request.getParameter("name"));        mv.addObject("fun",“执行dofirst方法”);        mv.setViewName("other");        return mv;    }

输入浏览器http://localhost:8080/ch02_requestmapping/user/first.do?name=zhangsan

处理器方法的参数_请求参数

2.用户提交的数据162.1接收16个参数

只需确保请求参数名与请求处理方法的参数名相同。

要求:处理器(控制器)方法的形状参数名必须与要求中的参数名一致。

*同名请求参数赋值同名形参数

2.1.框架接收请求参数166

*1.使用request对象接收请求参数

*StringstrName=request.getParameter("name");

*StringstrAge=request.getParameter("age");

*2.通过DispatcherServlet调用Mycontrollerdosome()方法的springmvc框架

*调用方法时,根据名称对应,将接收的参数赋值给形参

*doSome(strName,Integer.valueOf(strAge))

*将String转换为int的框架提供类型转换功能,long,float,double等类型。

*

*400状态码是客户端的错误,表示在提交请求参数的过程中出现了问题。

项目:receiveParameters-property。在requestmaping-method的基础上进行修改。

Step1:修改index页面

<form action="receiveproperty.do" method="post">            姓名:<input type="text" name="name"> <br/>            年龄:<input type="text" name="age"> <br/>            <input type="submit" value=“提交参数”>        </form>

MyControlerler

//指定some.do使用get请求   14    @RequestMapping(value = "/receiveproperty.do")    public ModelAndView doSome(String name, Integer age){        System.out.println("doSome, name="+name+"   age="+age);        ///可直接在方法中使用 name , age        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        mv.addObject("myname",name);        mv.addObject("myage",Integer.valueOf(age));        //show是视图文件的逻辑名称(文件名称)        mv.setViewName("show");        return mv;    }

show.jsp

<%--展示数据  16--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>    <h3>/WEB-INF/view/show.jsp从request作用域获取数据</h3><br/>    <h3>myname数据:${myname}</h3><br/>    <h3>myage数据:${myage}</h3></body></html>

处理器方法的参数_System_02

2.2.解决中文乱码16-17的问题

注意:

在提交请求参数时,中文没有乱码。

使用post提交请求,中文有乱码,需要用过滤器处理乱码问题。

过滤器可以自定义,也可以使用CharacterencodingFilterter

get请求16

index.jsp

<form action="receiveproperty.do" method="get">            姓名:<input type="text" name="name"> <br/>            年龄:<input type="text" name="age"> <br/>            <input type="submit" value=“提交参数”>        </form>

可以看出,get请求方法没有中文乱码问题

处理器方法的参数_请求参数_03

post请求17

但是post不好,需要用过滤器来处理乱码问题。

处理器方法的参数_System_04

web.xml添加过滤器配置

 <!--注册声明过滤器,解决post请求乱码的问题  17-->    <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>

@RequestMapping(value = "/receiveproperty.do")    public ModelAndView doSome(String name, Integer age){        System.out.println("doSome, name="+name+"   age="+age);        ///可直接在方法中使用 name , age        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        mv.addObject("myname",name);        mv.addObject("myage",Integer.valueOf(age));        //show是视图文件的逻辑名称(文件名称)        mv.setViewName("show");        return mv;    }

处理器方法的参数_System_05

源码分析17

核心方法设置在字符集中

处理器方法的参数_数据_06

2.2.2校正请求参数名@RequestParam20020

所谓校正请求参数名,是指请求URL携带的参数名和处理方法中指定的参数名

在处理方法参数之前,应添加不同的注释@RequestParam(“请求参数名”)

索取URL所携带参数的名称。该注释修改了处理器的方法参数。value属性指定请求参考

数的名称。

Step1:修改index页面

修改表单中的参数名称与原来不同。

处理器方法的参数_System_07

index.jsp

<p>请求参数名和处理器方法的形状参数不同</p><form action="receiveparam.do" method="post">    姓名:<input type="text" name="rname"> <br/>    年龄:<input type="text" name="rage"> <br/>    <input type="submit" value=“提交参数”></form>

MyController

@RequestMapping(value = "/receiveparam.do")    public ModelAndView receiveParam(@RequestParam("rname") String name,                                     @RequestParam("rage") Integer age){        System.out.println("doSome, name="+name+"   age="+age);        ///可直接在方法中使用 name , age        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        mv.addObject("myname",name);        mv.addObject("myage",age);        //show是视图文件的逻辑名称(文件名称)        mv.setViewName("show");        return mv;    }

处理器方法的参数_请求参数_08

2.2.1@Requestparam注释属性20

@RequestParam:在逐一接收请求参数时,解决了请求中参数名称参数不同的问题

属性:1.value请求中的参数名称

2.required是bolean,默认是truee。

true:该参数必须包含在表示请求中。

位置:在处理器方法的形参定义之前

关注required属性

但是我们直接在浏览器中输入http://localhost:8080/ch03_recevieparam/receiveparam.do,结果显示访问失败,因为我们的请求缺乏参数rname和rage(错误报告提示RequiredStringparameter'rname'isnotpresent

处理器方法的参数_System_09

然而,当我们在Mycontroler类中修改receiveParam方法的@requestParam属性required为false时,我们表示我们可以访问receiveParam参数而不携带rname和rage参数

@RequestMapping(value = "/receiveparam.do")    public ModelAndView receiveParam(@RequestParam(value = "rname",required = false) String name,                                     @RequestParam(value = "rage",required = false) Integer age){        System.out.println("doSome, name="+name+"   age="+age);        ///可直接在方法中使用 name , age        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        mv.addObject("myname",name);        mv.addObject("myage",age);        //show是视图文件的逻辑名称(文件名称)        mv.setViewName("show");        return mv;    }

处理器方法的参数_请求参数_10

接收212.2对象参数

只要请求参数名与该对象的属性相同,就将处理器方法的参数定义为一个对象。

处理器方法参数为java对象,该对象的属性名与请求中的参数名相同

框架将创建形参的java对象,并赋予属性值。请求中的参数为name,框架将调用setname()

Mycontroller

/**     * 接收对象参数  21     * java对象是处理器方法的形参, 该对象的属性名与请求中的参数名相同   21     * 框架将创建形参的java对象, 赋值属性。 请求中的参数是name,将setname()调用到框架中     * @return     */    @RequestMapping(value = "/receiveobject.do")    public ModelAndView receiveParam(Student myStudent){        System.out.println("receiveobject, name="+myStudent.getName()+"   age="+myStudent.getAge());        ///可直接在方法中使用 name , age        ///处理some.do请求了。 相当于service调用处理的完成。        ModelAndView mv  = new ModelAndView();        mv.addObject("myname",myStudent.getName());        mv.addObject("myage",myStudent.getAge());        mv.addObject("mystudent",myStudent);        //show是视图文件的逻辑名称(文件名称)        mv.setViewName("show");        return mv;    }

Student

package com.bjpowernode.vo;///保存请求参数值的普通类   21public class Student {    // 属性名与请求中的参数名相同    private String name;    private Integer age;    public Student() {        System.out.println(===Student的无参数构造方法===);    }    public String getName() {        return name;    }    public void setName(String name) {        System.out.println("setName"+name);        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        System.out.println("setAge"+age);        this.age = age;    }    @Override    public String toString() {        return "Student{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}

index.jsp

<br/>        <p>使用java对象接收请求参数</p>        <form action="receiveobject.do" method="post">            姓名:<input type="text" name="name"> <br/>            年龄:<input type="text" name="age"> <br/>            <input type="submit" value=“提交参数”>        </form>

show.jsp

<%--展示数据  16--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>    <h3>/WEB-INF/view/show.jsp从request作用域获取数据</h3><br/>    <h3>myname数据:${myname}</h3><br/>    <h3>myage数据:${myage}</h3>    <h3>student数据:${mystudent}</h3></body></html>

处理器方法的参数_请求参数_11