关于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时遇到的问题,于是把他记录下来,我觉得还是有收获的,如果有什么错误的地方,本人新手,
希望大家指正,感激不尽!


 

    

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。