js中HttpServletRequest的使用

HttpServletRequest工具代表客户端的请求,当客户端通过HTTP协议接见服务器时,HTTP请求头中的所有信息都封装在这个工具中,开发人员通过这个工具的方式,可以获得客户这些信息。  常用方式:...

HttpServletRequest工具代表客户端的请求,当客户端通过HTTP协议接见服务器时,HTTP请求头中的所有信息都封装在这个工具中,开发人员通过这个工具的方式,可以获得客户这些信息。  常用方式:


1.获得客户机【浏览器】信息

  • getRequestURL方式返回客户端发出请求时的完整URL。

  • getRequestURI方式返回请求行中的资源名部门。

  • getQueryString 方式返回请求行中的参数部门。

  • getPathInfo方式返回请求URL中的分外路径信息。分外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

  • getRemoteAddr方式返回发出请求的客户机的IP地址

  • getRemoteHost方式返回发出请求的客户机的完整主机名

  • getRemotePort方式返回客户机所使用的网络端口号

  • getLocalAddr方式返回WEB服务器的IP地址。

  • getLocalName方式返回WEB服务器的主机名


2.获得客户机请求头

  • getHeader方式

  • getHeaders方式

  • getHeaderNames方式


3.获得客户机请求参数(客户端提交的数据)

  • getParameter方式

  • getParameterValues(String name)方式

  • getParameterNames方式

  • getParameterMap方式


应用1-防盗链(行使请求头中的Referer属性)

获取Referer这个新闻头判断Referer是不是从我的首页来的。若是不是从我的首页来的,跳转回我的首页

//获取到网页是从哪里来的
String referer  = request. getHeader ( "Referer" );
//若是不是从我的首页来或者从地址栏直接接见的,
if ( referer  == null || ! referer. contains ( "localhost:8080/zhongfucheng/index.jsp" ) 
{  
//回到首页去
    response.sendRedirect ( "/zhongfucheng/index.jsp" );   
  return ;   
}
       
//能执行下面的语句,说明是从我的首页点击进来的,那没问题,照常显示
  response.setContentType ( "text/html;charset=UTF-8" );
  response.getWriter (). write ( "防链盗ok" );

若是我在浏览器直接输入地址【此时Referer是为null的】。


解决中文乱码问题

1.post提交乱码

来这里我们来剖析一下乱码的缘故原由,在前面的博客中我已经先容了,Tomcat服务器默认编码是ISO 8859-1,而浏览器使用的是UTF-8编码。浏览器的中文数据提交给服务器,Tomcat以ISO 8859-1编码对中文编码,当我在Servlet读取数据的时刻,拿到的固然是乱码。而我设置request的编码为UTF-8,乱码就解决了。

2.get提交乱码

request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");

效果照样乱码。这是为什么呢?我明显已经把编码设置成UTF-8了,根据post方式,乱码问题已经解决了!。我们来看看get和post方式的区别在哪?为什么post方式设置了request编码就可以解决乱码问题,而get方式不能呢。

首先我们来看一下post方式是怎么举行参数通报的。当我们点击提交按钮的时刻,数据封装进了Form Data中http请求中把实体主体带过去了【传输的数据称之为实体主体】,既然request工具封装了http请求,以是request工具可以剖析到发送过来的数据,于是只要把编码设置成UTF-8就可以解决乱码问题了

而get方式差别,它的数据是从新闻行带过去的,没有封装到request工具内里,以是使用request设置编码是无效的。要解决get方式乱码问题也不难,我们既然知道Tomcat默认的编码是ISO 8859-1,那么get方式由新闻体带过去给浏览器的时刻肯定是用ISO 8859-1编码了。  

//此时获得的数据已经是被ISO 8859-1编码后的字符串了,这个是乱码
 String name = request.getParameter("username");

//乱码通过反向查ISO 8859-1获得原始的数据
byte[] bytes = name.getBytes("ISO8859-1");

//通过原始的数据,设置准确的码表,构建字符串
 String value = new String(bytes, "UTF-8");

 除了手工转换,get方式还可以改Tomcat服务器的设置来解决乱码,然则不推荐使用,这样不天真。我们都知道Tomcat默认的编码是ISO 8859-1,若是在Tomcat服务器的设置下改成是UTF-8的编码,那么就解决服务器在剖析数据的时刻造成乱码问题了。

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>

固然也有另一种改服务器编码的方式。设置Tomcat的接见该端口时的编码为页面的编码,这种改法是随着页面的编码而变

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true" />

设置编码为UTF-8

request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");


应用2-实现转发


我们可以使用ServletContext和request实现Servlet之间的通讯,那么我们用哪一种呢?一样平常的原则:可以使用request就尽可能使用request。由于ServletContext代表着整个web应用,使用ServletContext会消耗大量的资源,而request工具会随着请求的竣事而竣事,资源会被接纳。使用request域举行Servlet之间的通讯在开发中是异常频仍的。 转发时序图如下



请求转发的细节

若是在挪用forward方式之前,在Servlet程序中写入的部门内容已经被真正地传送到了客户端,forward方式将抛出IllegalStateException异常。 也就是说:不要在转发之前写数据给浏览器

若是在挪用forward方式之前向Servlet引擎的缓冲区中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方式就可以被正常执行,原来写入到输出缓冲区中的内容将被清空,然则,已写入到HttpServletResponse工具中的响应头字段信息保持有用


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/2024

  • 发表于 2021-04-05 12:56
  • 阅读 ( 385 )
  • 分类:互联网

0 条评论

请先 登录 后评论
ztr
ztr

739 篇文章

你可能感兴趣的文章

相关问题