SpringMVC请求参数传值、重定向(redirect)与转发(forward)
⼀、1、Spring MVC请求参数传值类型有:基本数据类型、封装类对象\类类型(String…)、复杂处置类型(List<;类对象>、类对象.属性、…)。
2、环境搭建所需包:
3、前端控制器配置–l:
也可以在we.xml中配置字符编码类型,解决请求参数传值中⽂乱码。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"java.sun/dtd/web-app_2_3.dtd">
<web-app version="3.0" xmlns="java.sun/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/javaee
java.sun/xml/ns/javaee/web-app_3_0.xsd">
<!---->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
method to doing 还是to do
</servlet-mapping>
<!--字符编码配置-->
<filter>
<filter-name>fileEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--此处需要注意的是设置请求参数过滤初始化属性值是,字符编码属性名称必须是encoding,不能根据⾃⼰的意愿更改名称--> <init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>fileEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4、Spring MVC 配置⽂件-l:
注解扫描配置、注解驱动、视图解析器配置(可以不配置,使⽤SpringMVC默认的视图解析器)。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:mvc="/schema/mvc"
xmlns:context="/schema/context"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd
/schema/context
/schema/context/spring-context.xsd
/schema/mvc
/schema/mvc/spring-mvc.xsd">
<!--注解开发扫描配置-->
<context:component-scan base-package="Controller"></context:component-scan>
<!--注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--视图解析器(ViewResolver)-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property><!--前缀-->
<property name="suffix" value=".jsp"></property><!--后缀-->
</bean>
</beans>
5、控制器类-controller:
详细介绍了基本数据类型、类对象、复杂传值类型及重定向(redirect)\转发(forward)使⽤关键字、不使⽤关键字与视图解析器之间的关系。
package Controller;
import Model.Demo;
import Model.DemoList;
import Model.People;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;osi模型的全称是
import org.springframework.web.bind.annotation.RequestParam;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@Controller
public class ControllerDemo {
/**
* 基本数据类型参数,参数名称保持与请求参数名称相同,可以⾃动注⼊参数值。
* HttpServletResponse res
* 此处参数设置:只要是请求中存在的参数都可以在⽅法中接收到,例如:HttpServletResponse res、HttpServletRequest、...
* 上述参数都可以接收到
*
* 参数设置:1、请求参数名称与⽅法中的参数名称不⼀致使⽤注解:@RequestParam(value ="name"),也可以省略value直接@RequestParam("age")
* 2、给参数设置默认值默认值:@RequestParam(defaultValue ="默认值")
* 3、设置请求参数必须要有值:@RequestParam(required =true):此处介绍下基本数据类型与封装数据类型区别:例如:int和Integer--int的默认值是0,I nteger的默认值是null;
* 当注解中的required值设置为true时,是允许传null的,因此String类型的参数null是可以通过的。
*/
@RequestMapping("Demo01")
public String Demo01(@RequestParam(value ="name") String name1, @RequestParam("age") int age1) throws IOException {
System.out.println("Demo01请求" + name1 + " -- " + age1);
/*Map<String,String> map = new HashMap<>();
map.put("name",name);
map.put("age",age+"");
map.put("age",age+"");
ObjectMapper obj = new ObjectMapper();
String result = obj.writeValueAsString(map);*/
/**
* 此处需要注意的是接收参数HttpServletResponse需要引⼊包
*/
/*res.setContentType("application/json;charset=UTF-8");
PrintWriter pw = Writer();
pw.print(result);
pw.flush();
pw.close();*/
return"main.jsp";
}
@RequestMapping("Demo02")
public String Demo02(@RequestParam(defaultValue ="默认值") String name,@RequestParam(defaultValue ="19") int age){
System.out.println("这是Demo02"+name+" --- "+age);
return"main.jsp";
}
@RequestMapping("Demo03")
public String Demo03(@RequestParam(value ="age",required = true) int age1){
System.out.println("这是Demo03"+age1+" --- ");
return"main.jsp";
}
/**
* 封装对象类型赋值:要保证封装类中的属性名称与请求参数名称⼀致,此处要特别注意的是封装类没有注解可以注⼊请求参数名称和封装类属性名称不⼀致的情况
* 因此要保证请求参数的值注⼊成功,要保证名称⼀致。
*/
@RequestMapping("Demo04")
public String Demo04(People peo){
jsp中文全称System.out.println("这是对象赋值注⼊"+Name()+" --- "+Age());
return"main.jsp";
}
/**
websocket极限测试* 使⽤List集合接收参数
*/
@RequestMapping("Demo05")
public String Demo05(@RequestParam("like") List<String> check){
System.out.println("这是Demo05"+String());
htmlinputtype属性
return"main.jsp";
}
/**
* 接收复杂参数类型 -- peo.name \ peo.age
*/
@RequestMapping("Demo06")
public String Demo06(Demo demo){
System.out.println("这是Demo06"+Peo().getName()+" --- "+Peo().getAge());
return"main.jsp";
}
/**
float是c语言的什么意思
* 使⽤List集合⽅式接收封装对象类型
*/
@RequestMapping("Demo07")
public String Demo07(DemoList list){
System.out.println("这是Demo07"+list);
return"main.jsp";
}
}
/**
* 使⽤restful传值⽅式
*/
@RequestMapping("/Demo08/{name1}/{age1}/{map}")
public String Demo08(@PathVariable("name1") String name,@PathVariable("age1") int age,@PathVariable("map") String map){
System.out.println("这是restful传值⽅式"+name+" --- "+age+" --- "+map);
//此处需要注意的是要在跳转之前使⽤/,因为使⽤restful⽅式时,使⽤的相当于是绝对路径,此处不使⽤/默认就是使⽤@RequestMapping()中请求地址/D emo08/XX/main.jsp.
return"/main.jsp";
}
/**
* Spring MVC中的转发(forward)与重定向(redirect)
* springMVC 默认使⽤的是转发--forward,往往省略;及在没有⼿动配置的视图解析器时return "main.jsp"=return"forward:main.jsp";
* 下边主要解释下如果⼿动配置视图解析器(ViewResolver)使⽤forward、redirect和不使⽤的区别:
* 1、当配置配置⽂件中配置了视图解析器,不使⽤forward或者redirect,默认⾛配置的视图解析器,
* 2、使⽤forward或者redirect时,默认⾛springMVC默认不⾛配置⽂件中配置的视图解析器,⾛SpringMVC的默认视图解析器。
* 3、因为在使⽤forward或者redirect关键字时,不⾛配置的视图解析器,所以return "forward:Demo09",跳转的是Demo09⽅法中。
*/
@RequestMapping("Demo09")
public String Demo09(){
return"main"; //⾛配置的视图解析器
}
@RequestMapping("Demo10")
public String Demo10(){
//return "forward:/WEB-INF/web/main.jsp"; //⾛配置的视图解析器
return"redirect:/web/abc.jsp"; //此处重定向到WEB-INF下是不成功,例如错误实例:return "redirect:/WEB-INF/web/main.jsp";
}
}
6、类对象:People.java:
package Model;
public class People {
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;
}
}
Demo.java:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论