Spring MVC 基础入门二
2020-12-13 04:44
标签:utf-8 row col 处理 名称 void monkey 定义 www 在实际开发中通过会在spring MVC的Controller里面接收表单提交过来的参数,这块代码该怎么去编写呢? 示例: 编写一个带有表单的jsp: 之后创建一个controller来接收这个表单提交的值: 创建result.jsp 在上面的controller中,我们在regist1方法后面的参数列表中写上了两个参数username和age,因为这两个参数与表单中input中的name一致,所以spring MVC会自动为其赋值,通过这种方式就可以在controller中获取表单提价的数据了。 此时你可能会发现一个问题,在之前我们写的controller中的方法参数列表里面我们都写上了request和response,而这里却没有写,其实这不会影响spring mvc的工作,也就是说在controller的方法里面,我们可以写多个参数,也可以一个都不写,不过spring mvc只会自动为以下五个参数进行自动赋值: 当前示例其实就是spring mvc将请求携带参数进行赋值,这样子我就可以直接获取表单提交的数据了。其他的以后在介绍。 在上面的示例中,倘若你输入了中文,那很有可能出现乱码问题,我们可以使用spring MVC为开发者提供的CharacterEncodingFilter来解决乱码问题,这个其实就是一个过滤器。我们需要在web.xml文件中进行配置,最好将其设置在其他过滤器之前,因为过滤器是按照web.xml中的顺序执行的: 这里可以通过springmvc的源码中看到forceEncoding如果设置为true的话,那么不论你是否在request中设置了字符编码,spring mvc都会强制将其字符编码设置为我们在web.xml文件中写的字符编码。 在实际开发中有可能会有这样的问题,就是表单中input的name和spring mvc方法中的参数名不一致,这时可以使用@RequestParam()注解来解决这个问题,这个注解中有三个属性: 在之前的示例基础上进行修改: 在controller的方法中的参数名与表单中的参数名不一致,使用@RequestParam: 设置defaultValue属性,当在jsp中没有填写年龄时,spring mvc会默认将其赋值为18 设置required=true,此时系统会报出400的错误,因为请求参数中没有sex。 在之前的接收表单提交参数的示例中有个问题,倘若表单中的参数较多的话,需要在controller的方法里面把这些参数都写上,这样就不太方便了,我们可以定义一个javabean,将表单中的参数都写到javabean的属性里面,然后将这个bean作为参数写到controller的方法中。 示例: 定义一个Student类,里面的属性名跟表单的name保持一致 定义Controller,在方法中将Student作为参数传入: 通过这种方式,我们可以更方便的接收表单提交的数据了。 当请求中的参数是一个对象属性中的属性时,我们可以在表单中的name中写上对象属性.属性的方式进行处理。 定义一个School类: 定义一个Student类,里面添加School对象属性: 修改regist.jsp: 修改RegistController02 result.jsp Controller除了可以接收表单提交的数据之外,还可以获取url中携带的变量,即路径变量,此时需要使用@PathVariable注解来设置,其中包含下面几个属性。 创建Controller,注意@RequestMapping注解中的写法 之后,在浏览器的地址栏里面直接输入: 此时可以直接获取url中的jack和19的值。 这种方式在restful风格的url中使用较多。 原文来自链接,更多内容请点击链接! Spring MVC 基础入门二 标签:utf-8 row col 处理 名称 void monkey 定义 www 原文地址:https://www.cnblogs.com/lucky1024/p/11119028.html单个接收表单提交的参数
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
form action="/regist1.do" method="post">
姓名:input type="text" name="username">br>
年龄:input type="text" name="age">br>
input type="submit" value="提交">
form>
body>
html>
package com.monkey1024.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class RegistController {
@RequestMapping("/regist1.do")
public ModelAndView regist1(String username, int age) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("username", username);
mv.addObject("age", age);
mv.setViewName("result");
return mv;
}
}
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
用户名:${username}
br>
年龄:${age}
body>
html>
获取请求参数乱码
filter>
filter-name>characterEncodingFilterfilter-name>
filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
init-param>
param-name>encodingparam-name>
param-value>utf-8param-value>
init-param>
init-param>
param-name>forceEncodingparam-name>
param-value>trueparam-value>
init-param>
filter>
filter-mapping>
filter-name>characterEncodingFilterfilter-name>
url-pattern>/*url-pattern>
filter-mapping>
参数名不一致的情况
表单内容不变:form action="/regist1.do" method="post">
姓名:input type="text" name="username">br>
年龄:input type="text" name="age">br>
input type="submit" value="提交">
form>
@RequestMapping("/regist.do")
public ModelAndView regist(@RequestParam(name="username") String t_username, @RequestParam(name="age") int t_age) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("username", t_username);
mv.addObject("age", t_age);
mv.setViewName("result");
return mv;
}
@RequestMapping("/regist.do")
public ModelAndView regist(@RequestParam(name="username") String t_username, @RequestParam(name="age",defaultValue = "18") int t_age) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("username", t_username);
mv.addObject("age", t_age);
mv.setViewName("result");
return mv;
}
@RequestMapping("/regist.do")
public ModelAndView regist(@RequestParam(name="username") String t_username, @RequestParam(name="age",defaultValue = "18") int t_age, @RequestParam(required = true) String sex) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("username", t_username);
mv.addObject("age", t_age);
mv.setViewName("result");
return mv;
}
使用对象来接收表单提交的参数
package com.monkey1024.bean;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.monkey1024.controller;
import com.monkey1024.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class RegistController02 {
@RequestMapping("/regist.do")
public ModelAndView regist(Student student) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("name", student.getName());
mv.addObject("age", student.getAge());
mv.setViewName("result");
return mv;
}
}
对象属性参数的接收
package com.monkey1024.bean;
public class School {
private String schoolName;
private String address;
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
package com.monkey1024.bean;
public class Student {
private String name;
private int age;
private School school;
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
form action="/regist.do" method="post">
姓名:input type="text" name="name">br>
年龄:input type="text" name="age">br>
学校名称:input type="text" name="school.schoolName">br>
学校地址:input type="text" name="school.address">br>
input type="submit" value="提交">
form>
package com.monkey1024.controller;
import com.monkey1024.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class RegistController02 {
@RequestMapping("/regist.do")
public ModelAndView regist(Student student) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("name", student.getName());
mv.addObject("age", student.getAge());
mv.addObject("schoolName", student.getSchool().getSchoolName());
mv.addObject("address", student.getSchool().getAddress());
mv.setViewName("result");
return mv;
}
}
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
用户名:${name}
br>
年龄:${age}
br>
密码:${password}
br>
学校名称:${schoolName}
br>
学校地址:${address}
body>
html>
PathVariable
package com.monkey1024.controller;
import com.monkey1024.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class RegistController03 {
@RequestMapping("/{username}/{age}/regist.do")
public ModelAndView regist(@PathVariable("username") String name,@PathVariable int age) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("name", name);
mv.addObject("age", age);
mv.setViewName("result");
return mv;
}
}
localhost:8080/jack/19/regist.do