Request中的各种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Request中的各种方法相关的知识,希望对你有一定的参考价值。

参考技术A 展开

Request中的各种方法

2017年02月09日 10:36:55  现龙在田丶  阅读数:7250 标签:  java web  web  Request  更多

个人分类:  JAVA  Web  Request

原文地址:http://www.cnblogs.com/xrq730/p/4903161.html

Request中方法众多,对于Java Web程序员来说,种种方法都会在工作中常常用到。Request由于不是JDK的一部分,这些方法的用法也没有专门的API可以查,所以在工作中遇到Request中方法的时候,所以常常感到困惑,因为觉得网上写的不清楚,自己又懒得写一个Web测试程序。这篇文章,一次性把Request中的各个方法的返回写在这里并做一个详细的总结,以备以后工作中用到可以随时查看。

示例

为了让后台可以取到queryString(这个专门在get和post的区别的文章中会讲解的),做一个表单,用post方式提交:

<body>

    <form action="request?a=1&b=2&c=3" method="post">

        <input type="submit" value=" 提交 " />

    </form>

</body>

web.xml就不写了,大家应该都会配置,看下后台doPost方法的写法:

protected void doPost(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException



    System.out.println("request.getAuthType():" + request.getAuthType()); // 获取保护servlet的认证方案名(BASIC或SSL),未受保护的servlet返回的就是null

    System.out.println("request.getCharacterEncoding():" + request.getCharacterEncoding()); // 获取字符编码

    System.out.println("request.getContentLength():" + request.getContentLength()); // 返回请求体内容的长度

    System.out.println("request.getContentType():" + request.getContentType()); // 获取内容类型

    System.out.println("request.getContextPath():" + request.getContextPath()); // 获取上下文路径,就是"/"+工程名

    System.out.println("request.getLocalAddr():" + request.getLocalAddr()); // 获取应用服务器的IP地址

    System.out.println("request.getLocalName():" + request.getLocalName()); // 获取应用服务器的主机名

    System.out.println("request.getLocalPort():" + request.getLocalPort()); // 获取应用服务器的端口号

    System.out.println("request.getMethod():" + request.getMethod()); // 获取请求方式获取请求方式(GET与POST为主,也会有PUT、DELETE、INPUT)

    System.out.println("request.getPathInfo():" + request.getPathInfo());

    System.out.println("request.getPathTranslated():" + request.getPathTranslated());

    System.out.println("request.getProtocol():" + request.getProtocol()); // 获取客户端向服务端传送数据使用的协议名称

    System.out.println("request.getQueryString():" + request.getQueryString()); // 获取追加到Url后面的查询字符串

    System.out.println("request.getRemoteAddr():" + request.getRemoteAddr()); // 获取发出请求的客户端的IP地址

    System.out.println("request.getRemoteHost():" + request.getRemoteHost()); // 获取发出请求的客户端的主机名

    System.out.println("request.getRemotePort():" + request.getRemotePort()); // 获取发出请求的客户端的端口号

    System.out.println("request.getRemoteUser():" + request.getRemoteUser()); // 如果用户已经过认证,则返回发出请求的用户登录信息

    System.out.println("request.getRequestedSessionId():" + request.getRequestedSessionId()); // 获取sessionId

    System.out.println("request.getRequestURI():" + request.getRequestURI()); // 获取"/"+工程名+请求路径

    System.out.println("request.getRequestURL():" + request.getRequestURL()); // 获取完整的请求地址,不带queryString

    System.out.println("request.getScheme():" + request.getScheme()); // 获取当前链接使用的协议,一般应用就是http,SSL返回https

    System.out.println("request.getServerName():" + request.getServerName()); // 获取URL请求的名字(以Ip请求就是Ip,以域名请求就是域名)

    System.out.println("request.getServerPort():" + request.getServerPort()); // 获取URL请求的端口号

    System.out.println("request.getServletPath():" + request.getServletPath()); // 获取请求路径

    System.out.println("request.isSecure():" + request.isSecure()); // 获取此请求是否使用安全协议(比如https)



我从本地发起一个请求"http://localhost:8080/TestWeb/request?a=1&b=2&c=3",先看下用工具抓取的此次请求、响应的数据(火狐、360、谷歌都有,按F12即可):

再看一下后台的运行结果:

request.getAuthType():null

request.getCharacterEncoding():null

request.getContentLength():0

request.getContentType():application/x-www-form-urlencoded

request.getContextPath():/TestWeb

request.getLocalAddr():127.0.0.1

request.getLocalName():dell

request.getLocalPort():8080

request.getMethod():POST

request.getPathInfo():null

request.getPathTranslated():null

request.getProtocol():HTTP/1.1

request.getQueryString():a=1&b=2&c=3

request.getRemoteAddr():127.0.0.1

request.getRemoteHost():127.0.0.1

request.getRemotePort():3405

request.getRemoteUser():null

request.getRequestedSessionId():B198D2D352F2F23A1B3754246D68B803

request.getRequestURI():/TestWeb/request

request.getRequestURL():http://localhost:8080/TestWeb/request

request.getScheme():http

request.getServerName():localhost

request.getServerPort():8080

request.getServletPath():/request

request.isSecure():false

getParameter、getAttribute/setAttribute、getSession/setSession等类似方法,大家都比较熟悉,也比较不会搞错,就不列了,列的都是一些相对不常用的request方法。很多方法都已经能看出返回的是什么了,但是有些方法由于我这里是从本地发到本地的,所以看不到效果,不过注释上也给了详细的解释了,两个没写注释的方法查不到是什么意思,也试不出来怎么样才不是null,以后会记得关注,知道了就会更新。

转载java 获取路径的各种方法

转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/guoyuqiangf8/p/3506768.html

主要方法有:

(1)、request.getRealPath("/");             //不推荐使用获取工程的根路径
(2)、request.getRealPath(request.getRequestURI());         //获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用
(3)、request.getSession().getServletContext().getRealPath("/");           //获取工程的根路径,这个方法比较好用,可以直接在servlet和jsp中使用
(4)、this.getClass().getClassLoader().getResource("").getPath();             //获取工程classes 下的路径,这个方法可以在任意jsp,servlet,java文件中使用,因为不管是jsp,servlet其实都是java程序,都是一个 class。所以它应该是一个通用的方法。

前言、关于绝对路径和相对路径

1.基本概念的理解

  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)。例 如:C:test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例 如:"./" 代表当前目录,"../"代表上级目录。这种类似的表示,也是属于相对路径。

