`
aijezdm915
  • 浏览: 403894 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSP与Servlet的跳转及得到路径方法

    博客分类:
  • java
阅读更多

 今天整理项目的流程,在JSP和Servlet之间跳来跳去,曾经一段时间,我都是把Servlet路径定义为“/SomeServlet”,也即定义为根目录,因为兼容性比较好,但是用了MyEclipse之后,新建的Servlet默认路径是“/servlet/SomeServlet”,这样写便于管理,另外就是更适合单独为Servlet设置Filter(关于Filter的设置可以参考这篇文章)。而我的JSP文件目前是放在项目的根目录,也即形成下图这样的路径结构:

 

/ProjectRoot/

  |--servlet/

  |  |--Servlet1

  |  |--Servlet2

  |

  |--myJsp1.jsp

  |--myJsp2.jsp

 

  其中Servlet跳转有两种方式:

 

  1、sendRedirect()方式

 

response.sendRedirect(String targetUrl);

 

  2、RequestDispather方式

 

RequestDispatcher requestDispatcher = request.getRequestDispatcher(String targetUrl);

requestDispatcher.forward(request, response);

 

  第一种方式是给用户浏览器发送通知,然后由浏览器再给服务器发送跳转请求,所以比较类似用户自己去点URL的跳转,这种方式如果需要传参给跳转页面,需要使用Session或者使用GET方式将参数显式的写在targetUrl里(如:ooxx.jsp?id=1),而且大部分情况下由于GET方法的局限性,这种跳转方式只能带较为简单的参数。

 

  而第二种方式有点类似C#中的Server.Transfer()方法,即服务器端跳转,从现象上看就是用户的浏览器内容发生了变化,但是浏览器的地址栏不变还是老地址。这种方式由服务器直接控制request及response的走向及参数,从命令行的参数上就可以看出这一点。这样方便程序员控制参数的传递,几乎可以传递任何类型的参数,只要简单的使用setAttribute()方法即可:

 

request.setAttribute(String attriName, Object attriValue);

 

  但是也就是因为它是服务器端跳转,所以用户浏览器的地址栏是不发生变化的。那么,如果项目路径结构如上图所示的情况,那么:

 

  1、从JSP跳转向Servlet时

 

  只要简单的使用相对路径“serlvet/SomeServlet”即可。

 

  2、从Servlet跳转向另一个Servlet时

 

  因为Servlet都在相同路径下,所以可以直接写相对路径,如“./SomeServlet”或直接“SomeServlet”。

 

  3、从Servlet跳转向JSP时

 

  因为Servlet路径为“servlet/SomeServlet”,所以如果要使用RequestDispather方式跳转,JSP页面在接参数时,会将地址栏的地址作为当前目录寻找自己需要的方法、JavaScript、CSS等。所以经常有朋友遇到JavaScript报错“Ext未定义”就是因为JSP页面找不到Ext的js文件。所以这种情况,需要使用绝对路径来告诉JSP去哪里得到这些资源。JAVA有关获得路径的方法较多,测试如下:

 

  项目根目录:http://localhost:8080/TestProject/

 

  JSP测试:http://localhost:8080/TestProject/TestPath.jsp

 

 1<%@ page language="java" contentType="text/html; charset=UTF-8"

 2    pageEncoding="UTF-8"%>

 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 4<html>

 5<head>

 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 7<title>Insert title here</title>

 8</head>

 9<body>

10<%="request.getContextPath() = " + request.getContextPath() + "<BR />"%>

11<%="request.getServletPath() = " + request.getServletPath() + "<BR />"%>

12<%="request.getRequestURI() = " + request.getRequestURI() + "<BR />"%>

13<%="request.getRequestURL() = " + request.getRequestURL() + "<BR />"%>

14<%

15    String realPath = session.getServletContext().getRealPath("/");

16%>

17<%="request.getRealPath("/") = " + realPath + ""%>

18</body>

19</html>

 

 返回结果:

 

request.getContextPath() = /TestProject

request.getServletPath() = /TestPath.jsp

request.getRequestURI() = /TestProject/TestPath.jsp

request.getRequestURL() = http://localhost:8080/TestProject/TestPath.jsp

request.getRealPath("/") = C:TomcatwebappsTestProject

 

  Servlet测试

 

 1package servlet;

 2

 3import java.io.IOException;

 4import java.io.PrintWriter;

 5

 6import javax.servlet.ServletException;

 7import javax.servlet.http.HttpServlet;

 8import javax.servlet.http.HttpServletRequest;

 9import javax.servlet.http.HttpServletResponse;

10import javax.servlet.http.HttpSession;

11

12public class TestPath extends HttpServlet {

13

14    private static final long serialVersionUID = 3093731648408094325L;

15

16    public void doGet(HttpServletRequest request, HttpServletResponse response)

17            throws ServletException, IOException {

18

19        response.setContentType("text/html");

20        PrintWriter out = response.getWriter();

21        out.println("request.getContextPath() = " + request.getContextPath() + "<BR />");

22        out.println("request.getServletPath() = " + request.getServletPath() + "<BR />");

23        out.println("request.getRequestURI() = " + request.getRequestURI() + "<BR />");

24        out.println("request.getRequestURL() = " + request.getRequestURL() + "<BR />");

25        HttpSession session = request.getSession();

26        String realPath = session.getServletContext().getRealPath("/");

27        out.println("request.getRealPath("/") = " + realPath + "");

28        out.flush();

29        out.close();

30    }

31

32    public void doPost(HttpServletRequest request, HttpServletResponse response)

33            throws ServletException, IOException {

34        doGet(request, response);

35    }

36

37}

 

 

  返回结果:

 

request.getContextPath() = /TestProject

request.getServletPath() = /servlet/TestPath

request.getRequestURI() = /TestProject/servlet/TestPath

request.getRequestURL() = http://localhost:8080/TestProject/servlet/TestPath

request.getRealPath("/") = C:TomcatwebappsTestProject

 

  这样就一目了然了,另外要特别说下getRealPath()这个方法,用于得到URL的物理磁盘路径,以前的写法很简单request.getRealPath(String path)即可。但是此方法已被废弃。现在要用ServletContext.getRealPath(String path)。也就是说要先得到ServletContext对象,而这个对象获得方式有好几种,比较简单的无非是从Session中获得:

 

HttpSession session = request.getSession();

String realPath = session.getServletContext().getRealPath("/");

 

  还有几种方法同样可以获得ServletContext:

 

Javax.servlet.http.HttpSession.getServletContext()

Javax.servlet.jsp.PageContext.getServletContext()

Javax.servlet.ServletConfig.getServletContext()

 

 

 

分享到:
评论

相关推荐

    jsp与Servlet跳转实例

    ### jsp与Servlet跳转实例:深入理解信息提交与页面跳转 在Web开发中,JSP(Java Server Pages)和Servlet是两个重要的技术组件,它们共同协作来处理客户端请求并生成动态网页内容。本文将详细解析一个具体的案例...

    JSP、Servlet中的相对路径和绝对路径(包括路径问题).mht

    JSP、Servlet中的相对路径和绝对路径(包括路径问题),解决繁琐的路径问题。

    jsp与Servlet跳转实例借鉴.pdf

    JSP与Servlet跳转实例借鉴 本资源是关于JSP与Servlet跳转实例的借鉴,通过三个JSP页面(Index.jsp、Input.jsp、Confirm.jsp)和三个Servlet(InputServlet、ConfirmServlet、ResultServlet)来实现用户登录验证和...

    jsp+servlet路径状态的测试

    在探讨“jsp+servlet路径状态的测试”这一主题时,我们深入分析了在JSP与Servlet环境下,不同路径(绝对路径与相对路径)在页面跳转过程中的表现及其对资源定位的影响。本测试旨在理解并优化JSP页面之间的跳转机制,...

    JSP的Servlet连接

    本示例将详细介绍如何在MyEclipse环境下建立一个简单的JSP与Servlet的连接,以及如何实现用户登录验证。 首先,我们创建一个新的Web项目Test01,这将作为我们的开发工作空间。在src目录下创建一个名为...

    JSP+Servlet面试题

    * 如果你有几个 Servlet/JSP 需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文件(web.xml)中把该过滤器与对应的 Servlet/JSP 联系起来。 * 一个过滤器可以作用于一个或一组 ...

    jsp_servlet路径问题

    ### JSP/Servlet中的路径问题详解 #### 一、路径的基本概念 在JSP和Servlet技术中,理解和处理路径是非常重要的。路径可以分为绝对路径和相对路径两种。 **1. 绝对路径** - **定义**:绝对路径是指文件或目录在...

    JSP中得到几种得到路径的方法

    `request.getServletPath()`方法可以获取当前请求的Servlet的路径,它不包含上下文路径,仅返回从Web应用根目录开始的Servlet路径。例如,如果页面位于`jsp`目录下,那么结果将是`/jsp/test.jsp`。这对于在页面内部...

    JSP与Servlet训练

    ### JSP与Servlet训练知识点详解 #### 一、实验目的详解 本次实验旨在通过实际操作加深学生对JSP和Servlet的理解和应用能力。具体目标包括: 1. **JSP基本语法掌握**:学习如何编写JSP代码,了解JSP的工作原理,...

    jsp&servlet电子书

    - **Servlet映射**:通过`web.xml`配置文件或使用注解(如`@WebServlet`)将Servlet与URL路径关联。 - **Servlet容器**:如Tomcat、Jetty等,负责管理和调用Servlet实例。 3. **JSP与Servlet的关系** JSP和...

    jsp和servlet请求与响应

    本文详细介绍了JSP和Servlet中关于请求与响应的关键知识点,包括JSP内置对象的作用、请求与响应对象的使用方法、中文乱码问题及其解决办法、转发与重定向的区别以及Servlet的基本创建和配置流程。希望这些内容能够...

    JSP-Servlet.rar_jsp_jsp综述_servlet_servlet jsp

    本文将深入探讨JSP与Servlet的重定向技术,并结合提供的资源来帮助初学者理解和掌握这一核心概念。 首先,JSP是一种视图技术,它允许开发者在HTML代码中嵌入Java代码,使得网页具有动态生成内容的能力。而Servlet是...

    JSPServlet新手学习资料

    **JSP和Servlet基础知识详解** ...理解并掌握这些基本概念对于JSPServlet新手来说至关重要,它们构成了开发Web应用的基础。在实际开发中,根据需求选择合适的方法,可以构建高效、功能丰富的Web应用。

    jsp+Servlet登录验证

    jsp+Servlet登录验证 jsp+Servlet登录验证是基于Java...通过了解Servlet和JSP的基本概念、生命周期、HttpServlet、doGet()和doPost()方法、JSP技术、登录验证流程和web.xml配置,可以更好地掌握Web应用程序开发技术。

    基于jsp+servlet的bbs代码和数据库

    一、JSP与Servlet基础 1. JSP:JSP是一种动态网页技术,允许开发者将HTML、CSS、JavaScript与Java代码混合编写,服务器端执行Java代码并生成HTML响应给客户端。JSP页面在首次访问时会被转换为Servlet。 2. Servlet:...

    创建一个简单jsp-servlet应用程序.doc

    通过本教程,读者将了解JSP与Servlet的基本概念,以及如何结合这两种技术来搭建一个四层架构的Web应用程序。这包括前端表现层(JSP)、控制层(Servlet)、业务逻辑层以及数据访问层(DAO)。 #### 二、四层架构...

    JSP中5种跳转的方法

    本文将详细介绍JSP中五种常用的页面跳转方法,并深入探讨它们的特点及应用场景。 ### 1. RequestDispatcher.forward() #### 原理与特点 `RequestDispatcher.forward()` 方法主要用于将请求转发到另一个资源(可以...

    Servlet+jsp Java Web开发

    在Java Web开发中,Servlet和JSP是两个关键的技术组件,它们被广泛用于构建动态、交互式的Web应用程序。本项目以"Servlet+jsp Java Web开发"为主题,采用经典的开发环境:MySQL数据库、Tomcat 6应用服务器、Eclipse...

    jsp中几个页面之间跳转

    总之,理解和正确使用绝对路径与相对路径对于JSP页面间的跳转至关重要。选择合适的跳转方法取决于具体需求,如用户可见性、数据保留等因素。在实际项目中,结合业务逻辑和项目结构灵活运用这些方法,可以提高代码的...

    jsp页面跳转

    ### JSP页面跳转方法详解 #### 一、RequestDispatcher.forward() **定义与用途:** `RequestDispatcher.forward()` 是一种服务器端的跳转方法,它主要用于在同一个Web应用内部进行页面之间的跳转。该方法的主要...

Global site tag (gtag.js) - Google Analytics