关于JSP不能通过浏览器直接访问,要通过servlet跳转,但一个jsp文件里面用<iframe>标签包含了另一个jsp的访问问题
今天在做作业的时候遇到一个问题,以前我们写jsp代码都是放在webcontext 目录下,没有放在其子目录下面的WED-INF目录下面,所有导致浏览器可以直接访问jsp,所以存在安全性问题很大,经过了解,正确的写法是把jsp文件放在WED-INF目录下面,再通过控制器跳转。如果直接浏览器访问这个放在WED-INF目录下面的jsp就会出现404页面,找不到jsp文件。
1.首先我们来看一下放在WEB-INF目录下面的test1.jsp 是不能直接访问的,放在WebContext下面的是能够直接访问的。如图(1.1,1.2)
图1.1(jsp文件目录)
图1.2(浏览器直接访问WEB-INF下面的jsp)
图1.3(浏览器直接访问WebContext目录下面的jsp)
2.但是我们可以通过servlet跳转来访问的test1.jsp。
下面是servlet代码:
1 package com.servlet; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.annotation.WebServlet; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 @WebServlet("/TestServlet") 11 public class TestServlet extends HttpServlet { 12 private static final long serialVersionUID = 1L; 13 public TestServlet() { 14 super(); 15 } 16 protected void service(HttpServletRequest request, 17 HttpServletResponse response) throws ServletException, IOException { 18 request.setCharacterEncoding("utf-8"); 19 response.setContentType("text/html;charset=utf-8"); 20 request.getRequestDispatcher("/WEB-INF/test1.jsp") 21 .forward(request, response); 22 } 23 24 }
然后就能够访问test1.jsp了
图2.1(通过servlet跳转访问在WEB-INF目录下面的test1.jsp)
3.但是我们有时候会遇到这种情况在jsp里面用<iframe>标签包含另一个jsp要同事访问,但是被包含的那个jsp又不能被浏览器直接访问,所有智能放在web-inf目录下面,但是问题来了,通过servlet跳转只能访问外层jsp,里面被包含的jsp会出现404错误。
图3.1(外面jsp层代码包含一个jsp文件)
图3.2(访问jsp结果被包含的jsp不能被显示出来)
这时就需要我们在web.xml配置一下jsp能够通过服务器端跳转访问,而客户端不能直接访问具体代码如下:
<servlet> <servlet-name>goto</servlet-name> <jsp-file>/WEB-INF/jsp/msgs.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>goto</servlet-name> <url-pattern>/msgs</url-pattern> </servlet-mapping>
然后把iframe 属性src = “msgs”就可以访问了。
虽然这是个很小的问题,这时我学习jsp时遇到的问题,于是把他记录下来,我觉得还是有收获的,如果有什么错误的地方,本人新手,
希望大家指正,感激不尽!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。