现在比较流行RESTful风格,而通过URL进行参数的传递这就符合RESTful风格。
-
什么是RESTful风格呢?
对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构). -
什么是REST呢?
REST就是一种设计API的模式。 -
springMVC对于RESTful的支持:
(1) 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型
(2)利用@PathVariable讲URI请求模板中的变量映射到处理方法参数上
(3)利用Ajax,在客户端发出PUT、DELETE动作的请求
以上关于RESTful的介绍来源于:什么是REST以及 RESTful?
一,使用URL传递参数
使用URL进行参数的传递需要注解@RequestMapping
和@PathVariable
。这里的URL将写作(/ParamsController/getStudentName/Tom
)。
1.1 代码部分
1.1.1 Controller
@Controller
@RequestMapping("/ParamsController")
public class ParamsController {
@Autowired
private StudentService studentService;
@RequestMapping(value = "/getStudentName/{studentName}")
public ModelAndView URLPathVariable(@PathVariable String studentName){
Student student = studentService.selectStudent(studentName);
ModelAndView mv = new ModelAndView();
mv.addObject("Student", student);
mv.setViewName("StudentInfo");
return mv;
}
1.1.2效果展示
二,这是一个只支持GET请求的方法
当我们把请求方法改为POST时
就出现了这样的问题:
Request method 'GET' not supported
因此,通过URL传递参数是一种只支持GET的方法,同时了,@RequestMapping
的如果不限定RequestMethod
的值,以下都可以访问
RequestMethod.GET
RequestMethod.POST
RequestMethod.PUT
RequestMethod.DELETE
三、AJAX默认是异步的
原本自己想的是前端输入一个姓名,点击查询,就可以进行跳转到对应的信息页面。
js代码如下:
<h1>-------------------------------URL参数传递-------------------------------------------</h1>
<form id="studentNameForm">
<h2>查询学生的姓名:<input id="studentName" name="studentName" value=""/>
<input id="btn1" type="submit" value="查询"/></h2>
</form>
<script>
$(function () {
$("#btn1").click(
function () {
$.ajax({
url:"/ParamsController/getStudentName/"+$("#studentName").val(),
type:"POST",
success:function () {
// window.location.href="*****";没有
}
});
});
console.log(url);
});
</script>
但是后台成功的接收到了前端传来的数据,但是却没有进行页面的跳转。
如图:
后端页面获取到了前端传来的值,但是却没有进行跳转。
其实这是因为忽略了AJAX是异步的。
ajax实际上是通过XMLHttpRequest来向服务器发送异步请求的,从服务器获取数据,然后使用JS来更新页面,这也就是常说的局部刷新实现方式,所以ajax请求之后,服务器返回的都是纯文本流,客户端的浏览器在获取ajax异步结果时,不是直接显示在页面上,而是要通过js来进行处理,js处理完以后才能显示在页面上,所以这才导致了controller中的ModelAndView对象不能直接返回视图。
网上有一种解决方法是:
这里的解决方案,应该是:
ajax传输数据成功后,返回数据,然后使用
window.location.href="对应的controller页面"+"data返回的数据";
这样的形式进行跳转。