在用SSM做项目的时候遇到的一些小坑
1.静态资源的配置
如图,静态文件.html放在webapp->WEB-INF->views下
那么利用应该怎么配置呢
一般给出的配置方式是这样的
<mvc:resources location="/" mapping="/**"></mvc:resources>
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
其中location是静态文件在本地的地址,mapping是需要映射到浏览器url的地址,也就是当我们请求127.0.0.1:8080/js/xxx.js时,服务器会在location指定的本地目录下寻找这个静态文件。
然而当我直接拷过来还是找不到,显然是因为我的本地路径不对。
先看在ecilpse中文件结构目录
WebContent下直接放的静态文件,那么location的其实位置是什么呢,看一下IDEA的 project structure
也就是说/是webapp这个路径
所以正确的配置应该是
<!--config the static file
location means filepath in project ,mapping means the url mapped
'webapp' is the start path of location , which is '/'
-->
<mvc:resources location="/WEB-INF/views/" mapping="/*.html"/>
<mvc:resources location="/WEB-INF/views/js/" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/views/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/views/images/" mapping="/images/**"/>
2.配置mvc:resources后项目报404的问题
刚开始没有配置mvc:resources,controller能够正确访问,但是由于web.xml使用/拦截了所有的请求,所以静态资源访问不上
增加mvc:resources之后,静态资源是能访问上了,但是注解配置的controller却又找不到了
原因是少了 的配置,在没有配置mvc:resources的时候没有问题,一旦配置了mvc:resources,注解方式的url就没有加载
补上 就可以解决问题
<!--if you use annotation you must configure following setting
if not, when you config the static file use 'mvc:resource',
the url define by annotation will not in operation
-->
<mvc:annotation-driven/>
参考:https://blog.csdn.net/liujunyu_10/article/details/77860369
aaa@qq.com注解
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
User字段:userName pwd
那么在前台接收到的数据为:’{“userName”:”xxx”,”pwd”:”xxx”}’
效果等同于如下代码:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
4.Ajax请求含有@ResponseBody注解的请求报500
报错代码如下
@RequestMapping(value = "/login", method = RequestMethod.POST)
public @ResponseBody User user(@RequestParam("username") String username, @RequestParam("password") String password){
System.out.println("post");
User user = userService.findByName(username);
System.out.println(user);
return user;
}
少了json的包
加入
<!--json 版本号-->
<jackson.version>2.8.7</jackson.version>
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
即可正常请求
上一篇: 表格无数据添加滚动条
下一篇: 前后端分离----跨域篇笔记
推荐阅读