一、servletContext对象和request对象的比较

ServletContext

  • 何时创建:服务器启动
  • 何时销毁:服务器关闭
  • 域的作用范围:整个web应用

request

  • 何时创建:访问时创建request对象
  • 何时销毁:响应结束,request对象销毁
  • 域的作用范围:一次请求中

二、转发与重定向的区别

  • 重定向是两次请求,转发是一次请求(在内部转发的)
  • 重定向地址栏地址会变化,转发地址栏地址不变
  • 重定向可以访问外部网站资源,转发只能访问内部资源
  • 转发的性能要优于重定向

三、客户端地址与服务器端地址的写法

  • 客户端地址

    • 是客户端去访问服务器端的地址,服务器外部的地址。
    • 特点:写上web应用名称
  • 服务器端地址
    • 服务器内部资源的跳转地址
    • 特点:不需要写web应用名称

四、注册功能的实现

  1. 获取表单数据
  2. 将数据存储到数据库(中文乱码的解决)
  3. BeanUtils的使用:将map中的数据映射到实体中,将map的key与实体的属性进行对比。

使用BeanUtils进行自动映射,导入commons-beanutils-1.9.3.jar和依赖包commons-logging-1.2.jar、commons-collections-3.2.2.jar

BeanUtils工作原理:将map中的数据,根据key与实体属性的对应关系封装,只要key的名字与实体的属性名字一样,就自动封装到实体中。

平常我们需要这样写:

String username = request.getParameter("username");
String password = request.getParameter("password"); User user = new User();
user.setUsername(username);
user.setPassword(password);
......

但是这样写,如果有一百个参数我们就要写一百遍这样的代码。于是BeanUtils诞生了

Map<String, String[]> properties = request.getParameterMap();

// 2将散装的数据封装到JavaBean
User user = new User(); try {
BeanUtils.populate(user, properties);
} catch (IllegalAccessException | InvocationTargetException e1) {
e1.printStackTrace();
}
// 现在这个位置user对象已经封装好了 // 手动封装uid--uuid--随机不重复的字符串32位的--Java代码生成后是36位的
user.setUid(UUID.randomUUID().toString()); // 3将参数传递给业务操作方法,将JavaBean中的数据存到数据库
register(user);

UUID工具类

import java.util.UUID;

随机不重复的字符串32位的--Java代码生成后是36位的

request注册存数据库中文的乱码解决

    // 设置request的编码--只适合post提交方式
request.setCharacterEncoding("UTF-8"); // get提交方式的乱码解决
// 先使用iso8859-1编码,再使用utf-8解码
String username = request.getParameter("username");
username = new String(username.getBytes("iso8859-1"), "UTF-8"); // 这种方式也适用于post提交
// 但是这种方式一旦数据很多就不方便,所以get方式不适合表单提交,一般用 request.setCharacterEncoding("UTF-8");就可以了

完成注册成功的跳转回显

response.sendRedirect(request.getContextPath()+"/login.jsp");

五、request总结

  • request获得请求行的内容
    request.getMethod()
    request.getRequestURI();
    request.getContextPath();//获得应用的名称
    request.getRemoteAddr();
  • request 获得头的内容

    request.getHeader(String name);
  • request 获得请求体的内容(请求参数)
    String request.getParameter(String name);
    Map<String, String[]> request.getParameterMap();
    String[] request.getParameterValues(String name);

注意:客户端发送的参数到服务器端都是字符串。

获得中文乱码的解决

  • post提交:request.setCharacterEncoding("UTF-8");
  • get提交:parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8")

requeset转发和域

  • request.getRequestDispather("转发的地址,在服务器内部,不用些应用的名称").forward(request,response);
  • 转发时可以向request域中存一些数据,例如错误信息,使用方法:

    request.setAttribute(String name, Object value);

    取时用方法:

    request.getAttribute(name);

Servlet学习request对象总结的更多相关文章

  1. 10 Servlet+Http+Request对象

    1.Servlet的体系结构 Servlet -- 接口----->GenericServlet -- 抽象类------->HttpServlet -- 抽象类 (1)GenericSe ...

  2. Servlet之Request对象

    下面的方法可用在 Servlet 程序中读取 HTTP 头.这些方法通过HttpServletRequest 对象可用. 1    Cookie[] getCookies() 返回一个数组,包含客户端 ...

  3. Servlet中request对象得到路径问题

    1.项目源码:假设现在有一个名为JavaWeb的项目,其中有一个名为TestServlet的serlvet,其doGet方法为: protected void doGet(HttpServletReq ...

  4. Request对象介绍(客户端到服务器)

    1.处理请求和响应的过程request,response,关于request可以从三个方面着手学习.1:如何获取请求头  行  体   2:请求中文处理     3:请求对象的其它常用方法 1.1:r ...

  5. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. 重温Servlet学习笔记--request对象

    request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...

  7. request对象学习

    import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; imp ...

  8. Servlet学习(九)——request

    request运行流程在Servlet学习(四)——response已介绍,不再赘述 1.通过抓包工具获取Http请求 因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行, ...

  9. JSP内置对象之request对象【学习笔记】

    request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...

随机推荐

  1. POJ 3660 Cow Contest ( 最短路松弛思想应用 && Floyd求传递闭包 )

    题意 : 给出 N 头奶牛在比赛的结果,问你最多的能根据给出结果确定其名次的奶牛头数.结果给出的形式为 A  B 代表在比赛当中 A 战胜了 B 分析 : 对于一头奶牛来说,如果我们能确定其他 N - ...

  2. Mybatis系列之逆向工程

    前言 正式开始前需先导入mybatis-generator-core的jar包,并且准备好数据库,表,以及Mybatis Generator官网(http://www.mybatis.org/gene ...

  3. 【进阶技术】一篇文章搞掂:Spring Cloud Stream

    本文总结自官方文档http://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.0.RC3/single/spring-clou ...

  4. 不间断电源(UPS)

    UPS电源一般指不间断电源 UPS(Uninterruptible Power System/Uninterruptible Power Supply),即不间断电源,是将蓄电池(多为铅酸免维护蓄电池 ...

  5. video.js播放rtmp

    项目中要用到rtmp直播和点播.要求:点播能够调整播放进度 开始用腾讯提供的播放器,老卡,画质差,很多时候播不出来,rtmp点播还不能快进. 后来用Wowza自带的flash rtmp播放器,有源码 ...

  6. EZOJ #393加倍的飞机

    分析 从大到小考虑每个点 记录一个连通块中选了选了几个 如果选的小于siz则直接选否则不选 代码 #include<bits/stdc++.h> using namespace std; ...

  7. java.io.IOException: Malformed \uxxxx encoding.

    java.io.IOException: Malformed \uxxxx encoding.  at com.dong.frame.util.ReadProperties.read(ReadProp ...

  8. Jmeter接口测试报告模板优化(续)

    在之前的基础上又优化了一下: 1.增加了对接口响应时间段的统计,如小于0.5s的请求有多少,0.5-1s的有多少,大于1s的有多少.可以自行修改.且不同范围内的时间字体颜色不一样,便于区分. < ...

  9. 鸿蒙系统开源学习经验分享HarmonyOS[www.allharmonyos.com]

    分享鸿蒙系统开源知识,分享学习经验,分享鸿蒙系统开发经验 www.allharmonyos.com https://gitee.com/allharmonyos https://github.com/ ...

  10. memcpy复制字符串的注意事项/memcpy不能用来拷贝类类型

    strcpy复制src到dst,最后将dst的下一个位置置为'\0',所以dst是以'\0'结尾的字符串 ] = "abcde"; cout << c1 << ...