Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别   3 comments

假定你的工程名称为projects,你在浏览器中输入请求路径:

http://127.0.0.1:8080/projects/pages/newForm.jsp

则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/projects
2、System.out.println(request.getServletPath());
打印结果:/pages/newForm.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/projects/pages/newForm.jsp
4、 System.out.println(request.getRealPath(“/”));
JSP servlet API提供了getRealPath(path)方法,返回给定虚拟路径的真实路径,如果转换错误,则返回null。

打印结果:C:\Tomcat5.0\webapps\projects\test

想不清楚的代码或原理,动手试验一般会找到答案!!!

 

 

Posted 2011年03月14日 by gw8310 in 未分类

3 responses to “Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别

Subscribe to comments with RSS.

  1. 假定:http://localhost:8080/web001/Test001?fname=san&lname=zhang

    System.out.println(request.getQueryString());
    打印结果: fname=san&lname=zhang

  2. request.getPathInfo() 方法的作用

    request.getPathInfo();

    这个方法返回请求的实际URL相对于请求的serlvet的url的路径。(个人理解。)
    比如,有一个Servlet的映射是这样配置的:

    TestServlet
    /servlet/test/*

    为servlet配置的访问路径是:/servlet/test/*

    我只要访问:
    http://localhost:8080/dwr/servlet/test/这里可以是任何东西

    就可以访问那个servlet. dwr 是项目的名字

    比如,我用这个 URL 来访问它:

    http://localhost:8080/dwr/servlet/test/joejoe1991/a.html

    这个实际的URL,相对于那个servlet 的url (”/servlet/test/*”)的路径是:
    /joejoe1991/a.html

    所以 request.getPathInfo() 方法返回的就是:

    “/joejoe1991/a.html”

    如果你的URL里有查询字符串,getPathInfo() 方法并不返回这些查询字符串。

    例如:

    http://localhost:8080/dwr/servlet/test/joejoe1991/a.html?name=test

    getPathInfo() 返回的仍然是:

    “/joejoe1991/a.html” ,而并不包括后面的”?name=test”

    我们可以利用这个方法去做类似于多用户博客系统的那种URL。

    都是http://www.xxx.com/blog/ 开头
    后面跟的是用户名,
    比如我要访问joejoe1991的博客:

    http://www.xxx.com/blog/joejoe1991

    这个joejoe1991并不是一个真实存在的目录。

    建一个servlet,配置路径为:/blog/*

    然后在这个servlet里调用request.getPathInfo() 方法。

    比如:http://www.xxx.com/blog/jjx

    那request.getPathInfo() 方法返回的就是jjx ,表示要访问jjx的博客。

    这时再去数据库里查相应的数据就好。

  3. public int getServerPort()
    Returns the port number to which the request was sent. It is the value of the part after “:” in the Host header, if any, or the server port where the client connection was accepted on.

    Returns:
    an integer specifying the port number

    http://127.0.0.1:8080

    getServerPort() 返回 8080

    引用
    getLocalPort
    public int getLocalPort()
    Returns the Internet Protocol (IP) port number of the interface on which the request was received.

    Returns:
    an integer specifying the port number

    如果你的服务器监听端口为:80

    外面请求的8080进行过转发,地址重写等,从8080,提交到服务器的80端口;
    getLocalPort() 返回80

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: