关于WEB-INF的访问

先上图

在这里插入图片描述

说明

WEB-INF里内容只能由服务器级别才能访问,客户端级别不能访问。

服务器级别的例子就是请求转发,转发是由服务器自己处理,跟客户端(浏览器)无关,所以浏览器上的地址栏也就不会改变。
客户端级别的例子就是重定向,两次请求,两次响应。所以地址栏会改变。

为什么设置这种权限

为了安全。比如图中success.jsp在WEB-INF目录下,在页面中用超链接a标签或者js的location.href去直接转向它,会找不到。因为这种是客户端请求,设置这种权限就能保证一些文件的安全。

怎么让客户端级别可以访问

放在webapp下。

代码演示一波

  1. 看图可知,login.jsp文件在wepapp目录下,也就是项目名下。

login.jsp

<form method="post" action="${pageContext.request.contextPath}/login3.action">
        用户名:<input type="text" name="username"><br>
        密  码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
 </form>
  1. 输入数据,提交到映射的处理器

UserController

	@RequestMapping("login3.action")
    public void login3(User user, HttpSession session, HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
    
    
        if ("jack".equals(user.getUsername())&&"1234".equals(user.getPassword())){
    
    
            request.getRequestDispatcher("WEB-INF/jsp/success.jsp").forward(request,response);
        }else {
    
    
            response.sendRedirect("WEB-INF/jsp/fail.jsp");
        }
    }
  1. 数据匹配正确,会请求转发。
    注意,success.jsp页面在WEB-INF目录下,所以请求转发的路径参数要加上WEB-INF/jsp。
  2. 数据匹配不正确,会重定向。
    注意,fail.jsp在WEB-INF目录下,所以该路径没写错。但是重定向的原理是让客户端再次访问,而WEB-INF目录下的文件不能被客户端访问,所以会报404-未找到。

有一些标签,可以访问到WEB-INF目录中的文件

如果符合要求的情况下也可以在jsp中使用,(原理也都是请求转发)如:

<a href="javascript:<jsp:forward page='WEB-INF/xxxx.jsp'/>"></a>
<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />
<jsp:include page="WEB-INF/xxx.jsp">

猜你喜欢

转载自blog.csdn.net/qq_43639081/article/details/109200999
今日推荐