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>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jsp
, servlet
, jsp页面的跳转问题
, 参数
, jsp问题 报错 页面
, 方法
, 关于myeclipse报错404
, 项目路径
, 路径
, jsp报错 跳转
, jsp跳转
, 跳转路径
, javascript路径jsp
, 跳转jsp
方式
servlet跳转到jsp、servlet怎么跳转到jsp、servlet跳转到jsp页面、servlet如何跳转到jsp、jsp跳转servlet,以便于您获取更多的相关知识。

时间: 2024-08-30 19:50:21

JSP与Servlet的跳转及得到路径的常用方法的相关文章

jsp和servlet中实现页面跳转的方式实例总结_JSP编程

本文实例总结了jsp和servlet中实现页面跳转的方式.分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <% RequestDispatcher rd = getServletContext().getRequestDispatcher("/test/test2.jsp"); rd.forward(request, response); %>

关于jsp和servlet中实现页面跳转的几种方式总结

 关于jsp和servlet中实现页面跳转的几种方式: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <%  RequestDispatcher rd = getServletContext().getRequestDispatcher("/test/test2.jsp");  rd.forward(request, response); %> 2. response.se

servlet-java关于Servlet里面跳转jsp页面出现找不到页面的问题,急求,大神,小弟跪求了!!

问题描述 java关于Servlet里面跳转jsp页面出现找不到页面的问题,急求,大神,小弟跪求了!! 问题:通过form表单跳转到servlet中处理事物完后,需要再跳转到另外一个jsp页面.我是用了很多种方法:都是页面找不到错误.使用过的方法: 1.response.sendRedirect("excelInport.jsp"); 2.request.getRequestDispatcher("excelInport.jsp").forward(request,

jsp和servlet编写登录界面时?登录成功与否该用客户端跳转还是服务器跳转

问题描述 jsp和servlet编写登录界面时?登录成功与否该用客户端跳转还是服务器跳转 3C jsp和servlet编写登录界面时?登录成功与否该用客户端跳转还是服务器跳转 1.服务器端跳转:forward 2.客户端跳转:sendRediirect 请问该用哪一个?两个方法有什么区别? 解决方案 客户端跳转与服务器跳转服务器跳转与客户端跳转的区别服务器跳转与客户端跳转的区别 解决方案二: 用forward是转发,在新页面上不会有跳转时的比如登录名密码之类的信息,更安全而且效率更高,,send

404-关于Myeclipse中在webroot下建立jsp访问servlet跳转失败的问题

问题描述 关于Myeclipse中在webroot下建立jsp访问servlet跳转失败的问题 正在学习servlet,看的是张龙老师的教程,其中讲到在webroot下创建一个文件夹,然后再文件夹里建立jsp页面访问servlet的例子,我使用的是myeclipse10,只能在webroot根目录下面创建jsp页面并访问servlet成功,如果将jsp页面建在文件夹下进行访问的话就会报404错误,提示找不到对应的servlet文件,想问一下这个问题应该如何解决,环境已经重新安装了一次 解决方案

求大神解决myeclipse的jsp通过 servlet跳转不到另一个jsp,显示为空白

问题描述 先在myeclipse中做了一个jsp,都可以通过servlet跳转,但是再建立一个jsp时,连接同一个servlet就不行了.....不知道怎么回事,网上也找了半天,也没解决.并且在建立一个工程,新的jsp和servlet也是这样的,点击网页的"登录"时(我们做的是登录网页),也不得行,显示为空白....且域名为http://localhost:8080/login/checklogin 解决方案 解决方案二:1)检查你这个jsp有错没?2)你的跳转逻辑对不对?3)跳转前,

servlet中 跳转到jsp界面 不能跳转 也没有任何报错

问题描述 servlet中 跳转到jsp界面 不能跳转 也没有任何报错 在servlet中不能跳转界面 我测试过deBUG,能够一直到代码request.getRequestDispatcher("/Exchange/JSP/main.jsp").forward(request, response);这里 可就是不能跳到界面去,还没有任何提示 public class accError extends HttpServlet { public void doGet(HttpServle

做了个jsp&amp;amp;servlet路径状态的测试,花了偶几个小时,把结果贴出共享

js|servlet PS:这里怎么贴html阿,害得我还得格式化文本! 路径状态测试 目的测试jsp之间互相跳转,servlet跳转jsp环境下绝对路径和相对路径的状态寻找出一种通用的解决办法 资源 打成的WAR包MyWAR 组成文件JSPa.jsp b/    b.jsp    ccc.jsp Servlet TestServlet.java       mapping: /layer1/layer2/TestServlet 流程描述1. 由a.jsp直接跳转到b.jsp   或   由a.

Jsp &amp;amp; Servlet 会话控制

js|servlet|控制 Jsp & Servlet 会话控制 作者:guipei 前言作为J2EE的重要组成部分的jsp和servlet规范中,会话(session)处理占有非常重要的位置.目前,很多资料都非常详细的讲解了会话跟踪如何处理.但是,针对会话控制却很少有人涉及,原本在servlet规范中,servlet提供了HttpSessionContext接口处理会话控制功能,但是,在Servlet API 2.1以后,这个功能被取消了,参考原文(As of Java(tm) Servlet