另外关于URI,URL,URN等内容,请参考RFC相关文档标准。RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,(http://www.ietf.org/rfc/rfc2396.txt)

2.关于JSP/Servlet中的相对路径和绝对路径。

  2.1服务器端的地址服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)

1、request.getRealPath

方法:request.getRealPath("/") 
得到的路径:C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\strutsTest\\

方法:request.getRealPath(".") 
得到的路径:C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\strutsTest\\.

方法:request.getRealPath("") 
得到的路径:C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\strutsTest

request.getRealPath("web.xml") 
C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\strutsTest\\web.xml

2、request.getParameter(""); 

ActionForm.getMyFile();

方法:String filepath = request.getParameter("myFile"); 
得到的路径:D:\\VSS安装目录\\users.txt

方法:String filepath = ActionForm.getMyFile(); 
得到的路径:D:\\VSS安装目录\\users.txt

-------------------------------------------------- 
strutsTest 为工程名

myFile 在ActionForm中,为private String myFile; 
在jsp页面中:为<html:file property="myFile"></html:file>

--------------------------------------------------

3、获得系统路径

在Application中: 
System.getProperty("user.dir")

在Servlet中: 
ServletContext servletContext = config.getServletContext(); 
String rootPath = servletContext.getRealPath("/");

在jsp中: 
application.getRealPath("")

4、其他1

1.可以在servlet的init方法里

String path = getServletContext().getRealPath("/");

这将获取web项目的全路径

例如 :E:\\eclipseM9\\workspace\\tree\\

tree是我web项目的根目录

2.你也可以随时在任意的class里调用

this.getClass().getClassLoader().getResource("").getPath(); // 经过测试,这种方法是安全的,最有效的

this.getClass().getResource("/conf").getPath();// 经过测试,这种方法也是安全的

这将获取 到classes目录的全路径

例如 : /D:/workspace/strutsTest/WebRoot/WEB-INF/classes/

还有 this.getClass().getResource("").getPath().toString();

这将获取 到 /D:/workspace/strutsTest/WebRoot/WEB-INF/classes/bl/

这个方法也可以不在web环境里确定路径,比较好用

3.request.getContextPath();

获得web根的上下文环境

如 /tree

tree是我的web项目的root context

5、其他2

java获取路径几种途径- -

1. jdk如何判断程序中的路径呢?一般在编程中,文件路径分为相对路径和绝对路径,绝对路径是比较好处理的,但是不灵活,因此我们在编程中对文件进行操作的时候,一般都是读取文件的相对路径,

相对路径可能会复杂一点,但是也是比较简单的,相对的路径,主要是相对于谁,可以是类加载器的路径,或者是当前 java文件下的路径,在jsp编程中可能是相对于站点的路径,相对于站点的路径,我们可以通过 getServletContext().getRealPath("\\") 和request.getRealPath("\\"):这个是取得站点的绝对路径; 而getContextPath():取得站点的虚拟路径;

2. class.getClassLoader.getPath():取得类加载器的路径:什么是类加载器呢? 一般类加载器有系统的和用户自己定义的;系统的ClassLoader就是jdk提供的,他的路径就是jdk下的路径,或者在 jsp编程,比如Tomcat ,取得的类加载器的位置就是tomaca自己设计的加载器的路径,

明白了这些之后,对于文件路径的操作就会相当的清楚,我们在编程的时候,只要想清楚我们所操作的文件是相对于什么路径下的,取得相对路径就可以了.

6、总结

1、获取web服务器下的文件路径 
request.getRealPath("/") 
application.getRealPath("")【jsp中 】 
ServletContext().getRealPath("")

System.getProperty("user.dir")【不同位置调用,获取的路径是动态变化的】

2、获取本地路径

jsp中,<html:file property="myFile"/>

request.getParameter("myFile"); 
ActionForm.getMyFile(); 
获取的值相同:如D:\\VSS安装目录\\users.txt

*********************************

this.getClass().getClassLoader().getResource("").getPath(); 
==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/ 
this.getClass().getResource("").getPath().toString(); 
==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/bl/

3、获取相对路径

request.getContextPath();

 

另外:

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是" /filename",这里的/代表web发布根路径下WEB-INF/classes默认使用该方法的路径是:WEB-INF/classes.已经在 Tomcat中测试。

以上是关于Request中的各种方法的主要内容,如果未能解决你的问题,请参考以下文章

jsp Request获取url信息的各种方法比较

request获取各种路径

Servlet中的request对象重定向和转发的差别

从request获取各种路径总结 request.getRealPath("url")

request获取各种路径(转)

Request对象的介绍