HttpServletRequest对象

通过HttpServletRequest对象可获取客户端在访问服务器时,请求的所有信息

  • 获取客户机的信息
  1. getRequestURL:返回客户端发出请求时的完整URL
  2. getRequestURI:返回请求行中的部分资源名名称
  3. getQueryString:返回请求中的参数部分
  4. getRemoteAddr:返回请求中客户机的IP地址
  5. ......
String requestURL= request.getRequestURL;
String requestURI = request.getRequestURI;
String queryString = request.getQueryString;
String IP = getRemoteAddr;
  • 获取客户机的请求头
  1. getHeader(string name);返回String;
  2. getHeaders(String name);返回Enumeration;
  3. getHeaderNames();返回Enumeration;返回所有的请求头;
PrintWriter out = response.getWriter();
Enumertion<String> reqHeadInfos = request.getHeaderNames();
while(reqHeadInfos.hasMoreElements()){
String name = reqHeadInfos.nextElement();
String value = request.getHeader(name);
out.write(name +":"+value);
}
  • 获取客户端提交的数据
  1. getParameter(String name );
  2. getParameterValues(String name);
  3. getParameterMap();编写框架时常用;

表单信息:

<form action="xxx" method = "post">
<input type="text" name = "userid" maxlength = ""><br>
<input type="checkbox" name = "hobby" value = "唱歌">唱歌
<input type="checkbox" name = "hobby" value = "跳舞">跳舞
<input type="checkbox" name = "hobby" value = "rap">rap
<input type="checkbox" name = "hobby" value = "打篮球">打篮球
<br>

所提交到的xxxjava文件中通过request获取其提交的数据:

PrintWriter out = response.getWriter();
String username = request.getParameter("name");
String[] hobbys = request.getParameterValues("hobby");
String hobbyStr = "";
for (int i = ;hobbys!=null && i <hobbys.length;i++){
if(i = hobbys.length-){
hobbyStr += hobbys[i];
}else{
hobbyStr +=hobbys[i]+",";
}
}
out.write("name="+username);
out.write("hobbys="+hobbyStr);

request接收表单出现乱码问题

  • 以POST方式提交表单

出现乱码的原因是服务器和客户端沟通的编码不一致,而服务器可以通过ServletRequest接口继承而来的setCharacterEncoding(charset)方法来统一编码设置;

在获取数据前先统一编码设置:

request.setCharacterEncoding("UTF-8");
  • 以GET方式提交表单

即使统一编码,以GET方式提交的表单也会出现乱码,原因未知,request对象是以ISO8859-1的字符编码来接收数据,为了可以解决乱码问题,request对象需先获取以ISO8859-1字符编码接收到的数据的字节数组,再指定以"UTF-8"编码重新构建字符串;

PrintWriter out = response.getWriter();
String name = request.getparameter("name");
name = new String(name.getBytes("ISO8859-1"),"UTF-8");
out.write("name = "+name);

Request对象实现转发

之前我们有学过通过ServletContext实现转发:

RequestDispatcher reqDispatcher = this.getServletContext().getRequestDispatcher("/xxx/xxx");//这里返回的RequestDispatcher对象也可由request对象直接通过getRequestDispatcher()方法获取到
reqDispatcher.forward(request,response);//再通过forward方法实现请求转发

因此通过Request对象实现转发如下:

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

java_第一年_JavaWeb(5)的更多相关文章

  1. java_第一年_JavaWeb(14)

    EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...

  2. java_第一年_JavaWeb(13)

    JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...

  3. java_第一年_JavaWeb(11)

    自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...

  4. java_第一年_JavaWeb(15)

    Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...

  5. java_第一年_JavaWeb(12)

    SimpleTag标签 定义了五个方法:setJspContext.setJspBody.setParent和getParent以及最重要的doTag方法(完成了所有的业务逻辑): setJspCon ...

  6. java_第一年_JavaWeb(10)

    JavaWeb的两种开发模式 JSP+JavaBean框架:JavaBean负责封装数据.提供方法,JSP负责处理用户请求和显示数据:只能开发较为简单的业务: JSP+JavaBean+Servlet ...

  7. java_第一年_JavaWeb(9)

    JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...

  8. java_第一年_JavaWeb(8)

    前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...

  9. java_第一年_JavaWeb(7)

    JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...

  10. java_第一年_JavaWeb(6)

    会话 会话:浏览器从打开一个进程访问服务器到该浏览器关闭,我们称之为一个会话: 在浏览器和服务器交互期间,会不可避免地产生一些数据,而为了为每个用户保存其对应的数据,可使用两种技术:Cookie和Se ...

随机推荐

  1. 对于call,apply,bind 的理解

    JavaScript 中 call().apply().bind() 的用法 之前对与JavaScript中的call,apply,bind这几个方法一直理解的很模糊,今天总结一下. 例1 var n ...

  2. Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换

      linux操作系统是将CPU轮流分配给任务,分时执行的.而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执 ...

  3. 树——binary-tree-postorder-traversal(树的前序遍历)

    问题: Given a binary tree, return the preorder traversal of its nodes' values. For example: Given bina ...

  4. Email常用缩写

    Abbreviations Used in email Abbreviation Meanings ATM at the moment AFAIK as far as I know BTW by th ...

  5. console.log 不起作用

    devtool console.log 突然不起作用了

  6. 解析 Java 反射题中一个有趣的坑

    public class Test { public void age(int age) { System.out.println("int age="+age); } publi ...

  7. Spring的AOP和IoC及隔离级别

    Spring的AOP和IoC Spring AOP:代理机制.Spring提供的自动代理机制 Spring的IoC来实组件之间的依赖关系注入, 使控制层与业务实现分离,即客户通过调用业务委托接口来调用 ...

  8. jmeter性能工具 之监控cpu,内存等信息(四)

    1.jmeter 本身不支持直接监控 cpu,内存等信息,需要去官网下载控件 JMeterPlugins-Standard-1.4.0.zip    解压好将其中\lib\ext\JMeterPlug ...

  9. Kettle连接MySQL错误:OPTION SQL_SELECT_LIMIT=DEFAULT

    由于升级了MySQL到5.6,运行ETL报错: OPTION SQL_SELECT_LIMIT=DEFAULT 上网查询原来是MySQL的驱动版本不一致,之前的驱动不支持这样的写法,于是上网下载对应的 ...

  10. B2C自营商城的订单设计方案

    B2C自营商城的订单设计方案 2018年06月01日 17:19:00 lkx94 阅读数 1640   去年我们的美妆社区APP,上线了自有商城.之后经过多次版本迭代,商城系统的模块已经基本健全,值 ...