Request的关于路径的方法详解

request对象中的有很多方法是关于路径获取的,下面我们通过一个TestServlet来讲解一下这些常用的方法。

TestServlet源代码如下:

package coresun;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	   response.setContentType("text/html;charset=gb2312");
	   PrintWriter out = response.getWriter();
	   out.println("<html><head><title>使用request中的方法</title></head><body><h2>");
	   
	   out.println("request.getRequestURL()= "+request.getRequestURL()+"<br>");
	   out.println("request.getRequestURI()= "+request.getRequestURI()+"<br>");
	   out.println("request.getContextPath()= "+request.getContextPath()+"<br>");
	   out.println("request.getServletPath()= "+request.getServletPath()+"<br>");
	   out.println("request.getQueryString()= "+request.getQueryString()+"<br>");
	   out.println("request.getPathInfo()= "+request.getPathInfo()+"<br>");
	   out.println("request.getPathTranslated()= "+request.getPathTranslated());
	   out.println("<br>");
	   out.println("request.getProtocol()= "+request.getProtocol()+"<br>");
	   out.println("request.getMethod()= "+request.getMethod()+"<br>");
	   out.println("request.getScheme()= "+request.getScheme()+"<br>");
	   out.println("request.getRequestedSessionId()= "+request.getRequestedSessionId()+"<br>");
	   out.println("request.isRequestedSessionIdFromCookie()= "+request.isRequestedSessionIdFromCookie()+"<br>");
	   out.println("request.isRequestedSessionIdFromURL()= "+request.isRequestedSessionIdFromURL()+"<br>");
	   out.println("request.isRequestedSessionIdValid()= "+request.isRequestedSessionIdValid()+"<br>");
	   
	   out.println("</h2></body></html>");
 }
}


此Servlet在web.xml文件中的部署如下:(只有关键代码)

<servlet>
  <servlet-name>test</servlet-name>
  <servlet-class>coresun.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>test</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>


*.do表示只要是以.do结尾的地址,都可以访问此Servlet。然后在地址栏中输入如下网址:(假设服务器为本地,端口8080,Web根目录为FilterWeb)
http://localhost:8080/FilterWeb/update.do?userName=zhangsan&age=20
页面返回的结果如下:
request.getRequestURL() = http://localhost:8080/FilterWeb/update.do
request.getRequestURI() = /FilterWeb/update.do
request.getContextPath() = /FilterWeb
request.getServletPath() = /update.do
request.getQueryString() = userName=zhangsan&age=20
request.getPathInfo() = null
request.getPathTranslated() = null
request.getProtocol() = HTTP/1.1
request.getMethod() = GET
request.getScheme() = http
request.getRequestedSessionId() = 0D5219B7FF11D47EBE95B2E6A31076B5
request.isRequestedSessionIdFromCookie() = true
request.isRequestedSessionIdFromURL() = false
request.isRequestedSessionIdValid() = true
request.getAuthType() = null



这些方法的含义大家通过它的名字应该能够揣摩出来的。

下面更改servlet的url-pattern地址,如下:

<servlet>
  <servlet-name>test</servlet-name>
  <servlet-class>coresun.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>test</servlet-name>
  <url-pattern>/faces/*</url-pattern>
</servlet-mapping>


以上表示只要是以/faces/开头的地址,此Servlet都可以访问
浏览器的地址栏中填入如下地址:
http://localhost:8080/FilterWeb/faces/update?userName=zhangsan&age=20
页面返回的结果如下:
request.getRequestURL() = http://localhost:8080/FilterWeb/faces/update
request.getRequestURI() = /FilterWeb/faces/update
request.getContextPath() = /FilterWeb
request.getServletPath() = /faces
request.getQueryString() = userName=zhangsan&age=20
request.getPathInfo() = /update
request.getPathTranslated() = D:\FilterProject\FilterWeb\update
request.getProtocol() = HTTP/1.1
request.getMethod() = GET
request.getScheme() = http
request.getRequestedSessionId() = 0D5219B7FF11D47EBE95B2E6A31076B5
request.isRequestedSessionIdFromCookie() = true
request.isRequestedSessionIdFromURL() = false
request.isRequestedSessionIdValid() = true
request.getAuthType() = null

2、 获取服务器和客户端地址的方法:

<%
	String webUrl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
	String webUrl1 = request.getScheme()+"://"+request.getLocalAddr()+":"+request.getLocalPort()+request.getContextPath();
	String webUrl2 = request.getScheme()+"://"+request.getRemoteAddr()+":"+request.getRemotePort()+request.getContextPath();	
	out.println("server="+webUrl+"<br />");
	out.println("local="+webUrl1+"<br />");
	out.println("remote="+webUrl2+"<br />");
%>

serverName: 获取web服务器的名称

localAddr:  获取web服务器的地址

remoteAddr:  获取客户端的地址


3、getResource("")的相对路径,此处主要讨论web工程中的getResource相对路径。


例如有一个Service类: FileService

部分代码如下:

java.net.URL url = FileService.class.getResource("");
		System.out.println("class.getResource(\"\")="+url.toString());
		url = FileService.class.getClassLoader().getResource("");
		System.out.println("class.getClassLoader().getResource(\"\")="+url.toString());

输出结果如下:

class.getResource("")=file:/E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/easyui/WEB-INF/classes/org/study/service/
class.getClassLoader().getResource("")=file:/E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/easyui/WEB-INF/classes/

说明:

class.getResource()方法从class文件位于的文件夹里开始查找。 例如 我们的service文件夹。

class.getClassLoader().getResource() 从/WEB-INF/classes/ 根目录下开始查找。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值