访问WEB-INF下的页面
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>