此注解就是来映射服务器访问的路径.
此注解可加在方法上,是为此方法注册一个可以访问的名称(路径),也就是同门访问的路径
@RequestMapping("/demo")
public String demo(){
System.out.println("服务器被访问到了.......");
return "main"; //可以直接跳到/admin/main.jsp页面上
}
<a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>
@RequestMapping("/user")
public class DemoAction1 {..}
<a href="${pageContext.request.contextPath}/user/demo.action">访问服务器</a>
提交过去之后,根据不同的请求方式跳转到同一个服务器,同样路径名称的不同方法中,由于提交方法不同,所以会访问两种不同的请求方式
<h2>测试不同的提交方式</h2>
<%--提交过去之后,根据不同的请求方式跳转到同一个服务器,同样路径名称的不同方法中--%>
<form action="${pageContext.request.contextPath}/req.action" method="post">
<input type="submit" value="提交">
</form>
/*由于表单提交的请求方式不一样,所以即使相同的路径名称也可以访问不同的方法功能*/
@RequestMapping(value = "/req",method = RequestMethod.GET)
public String req(){
System.out.println("处理get请求的方式");
return "main";
}
@RequestMapping(value = "/req" ,method = RequestMethod.POST)
public String req1(){
System.out.println("处理post请求方式");
return "main";
}
页面:
<form action="${pageContext.request.contextPath}/one.action">
姓名:<input name="myname"><br>
年龄:<input name="age"><br>
<input type="submit" value="提交">
form>
action:
@RequestMapping("/one")
public String one(String myname,int age){ ===>自动注入,并且类型转换
System.out.println("myname="+myname+",age="+(age+100));
return "main";
}
在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可以自动创建对象,则可以自动提交数据,自动类型转换,自动封装数据到对象中.
实体类:
public class Users {
private String name;
private int age;}
页面:
<form action="${pageContext.request.contextPath}/two.action" method="post">
姓名:<input name="name"><br>
年龄:<input name="age"><br>
<input type="submit" value="提交">
form>
action:
@RequestMapping("/two")
public String two(Users u){
System.out.println(u);
return "main";
}
仅限于超链接或地址拦提交数据.它是一杠一值,一杠一大括号,使用注解@PathVariable来解析.
<a href="${pageContext.request.contextPath}/three/张三/22.action">动态提交a>
@RequestMapping("/three/{uname}/{uage}")
public String three(
@PathVariable("uname") ===>用来解析路径中的请求参数
String name,
@PathVariable("uage")
int age){
System.out.println("name="+name+",age="+(age+100));
return "main";
}
/**
* 姓名:
* 年龄:
*/
@RequestMapping("/four")
public String four(
@RequestParam("name") ===>专门用来解决名称不一致的问题
String uname,
@RequestParam("age")
int uage){
System.out.println("uname="+uname+",uage="+(uage+100));
return "main";
}
原始的方法使用request取出对象
/**
* 姓名:
* 年龄:
*/
@RequestMapping("/five")
public String five(HttpServletRequest request){
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println("name="+name+",age="+(age+100));
return "main";
}
中文乱码解决方案
在web.xml配置过滤器.
<filter>
<filter-name>encodefilter-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>forceRequestEncodingparam-name>
<param-value>trueparam-value>
init-param>
<init-param>
<param-name>forceResponseEncodingparam-name>
<param-value>trueparam-value>
init-param>
filter>
<filter-mapping>
<filter-name>encodefilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
前端发送的请求:
<a href="${pageContext.request.contextPath}/one.action">1.请求页面a><br><br>
<a href="${pageContext.request.contextPath}/two.action">2.请求转发actiona><br><br>
<a href="${pageContext.request.contextPath}/three.action">3.重定向跳转a><br><br>
<a href="${pageContext.request.contextPath}/four.action">4.重定向action跳转a><br> <br>
由于没有重定向,知识转发所以即使跳转到/admin/main.jsp页面,请求路径依然是:
http:localhost:8080/one.action
@RequestMapping("/one")
public String one(){
System.out.println("这是请求转发页面跳转.........");
return "main"; //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
}
同样,使用转发方式地址栏的路径不会改变:
http:localhost:8080/two.action
@RequestMapping("/two")
public String two(){
System.out.println("这是请求转发action跳转.........");
// /admin/ /other.action .jsp
//forward: 这组字符串可以屏蔽前缀和后缀的拼接.实现请求转发跳转
return "forward:/other.action"; //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
}
有重定向:会停留在最终资源所在位置
@RequestMapping("/three")
public String three(){
System.out.println("这是重定向页面.......");
//redirect: 这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
return "redirect:/admin/main.jsp";
}
本次不一样的是,在本次重定向之后还有请求转发,所以会停留在重定向的位置,而不是最终资源页面
@RequestMapping("/four")
public String four(){
System.out.println("这是重定向action.......");
//redirect: 这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
return "redirect:/other.action";
}
@Controller
public class OtherAction {
@RequestMapping("/other")
public String other(){
System.out.println("other的action访问");
return "main";
}
}