jsp 获取当前地址(带参数)

本文介绍了在Java Web环境中,如Servlet、JSP中获取当前应用的相对路径、绝对路径以及文件的绝对路径的方法。通过request对象、ServletContext、Class以及不同服务器(Weblogic、Tomcat、Resin)的特性来展示获取当前路径的各种方式,并提供了读取相对路径的示例。
Question:
JSP怎么获取当前页地址(带参数)?
如 http://localhost/test.jsp?index=1&nb=1

Answer:

String url=request.getScheme()+"://";
url+=request.getHeader("host");
url+=request.getRequestURI();
if(request.getQueryString()!=null)
url+="?"+request.getQueryString();

out.println(url);

============================================================================

我看了一篇文章《 JSP获取路径与URL》,解释得很简单:

<%@  page  contentType="text/html;  charset=gb2312"  language="java"  import="java.io.*"  errorPage=""  %>
<html>
<head>
<meta  http-equiv="Content-Type"  content="text/html;  charset=gb2312">
<title>Untitled  Document</title>
</head>

<body>
当前WEB应用的物理路径:<%=application.getRealPath("/")%><BR>
当前你求请的JSP文件的物理路径:<%=application.getRealPath(request.getRequestURI())%><BR>
<%
     String  path=application.getRealPath(request.getRequestURI());
     String  dir=new  File(path).getParent();
     out.println("当前JSP文件所在目录的物理路径"+dir+"</br>");
     String  realPath1  =  "http://"  +  request.getServerName()  +  ":"  +  request.getServerPort()  +  request.getContextPath()+request.getServletPath().substring(0,request.getServletPath().lastIndexOf("/")+1);  
     out.println("web  URL  路径:"+realPath1);
%>
</body>
</html>

==================================================================================
详细解释:

JSP中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI()
文件的绝对路径       :application.getRealPath(request.getRequestURI());
当前web应用的绝对路径 :application.getRealPath("/");
取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

Servlet中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径      :request.getSession().getServletContext().getRealPath
(request.getRequestURI())  
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
       (ServletContext对象获得几种方式:
         Javax.servlet.http.HttpSession.getServletContext()
         Javax.servlet.jsp.PageContext.getServletContext()
         Javax.servlet.ServletConfig.getServletContext()
       )

Java 的Class中获得相对路径,绝对路径的方法
单独的Java类中获得绝对路径
  根据Java.io.File的Doc文挡,可知:
默认情况下new File("/")代表的目录为:System.getProperty("user.dir")。
一下程序获得执行类的当前路径
package org.cheng.file;
import Java.io.File;

public class FileTest {
      public static void main(String[] args) throws Exception {     

    System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    

    System.out.println(FileTest.class.getClassLoader().getResource(""));       

  System.out.println(ClassLoader.getSystemResource(""));       
    System.out.println(FileTest.class.getResource(""));       
    System.out.println(FileTest.class.getResource("/")); //Class文件所在路径
    System.out.println(new File("/").getAbsolutePath());       
    System.out.println(System.getProperty("user.dir"));   
}
}

服务器中的Java类获得当前路径(来自网络)
(1).Weblogic

WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:/bea/weblogic700.....
那么,你的文件根路径就是c:/.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:/yourconfig/yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

在yourwebapp/yourconfig/yourconf.properties,
这样使用:
new FileInputStream("./yourconfig/yourconf.properties");
这两种方式均可,自己选择。

(2).Tomcat

在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下

(4).如何读相对路径哪?

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web

发布根路径下WEB-INF/classes

默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)
5.1 采用Spring的DI机制获得文件,避免硬编码。
     参考下面的连接内容:
     http://www.Javajia.Net/viewtopic.Php?p=90213&
5.2 配置文件的读取
参考下面的连接内容:
http://dev.youkuaiyun.com/develop/article/39/39681.shtm
5.3 通过虚拟路径或相对路径读取一个Xml文件,避免硬编码
参考下面的连接内容:
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

