欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在用SSM做项目的时候遇到的一些小坑

程序员文章站 2022-07-10 17:55:36
...

1.静态资源的配置

在用SSM做项目的时候遇到的一些小坑
如图,静态文件.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中文件结构目录
在用SSM做项目的时候遇到的一些小坑
WebContent下直接放的静态文件,那么location的其实位置是什么呢,看一下IDEA的 project structure
在用SSM做项目的时候遇到的一些小坑
也就是说/是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

在用SSM做项目的时候遇到的一些小坑
报错代码如下

@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>

即可正常请求