java请求servlet_JAVA基础之HttpServletRequest请求

HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。

怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。详见https://www.cnblogs.com/wenanbang/p/4142415.html

其实也可以单纯的认为是若是带数据的话就请求转发了,若改地址的话就重定向了。

一、HttpServletRequest:

概述和运行流程详见HttpServletResponse!

二、获取HTTP请求:

1b089e40edc7af6255bb10815a46e270.png

三、获取请求行:

1、获得客户端的请求方式:

getMethod()     获得String类型;

2、获得请求的资源:

getContextPath() 获得String类型的 web应用的名称(项目名)

getQueryString() 获得 get提交url 地址后的参数字符串;

getRequestURI() 获取URI地址String类型

getRequestURL() 获取URL地址StringBuffer类型

request.getRemoteAddr() 获得访问的客户端IP地址

protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//获取请求方式

String method =request.getMethod();

System.out.println("请求方式为:" +method);//获取请求URI

String URI =request.getRequestURI();

System.out.println("URI为" +URI);//获取请求URL

StringBuffer URL =request.getRequestURL();

System.out.println("URL为:" +URL);//URI为/WEB/LineServlet//URL为:http://localhost:8080/WEB/LineServlet//获取WEB项目名称

String name =request.getContextPath();

System.out.println("WEB项目名称为:" +name);//获取get请求后url后的字符串

String query =request.getQueryString();

System.out.println("get请求的参数为:" +query);//获取客户端的ip地址

String ip =request.getRemoteAddr();

System.out.println("ip地址为:" +ip);

}

四、获取请求头:

getHeader(String name)

referer 头的作用:获取该访问的来源,做防盗链

protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//获取refere头

String refere = request.getHeader("Referer");

String content= null;if(refere.startsWith("http://localhost:8080")){

content="真的离婚了!";

}else{

content="你是小偷!";

}//解决乱码

response.setContentType("text/html;charset=utf-8");

response.getWriter().write(content);

}

Insert title here

宋仲基和宋慧乔分手了

五、获得请求体:

1、解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

2、解决get提交的方式的乱码:

parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//解决中文乱码问题(post请求)//request.setCharacterEncoding("UTF-8");//获取请求参数//1.单个值的参数

String name=request.getParameter("username");//get解决乱码:得先将获取到的信息用原来的编码表进行解码,然后再用后来的编码表进行编码

name=new String(name.getBytes("ISO-8859-1"),"UTF=8");

String sex=request.getParameter("sex");

System.out.println(name+" ......"+sex);//2.获取多个值的

String[] hobbys=request.getParameterValues("hobby");//遍历

for(String s:hobbys){

System.out.println(s);

}//3.获取所有的请求参数MAP

Map map=request.getParameterMap();//遍历

Set set=map.keySet();for(String str:set){

String [] value=map.get(str);for(String v:value){

System.out.println(str+"..."+v);

}

}

六、request的其他功能:

1、request 也是个域对象,也是具有以下功能:

setAttribute(Stringname,Objecto)

getAttribute(Stringname)

removeAttribute(Stringname)

2、request完成请求转发:

获得请求转发器----path是转发的地址

RequestDispatchergetRequestDispatcher(Stringpath)

通过转发器对象转发

requestDispathcher.forward(ServletRequestrequest,ServletResponseresponse)

七、ServletContext域与Request域的生命周期比较:

1、ServletContext:

创建:服务器启动

销毁:服务器关闭

域的作用范围:整个web应用

2、request:

创建:访问时创建request

销毁:响应结束request销毁

域的作用范围:一次请求中

八、转发和重定向的区别:

1、重定向两次请求,转发一次请求

2、重定向地址栏的地址变化,转发地址不变

3、重新定向可以访问外部网站转发只能访问内部资源

4、转发的性能要优于重定向

(需要带数据的时候用请求转发,由第一个Servlet01带数据到Servlet02!需要地址转变的用重定向)

public class Servlet01 extendsHttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//向request域中存值

request.setAttribute("name", "张三");//请求转发

request.getRequestDispatcher("/Servlet02").forward(request, response);

}

public class Servlet02 extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//从request 域中取值

String name =(String)request.getAttribute("name");//解决中文乱码

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("hello"+name);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值