<think>嗯,我现在得帮用户解决如何在JSP项目中获取当前浏览器URL参数的问题。让我先回忆一下自己学过的JSP知识,可能还需要查证一下,确保给出的方法正确。 首先,用户的问题是关于获取URL参数的,也就是在JSP页面里如何拿到请求中的查询参数。比如,当URL是http://example.com/page.jsp?name=John&age=30时,如何获取name和age这些参数。 我记得在JSP中,可以通过内置的request对象来获取参数。request对象是HttpServletRequest的一个实例,它提供了getParameter方法。所以,在JSP页面中使用<%= request.getParameter("参数名") %>应该可以获取到对应的值。例如,获取name参数的话,就是<%= request.getParameter("name") %>。这应该是最基本的方法。 不过,可能还有其他方式。比如,使用EL表达式,也就是Expression Language,在JSP 2.0之后支持。EL表达式更简洁,比如${param.name}就可以直接获取name参数的值。这样写起来更方便,也不需要写Java代码在页面上。不过,这需要确认用户的JSP版本是否支持EL,但现在大部分项目应该都是支持的。 那用户可能需要一个简单的例子。比如,当访问test.jsp?id=123时,如何在JSP页面中显示这个id。用两种方法的话,一种是传统的scriptlet方式,另一种是EL。可能还要提到处理多个参数或者多个值的情况,比如当参数是多个值时,比如hobbies=reading&hobbies=music,这时候应该用request.getParameterValues()方法,返回一个数组,而EL的话可以用${paramValues.hobbies}来获取数组。 另外,需要注意中文参数乱码的问题。如果参数中有中文,可能需要设置编码,比如在获取参数之前设置request.setCharacterEncoding("UTF-8"),或者在服务器配置中设置URIEncoding为UTF-8,比如在Tomcat的server.xml里配置Connector的URIEncoding属性。否则可能会出现乱码的情况。这点可能需要提醒用户,特别是当他们的应用需要处理非拉丁字符时。 还有,安全性方面,直接从URL获取参数可能会有风险,比如XSS攻击。所以在输出参数到页面时,应该进行转义处理。例如,使用JSTL的<c:out>标签来输出,这样能避免脚本注入的问题。比如<c:out value="${param.name}" />。这样会更安全,用户可能也需要这方面的建议。 那总结一下,步骤应该是: 1. 使用request.getParameter()方法在JSP页面中获取单个参数。 2. 使用EL表达式${param.name}来简化代码。 3. 处理多值参数时使用getParameterValues或paramValues。 4. 注意编码问题,处理中文乱码。 5. 安全输出,防止XSS攻击。 可能还需要给出示例代码,这样用户更清楚如何具体实现。比如: 传统方式: <% String name = request.getParameter("name"); if (name != null) { out.print("Name: " + name); } else { out.print("Name parameter not found"); } %> EL表达式方式: Name: ${param.name} 处理多值: <% String[] hobbies = request.getParameterValues("hobby"); if (hobbies != null) { for (String hobby : hobbies) { out.print(hobby + "<br>"); } } %> 或者用EL: <c:forEach items="${paramValues.hobby}" var="hobby"> ${hobby}<br> </c:forEach> 编码设置的话,可以在页面顶部添加: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% request.setCharacterEncoding("UTF-8"); %> 不过,request.setCharacterEncoding("UTF-8")可能对GET请求无效,因为GET参数是通过URL传递的,Tomcat等服务器默认使用ISO-8859-1解码,所以可能需要修改服务器的配置,比如在Tomcat的server.xml中<Connector>标签添加URIEncoding="UTF-8"属性。 安全方面,使用<c:out>标签: <c:out value="${param.name}" /> 这样就能转义特殊字符,避免XSS。 用户的问题可能还涉及到获取完整的当前URL,包括参数部分。这时候可能需要组合request的多个方法,比如获取请求的URL和查询字符串。例如: <% String url = request.getRequestURL().toString(); String queryString = request.getQueryString(); String fullUrl = url + (queryString == null ? "" : "?" + queryString); %> 这样就可以得到完整的当前URL,包括参数。但用户的问题主要是获取参数,所以这部分可能不需要,但如果有用户需要的话也可以补充。 总结,回答用户的问题需要分步骤说明不同的方法,指出优缺点,注意事项,并提供示例代码。同时,提醒编码和安全问题,这样用户能全面了解如何正确获取URL参数。</think>在JSP项目中获取当前浏览器URL参数,可以通过以下方法实现: -- ### **1. 使用 `request.getParameter()` 方法** 这是最直接的方式,通过 `HttpServletRequest` 对象获取单个参数值: ```jsp <% String paramValue = request.getParameter("参数名"); out.print("参数值:" + paramValue); %> ``` **示例:** 若URL为 `http://example.com/page.jsp?id=123`,获取 `id`: ```jsp <%= request.getParameter("id") %> <!-- 输出:123 --> ``` --- ### **2. 使用EL表达式(Expression Language)** JSP 2.0+ 支持更简洁的EL表达式,通过 `${param}` 直接获取参数: ```jsp ${param.参数名} ``` **示例:** 获取 `id` 参数: ```jsp <p>ID: ${param.id}</p> ``` --- ### **3. 处理多值参数** 若参数有多个值(如 `?hobby=reading&hobby=music`),需使用 `request.getParameterValues()` 或EL的 `${paramValues}`: ```jsp <%-- 传统方式 --%> <% String[] hobbies = request.getParameterValues("hobby"); if (hobbies != null) { for (String hobby : hobbies) { out.print(hobby + "<br>"); } } %> <%-- EL方式 --%> <c:forEach items="${paramValues.hobby}" var="hobby"> ${hobby}<br> </c:forEach> ``` --- ### **4. 注意事项** #### **中文乱码问题** - **GET请求参数**:需在服务器(如Tomcat)的 `server.xml` 中配置 `URIEncoding="UTF-8"`(修改`<Connector>`标签)。 - **POST请求参数**:在JSP顶部添加: ```jsp <%@ page contentType="text/html;charset=UTF-8" %> <% request.setCharacterEncoding("UTF-8"); %> ``` #### **安全输出** 避免XSS攻击,使用 `<c:out>` 转义输出: ```jsp <c:out value="${param.userInput}" /> ``` --- ### **完整示例** ```jsp <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <title>获取URL参数示例</title> </head> <body> <%-- 获取单个参数 --%> <h3>ID: <c:out value="${param.id}" /></h3> <%-- 获取多值参数 --%> <c:if test="${not empty paramValues.hobby}"> Hobbies: <ul> <c:forEach items="${paramValues.hobby}" var="hobby"> <li><c:out value="${hobby}" /></li> </c:forEach> </ul> </c:if> </body> </html> ``` --- ### **扩展:获取当前完整URL** 若需获取包括参数的完整URL: ```jsp <% String url = request.getRequestURL().toString(); String queryString = request.getQueryString(); String fullUrl = url + (queryString != null ? "?" + queryString : ""); out.print("完整URL:" + fullUrl); %> ``` 通过以上方法,可以灵活处理JSP中的URL参数,同时兼顾安全性与编码问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值