Servlet转发到html页面样式丢失的问题
在做书城项目的注册功能时需要实现: 在web层判断如果注册成功需要转发到注册成功页面regist_success.html
//调用service将用户信息保存到数据库
userService.registerUser(new User(null, username, password, email));
//跳转到注册成功页面
request.getRequestDispatcher("/pages/user/regist_success.html").forward(request,response);
但是转发到regist_success.html页面之后该页面原来的样式也丢失了
于是为了方面我使用get请求进行测试(浏览器地址栏中直接请求registerServlet:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/pages/user/regist_success.html").forward(request,response);
}
转发页面的结果如下:
这肯定是css样式文件路径的问题:
查看network中css文件的请求路径:
查看html代码中的请求路径:
<link type="text/css" rel="stylesheet" href="../../static/css/style.css" >
对比这三个路径可以发现html文件中的资源请求的相对路径是参照的浏览器地址栏中的地址:
http://localhost/book/registerServlet
这里由于服务端Servlet使用的是转发,所以浏览器地址栏中的请求地址没有改变,这也就导致了资源请求路径错误(我们预想注册成功的这个html页面是相对于自己在服务端的路径的)
项目路径:
解决方法:
- 在html的head标签中使用base标签,固定该页面中相对路径的参照路径
<base href="http://localhost/book/pages/user />
- Servlet中使用重定向:这样浏览器中的地址会与重定向的地址相同
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("/book/pages/user/regist_success.html");
}
<link type="text/css" rel="stylesheet" href="/book/static/css/style.css" >
PS:如果修改之后请求的结果还每个发生变化,要么就是改错了,要么就是浏览器有缓存
你只管出发,旅途自有风景~~