http://blog.csdn.net/mingtianhaiyouwo/article/details/50395346
https://www.cnblogs.com/sunniest/p/4555801.html
这里多了一个layoutUrl的属性配置:<property name="layoutUrl"value="layout/layout.vm" />, 这个配置是设置你的layout文件的存在路径,需要注意的是,这个路径不是相对于webapp路径来的,而是相对于velocityConfig配置中的resourceLoaderPath属性配置的路径(resourceLoaderPath的路径是相对于webapp的路径)。
https://www.cnblogs.com/xiaoxi/p/5695783.html (springMVC提供和请求参数对应bean的接收方式来接收参数)
@RequestMapping(value={"","/"})
意思是说请求路径 可以为空或者/
我给你举个例子:比如百度知道的个人中心 访问路径是
http://zhidao.baidu.com/ihome,当然你也可以通过 http://zhidao.baidu.com/ihome/来访问
我给你举个例子:比如百度知道的个人中心 访问路径是
http://zhidao.baidu.com/ihome,当然你也可以通过 http://zhidao.baidu.com/ihome/来访问
为什么是ihome后开始对value进行匹配?什么时候是com后开始进行匹配(工作系统便是从com开始进行匹配),由什么决定?
@PathVariable 按路径匹配参数(问号前的参数)
@RequestBody
@RequestParam
- GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
- 在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: “json”,contentType:”application/json” 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
javascript代码
“`
(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"test","address":"gz"};
var data2={"userName":"ququ","address":"gr"};
saveDataAry.push(data1);
saveDataAry.push(data2);.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
});
java代码:
“ @RequestMapping(value = “saveUser”, method = {RequestMethod.POST }})
@ResponseBody
public void saveUser(@RequestBody List users) {
userService.batchSave(users);
}
@Controller和@RestController的区别?
springMVC返回页面或数据:
返回视图:
不对springMVC配置任何东西的时候在return “X”的时候自动回去找X对应的视图,很显然由于没有做任何配置,会报404,所以如果你要想返回一个视图(HTML(也可使用转发)或jsp,Velocity, FreeMarker, XML, PDF, Excel等)需要给spring配视图解析。
<!--解析返回JSP视图-->
<bean id="viewResolverJsp"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp" />
<property name="order" value="2"/>
</bean>
返回数据:(//数据在的页面是哪个html的??)
不对springMVC配置任何东西的时候在return “X”的时候自动回去找X对应的视图,所以返回数据的时候需要配@ResponseBody
@ResponseBody
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等格式或没有格式的java类型数据)使用;
当页面发出异步请求:
function login() {
var datas = '{"username":"' + $('#username').val() + '","userid":"' + $('#userid').val() + '","status":"' + $('#status').val() + '"}';
$.ajax({
type : 'POST',
contentType : 'application/json',
url : "${pageContext.request.contextPath}/user/login",
processData : false,
dataType : 'json',
data : datas,
success : function(data) {
alert("userid: " + data.userid + "username: " + data.username + "status: "+ data.status);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("出现异常,异常信息:"+textStatus,"error");
}
});
};
例如:
@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去
public User login(User user) {
User user = new User();
user .setUserid(1);
user .setUsername("MrF");
user .setStatus("1");
return user ;
}
自己封装的状态码和浏览器看到的404,200,500等有什么区别》这些常见的状态码是怎么来的??
springMVC异步处理请求:(logger无法打印request的问题)
返回视图加数据:
controller的方法返回值类型为ModelAndView,
return new ModelAndView("list", map);前者为视图名,后者为map封装的数据Map<String, Object> map = new HashMap<>();
同时配走springMVC和不走springMVC的请求
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
请求的第一站是springMVC的前端控制器DispatcherServlet, 大多数基于java的web前端框架都有前端控制器。DispatcherServlet负责将请求发送给控制器controller,因此DispatcherServlet需要知道应该将请求发给哪个controller。所以DispatcherServlet会查询一个或多个处理器映射(handler mapping)决定将请求交给哪个controller。控制器controller做的最后一件事是将业务数据包装(比如ModelMap)和视图名返回给DispatcherServlet(实际项目只返回视图名即可怎么回事)。Dispatcher调用视图解析器查找到具体的视图实现(jsp或vm文件等等)。视图使用模型数据渲染输出,输出通过响应对象传递给客户端。