ssm 返回jsp页面时请求在WEB-INF里的静态js,css资源404错误

今天做老师的一个实验,试用一下ssm。实验的前端页面是在服务器上jsp返回的。

但是在请求jsp的js,css文件时报错404

然后就去百度了spring mvc怎么访问WEB-INF下的静态资源。。。

spring mvc 3.0之后提供了两种方法大家肯定可以百度的到。

一种就是<mvc:resources />

贴一篇自己看过的感觉还行的文章。

https://www.cnblogs.com/caogen1991/p/7921748.html

还一种是在web.xml里面对于后缀是js,css的请求放开拦截。

在这个帖子的一楼有:

https://bbs.csdn.net/topics/392181601

我用的是上面的那种。

但是还是出问题了。

这是webapp的文件目录。

在spring-mvc的xml配置文件里面加上了:

    <!-- 访问静态资源 -->
    <!-- 将springmvc不能处理的请求交给tomcat -->
    <mvc:default-servlet-handler/>
    <mvc:resources mapping="/css/**" location="/WEB-INF/jsp/css/"/>
    <mvc:resources mapping="/js/**" location="/WEB-INF/jsp/js/"/>

关于这段代码的各个属性值的解释都在上方的第一个链接里面了,我就不再复述了。大概意思就是将/WEB-INF/jsp/css里面的文件映射成虚拟路径/css/**,本来不能访问的css资源现在可以通过localhost:8080/css/xxxx.css访问了。

本以为这样就能够加载js和css了,没想到还是404.

在这里也尝试将mapping里面的虚拟路径更改成/**/css/**,/user/css/**,/*/css/**之类的,发现都不行。

我自己都不知道8080后面这个/user是怎么冒出来的,然后看了下自己的controller.我首先怀疑的就是这里。

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @RequestMapping(value = "/msg")
    public User GetUser(){
        User user = new User();
        user = userService.getUserById(1);
        return user;
    }

    @GetMapping(value = "/registerPage")
    public String Register(){

        return "register";
    }
}

jsp页面就是下面那个方法返回的,返回的是register.jsp。(这个不懂的百度(ssm视图解析器)。。我也讨厌这个)

此时请求这个jsp页面的url是localhost:8080/user/registerPage.

然后在这个jsp里面引用js和css我写的是相对路径,jsp放在WEB-INF下的jsp文件夹中(上面贴过目录)

    <link href="./css/registercss.css" type="text/css" rel="stylesheet">
    <script src="./js/registerjs.js"></script>

然后。。请求css和js的url给我自动改成了带一个/user的。

明显localhost:8080/css/register.css才应该是正确的访问路径。

然后尝试改了一下controller。

@Controller
@RequestMapping("")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @RequestMapping(value = "/msg")
    public User GetUser(){
        User user = new User();
        user = userService.getUserById(1);
        return user;
    }

    @GetMapping(value = "/registerPage")
    public String Register(){

        return "register";
    }
}

发现把头上的user直接去掉是可以的。

@Controller
@RequestMapping("")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @RequestMapping(value = "/user/msg")
    public User GetUser(){
        User user = new User();
        user = userService.getUserById(1);
        return user;
    }

    @GetMapping(value = "/user/registerPage")
    public String Register(){

        return "register";
    }
}

把user放到里面是不可以的。

可是我就是想在头上加user。

然后一气之下跑到jsp里面把引用直接改成了。

    <link href="http://localhost:8080/css/registercss.css" type="text/css" rel="stylesheet">
    <script src="http://localhost:8080/js/registerjs.js"></script>

好了,现在不管我user的路由怎么写都可以,感觉好像不太好。。

总结:感觉继续深究要去看很多代码。。猜测是神秘生物将我的路径前面加了个user,不是很懂,希望大佬指教。

        虽然不要把静态资源放在WEB-INF里面就不会有这么麻烦,可我就是想试试。。

        最后这个方法肯定不是很好,看着就变扭。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值