一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
(1)通过request对象获取浏览器端相关的信息
//1.获取浏览器端发送请求的完整路径;
StringBuffer sbuf=request.getRequestURL();
pw.println("url:"+sbuf);
//System.out.println(sbuf);
//2.获取资源名部分-请求路径中8080后的地址;
String uri=request.getRequestURI();
pw.println("uri:"+uri);
//3.获取请求路径中参数;
String qs=request.getQueryString();
pw.println("qs:"+qs);
//4.获取请求路径中的ip地址;
String ip=request.getRemoteAddr();
pw.println("ip:"+ip);//ip=127.0.0.1
//5.获取浏览器发送请求的方式(get请求、post请求)
//在浏览器端,浏览器地址栏回车、超链接、表单的默认方式都是get请求方式
//在浏览器端,表单设置method="post"的方式提交是post请求方式
String method=request.getMethod();
pw.println("method="+method);//method=GET
//6.获取web应用名
String cp=request.getContextPath();
pw.println("cp="+cp);//cp=/servlet
(2)通过request对象获取请求参数 name=value
1)getParameter(String name)
//根据参数中的name来获取value的值
2)getParameterValues(String name)
//该方法返回字符串数组String[]
//通过name来获得多个value值的情况
3)getParameterNames()
//该方法返回Enumeration类型,理解为容器
//获取所有的请求参数中的name值
//接收表单提交发送过来的参数
//获得单个value值
String strName=request.getParameter("username");
String strPwd=request.getParameter("pwd");
pw.println("Name:"+strName+" Pwd:"+strPwd);
//获得多个对应value值
String[] strInterest=request.getParameterValues("interest");
pw.println(Arrays.toString(strInterest));
//获取请求参数中所有的name值
Enumeration<String> names=request.getAttributeNames();
pw.println(names);
//使用循环将names中的内容取出
while(names.hasMoreElements()){
System.out.println(names.nextElement());
}
}
(3)通过request对象设置参数中的中文乱码问题
1)乱码产生的原因
浏览器端一般设置的编码使用utf-8编码,提交表单时使用的也是utf-8编码;tomcat服务器默认情况下是iso8859-1的编码,所以对于英文数字不受影响,但是iso8859-1中没有中文,所以会用?代替。
2)处理乱码的办法
(1)get请求的处理方式
byte[] bs=xxStr.getBytes(“iso8859-1”);
String str=new String(bs,”utf-8”);
(2)post请求的处理方式
setCharacterEncoding(“utf-8”)
//post请求方式中参数的中文编码设置
//调出doGet方法
protected void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
//使用req接收请求参数
String strName=req.getParameter("username");
//处理中文乱发问题
byte[] bs=strName.getBytes("iso8859-1");
String name=new String(bs,"utf-8");
System.out.println(name);
}
//调出doPost方法
protected void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
//设置请求参数中的编码
req.setCharacterEncoding("utf-8");
//使用req接收请求参数
String strName=req.getParameter("username");
System.out.println("strName");
}
(4)通过request对象进行请求转发
1)概念:将未完成的工作交给下一个组件(servlet、jsp)继续完成。 转发是用来实现资源的跳转,浏览器地址栏不会发生变化。 Servlet--->Servlet 2)方法:
//获得转发器
//xx表示转发的下一个组件的地址
RequestDispatcher dis=request.getRequestDispatcher(“xx”)
//实现请求转发,请求和响应对象要最为参数设置进来
dis.forward(request,response);
(5)通过request对象请求转发—实现请求包含
1)方法
//获得转发器,指定转发的地址
RequestDispatcher rd=request.getRequestDispatcher(“xx”);
//实现请求包含的转发
rd.include(request,response);
2)说明 请求包含的转发,会将当前响应结果和转达到xx地址以 后的响应结果,共同处理,一起响应给浏览器端。
(6)使用request作为域对象来使用
域对象:一个对象具有可以被看见的范围,可以存储资源从而实现资源的共享。
//request作为域对象,一般和转发器一起使用。
//往request域对象中存储数据
request.setAttribute(String name, Object obj);
//从request与对象中获取数据
request.getAttribute(String name)
//使用res获得输出流,向页面输出内容
PrintWriter pw=res.getWriter();
pw.println("demo1_servlet");
//请求转发:由RequestDemo1转发到RequestDemo2
//获得转发器
RequestDispatcher rd=req.getRequestDispatcher("request2");
//往request域对象中存储数据(Object)
req.setAttribute("msg", "HELLO!");
//请求转发
rd.forward(req, res);
//请求包含转发
rd.include(req, res);
//获得输出流,向页面输出内容
PrintWriter pw=response.getWriter();
pw.println("demo22222222");
//从request域对象中获取数据
String strMsg=request.getAttribute("msg").toString();
pw.println(strMsg);