关于request.getServletPath(),request.getContextPath()的总结

本文章主要讨论以下几种request获取路径的方法:

request.getServletPath()
request.getPathInfo()
request.getContextPath()
request.getRequestURI()
request.getRequestURL()
request.getServletContext().getRealPath()

以一个简单的例子说明:
web.xml配置(注意此处的url-pattern项)

<?xml version="1.0" encoding="UTF-8"?> aab a.jsp test com.java.test.TestServlet
</servlet>
<servlet-mapping>
	<servlet-name>test</servlet-name>
	<url-pattern>/*</url-pattern><!-- 注意此处 -->
</servlet-mapping>

TestServlet.java文件:

package com.java.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(“servletPath:”+req.getServletPath());
System.out.println(“contextPath:”+req.getContextPath());
System.out.println(“contextPath2:”+req.getServletContext().getContextPath());
System.out.println(“pageInfo:”+req.getPathInfo());
System.out.println(“uri:”+req.getRequestURI());
System.out.println(“url:”+req.getRequestURL());
System.out.println(“realPath:”+req.getServletContext().getRealPath("/"));

}

}

此时请求http://localhost:8080/testweb (url-pattern=/*)
打印出来的值为:

servletPath:
contextPath:/testweb
contextPath2:/testweb
pageInfo:null
uri:/testweb
url:http://localhost:8080/testweb
realPath:G:\java.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

请求http://localhost:8080/testweb/abc 打印的值为:

servletPath:
contextPath:/testweb
contextPath2:/testweb
pageInfo:/abc
uri:/testweb/abc
url:http://localhost:8080/testweb/abc
realPath:G:\java.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

当我们修改web.xml为如下时(注意url-pattern的改变):

<?xml version="1.0" encoding="UTF-8"?> aab a.jsp
<servlet>
	<servlet-name>test</servlet-name>
	<servlet-class>com.java.test.TestServlet</servlet-class>
	
</servlet>

<servlet-mapping>
	<servlet-name>test</servlet-name>
	<url-pattern>/abc/def/*</url-pattern><!-- 注意此处 -->
</servlet-mapping>

请求http://localhost:8080/testweb/abc/def/ghi/test.html (url-pattern=/abc/def/*)
打印的值为:

servletPath:/abc/def
contextPath:/testweb
contextPath2:/testweb
pageInfo:/ghi/test.html
uri:/testweb/abc/def/ghi/test.html
url:http://localhost:8080/testweb/abc/def/ghi/test.html
realPath:G:\java.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

通过观察打印结果,我们可以总结:

getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,的部分不包括。
getPathInfo():与getServletPath()获取的路径互补,能够得到的是“url-pattern”中
d的路径部分
getContextPath():获取项目的根路径
getRequestURI:获取根路径到地址结尾
getRequestURL:获取请求的地址链接(浏览器中输入的地址)
getServletContext().getRealPath("/"):获取“/”在机器中的实际地址
getScheme():获取的是使用的协议(http 或https)
getProtocol():获取的是协议的名称(HTTP/1.11)
getServerName():获取的是域名(xxx.com)
getLocalName:获取到的是IP

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web程序设计题库 一、选择题 1、以下文件名后缀中,只有( C )不就是静态网页的后缀。 A、、html B、、htm C 、JSP D、、shtml 2、以下文件名后缀中,只有( B )不就是动态网页的后缀。 A、、jsp B、、html C、、aspx D、php 3、在page指令中,( C )属性就是可以在页面中重复的属性。 A、language B、buffer C、import D、autoflush 4、JSP的结构由( B )组成(多选)。 A、指令 B、注释 C、脚本元素 D、操作 5、以下选项中,那一项不就是JSP指令( B )。 A、page B、import C、include D、taglib 6、下面哪种数据类型就是基本类型( D )。 A、class B、interface C、数组 D、char 7、下面哪种数据类型就是引用类型( C )。 A、boolean B、int C、interface D、long 8、下面哪一个运算符具有3个操作数( D )。 A、* B、++ C、&& D、?: 9、下面那个运算符只有一个操作数( A )。 A、~ B、"" C、<< D、/ 10、下面那个语句就是条件语句( C )。 A、break语句 B、while语句 C、if语句 D、for语句 11、类中的成员默认的访问修饰符就是( A )。 A、private B、protected C、public D、空 12、常量使用( C )进行修饰 A、private B、abstract C、final D、static 13、包含Servlet发回到客户端信息的ServletResponse对象就是由( C )创建的。 A. 客户端的浏览器 B. Web服务器的HTTP引擎 C. Web服务器的Servlet容器 D. Servlet对象 14、对于标准的Web网页,通常使用( B )表示响应信息就是HTML格式的文本文件。 A. text/css B、 text/html C.application/vnd、ms-excel D、 application/msword 15、下面哪个方法不属于session对象( D ) A、getAttributeNames() B、getservletContext() C、invalidate() D、addCookie(Cookie cook) 16、下面哪个方法不属于request对象( B ) A、getServerName() B、getServerInfo() C、getServletPath() D、getServerPort() 17、能够获取当前页信息并调用页面方法的对象就是( B ) A、request B、page C、PageContext D、session 18、以下操作中,( A )就是与使用JavaBean无关的。 A、jsp:include B、jsp:useBean C、jsp:setProperty D、jsp:getProperty 19、下面哪个不就是jsp:setProperty操作的属性( D )。 A、name B、param C、property D、scope 20、以下方法中,哪一个方法不就是HTTPServlet类的方法( B )。 A、doGet B、doService C、doPost D、doDelete 21、以下类中,哪一个类不就是javax、servlet与javax、servlet、http包中提供的类或 接口( B )。 A、Servlet B、BaseServlet C、GenericServlet D、HTTPServlet 22、与JSP同类型的技术有( C )。 A.CGI B、C/C++ C、ASP D、C# 23、下面( D )不就是JDK的开发包。 A.JavaSE B、JavaME C、JavaEE D、JavaBean 24、Tomcat的默认端口就是( B )。 A.7001 B、8080 C、80 D、112 25、下面不就是JSP本身以加载的基本类的就是( A )。 A、java、lang、*  B、java、io、* C、javax、servlet、* D、javax、servlet、jsp* 26、对于预定义<%!预定义%>的说法错误的就是( C )。 A、一次可以声明多个变量与方法,只要以分毫(;)结尾就行 B、一个声明仅在一个页面中有效 C、声明的变量将作为局部变量 D、在预定义中声明的变量将在JSP页面初始化时初始化 27、在JSP中使用<jsp:getProperty>标记时,不会出现的属性就是( C )。 A、name B、property C

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值