WEB-INF是Java的web应用安全目录,只对服务端开放,对客户端是不可见的。所以我们可以把除首页(index.jsp)以外的页面都放在WEB-INF目录下,这样就无法通过URL直接访问页面了。
核心:
1,超链接a标签或者js的window.location.href()无法访问WEB-INF下的某一个jsp页面。
- javascrtpt:window.location.href='WEB-INF/login.jsp'
- <a href="login.jsp"></a>
- response.sendRedirect("WEB-INF/checklogin.jsp");
以上三种都不行。
2,css,javascript和图片等资源文件不能放在WEB-INF下,必须放在webRoot(WebContent)目录下。
访问时直接访问:
- <img alt="" src="image/1.jpg">
3,除首页(index.jsp)外的JSP页面都放在WEB-INF目录下。
4,通过以下方法访问WEB-INF目录下的JSP页面:
a,通过action转向访问(推荐)
- <a href="mylogin.action"></a>
b,不推荐
- <jsp:forward page = "/WEB-INF/admin/login.jsp" />
- <a href="javascript:<jsp:forward page='WEB-INF/admin/login.jsp'/>"></a>
- <jsp:include page="WEB-INF/admin/login.jsp">
实现
1、web.xml
<servlet> <servlet-name>Action</servlet-name> <servlet-class>com.wang.action.DispatcherAction</servlet-class> </servlet> <servlet-mapping> <servlet-name>Action</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
2、DispatcherAction.java
package com.wang.action; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Action转发 * <p> * 根据*.action的get请求 * 通过请求服务端转发 * 访问WEB-INF下的jsp页面 * * @date 2018/6/18 * @auther ten */ public class DispatcherAction extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(DispatcherAction.class); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取要访问的jsp页面名 String uri = req.getRequestURI(); String action = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf(".")); logger.info("action is " + action); // 生成WEB-INF路径 String url = "/WEB-INF/jsp/" + action + ".jsp"; logger.info("dispatcher is " + url); // 执行转发 req.getRequestDispatcher(url).forward(req, resp); } }3、url请求
<a href=imageshow.action>