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

    

时间: 2024-10-12 19:49:53

关于JSP不能通过浏览器直接访问,要通过servlet跳转,但一个jsp文件里面用<iframe>标签包含了另一个jsp的访问问题的相关文章

servlet跳转到JSP页面会出现乱码

问题描述:servlet跳转到JSP页面的时候会出现乱码.但是直接访问JSP页面不会出现乱码,乱码情况如图所示 servlet情况 我发现去掉servlet上面的那两句话,JSP乱码情况是没有的, 或者写成下面情况的servlet也可以的 这样也不会出现乱码! 或者把上面四句话全部去掉也不会出现乱码 本人分析(不一定正确)是因为:response.setContentType("text/html"); PrintWriter out = response.getWriter(); 因

jsWindow 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 Window 对象集合 集合 描述 frames[] 返回窗口中所有命

一.JSX简介 JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析. 如下(JS写法) var child1 = React.createElement('li', null, 'First Text Content'); var child2 = React.createElement('li', null, 'Second Text Content'); var

[转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案

时间 2014-04-14 14:33:44  CSDN博客 原文  http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJSP JSP或servlet中中文乱码的解决方案: 1.以POST请求方式: 在获取请求参数之前设置: request.setCharacterEncoding("utf-8"); 设置输出编码: response.setContentType("text/html;charse

Nginx Rewrite的应用-根据访问平台做简单跳转

Nginx Rewrite的应用-根据访问平台做简单跳转 Rewrite模块简介 Rewrite最主要的作用就是对URL进行重写,即重定向.举个简单的例子,我们用电脑打开淘宝显示出的页面与手机打开显示出的页面,或者是IE与Chrome浏览器打开的页面,有着特别大的差别,这就是使用了Rewrite模块,为用户提供最合适的页面. Rewrite的配置 一. 在配置之前请先安装好Nginx.不会安装的同学请看我之前写过的Nginx的编译安装.二. 下面我们来编辑Nginx的主配置文件: [[email

Servlet的Web访问名称与Servlet家族简介

Servlet的Web访问名称 一个Servlet的web访问名称可以不止一个,并且除了用web.xml配置之外,还可以使用注解的方式配置,现在主流的配置方式是使用注解,这是Servlet3.0的特性,注解的配置要比web.xml轻量.简单,但是不排除一些老工程仍然使用着web.xml的配置方式. 下面介绍一下,在注解上使用 * 通配符: /admin/* 这种配置表示访问的名称必须是以admin/开头,但是后面的字符串可以任意,*作为一个匹配任意字符串的存在,以下使用实际代码示例演示一下这个用

java基础 第十四章(Servlet声明周期、Servlet向jsp中提供数据、Servlet跳转jsp、jsp中书写java代码)

一.Servlet声明周期 1.Servlet的声明周期一般分为四步:加载.实例化.服务.销毁. 2.实例化在整个生命周期中只执行一次. 二.jsp 1.Servlet向jsp中提供数据 request.setAttribute( , ); 例:request.setAttribute("key" , "Hello"); 2.Servlet跳转jsp (1)同一请求方式:request.getRequestDispatcher("/路径").fo

Internet Explorer 浏览器在同一时刻只能从同一域名下载两个文件。

Internet Explorer 浏览器在同一时刻只能从同一域名下载两个文件.至于原因请见 MSDN Blogs:<Internet Explorer and Connection Limits>,如何解除限制请见微软客户帮助与支持主页:<如何将 Internet Explorer 配置为可以同时进行两个以上的下载会话>.不管 Firefox 有多火,无可否认,IE 仍然是浏览器市场的老大.所以,在做系统架构时,不得不去考虑 IE  同时只能从同一域名下载两个文件的限制.如果超过

JSP中如何利用JS实现登录页面的跳转(JSP中如何利用JS实现跳转页面)

JSP中如何利用JS实现登录页面的跳转(JSP中如何利用JS实现跳转页面) 注:只是用到js中的setTimeout();具体使用方法:  setTimeout(函数名, 时间(毫秒)); setTimeout( ) 是属于 window 的 method, 但我们都是略去 window 这顶层物件名称, 这是用来设定一个时间, 时间到了, 就会执行一个指定的 method.setTimeout( ) 通常是与 function一起用. 样例: 1 <%@ page language="j

编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/....dll”--“拒绝访问。

错误如下: “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root/d553c2e4/701310ee /App_Web_default.aspx.cdcab7d2.seiozvdt.dll”--“拒绝访问.