`
jhyimu2005
  • 浏览: 185728 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多
今天整理项目的流程,在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:\Tomcat\webapps\TestProject\

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:\Tomcat\webapps\TestProject\

这样就一目了然了,另外要特别说下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()

以上。

参考资料:
http://hi.baidu.com/fytcm/blog/item/298975d7e796aedaa044df0a.html
http://hi.baidu.com/javagt/blog/item/6b7a68f4ebc3b3d8f2d385e3.html
http://www.blogjava.net/flysky19/articles/98006.html
http://bbs.chinaunix.net/viewthread.php?tid=383861



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaojp0411/archive/2009/04/03/4045339.aspx
转自:http://blog.csdn.net/zhaojp0411/archive/2009/04/03/4045339.aspx
分享到:
评论

相关推荐

    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路径问题

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

    JSP+Servlet面试题

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

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

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

    jsp&servlet电子书

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

    JSP与Servlet训练

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

    ### JSP常用方法整理:深入理解与应用 JSP(JavaServer Pages)是Sun Microsystems公司推出的服务器端技术,用于创建动态网页。它结合了HTML、XML标记语言与Java编程语言的功能,使得在Web应用程序中嵌入Java代码...

    基于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页面间的跳转至关重要。选择合适的跳转方法取决于具体需求,如用户可见性、数据保留等因素。在实际项目中,结合业务逻辑和项目结构灵活运用这些方法,可以提高代码的...

Global site tag (gtag.js) - Google Analytics