Servlet学习request对象总结

一、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的名字与实体的属性名字一样,就自动封装到实体中。

平常我们需要这样写:

1String username = request.getParameter("username"); 2String password = request.getParameter("password"); 3 4User user = new User(); 5user.setUsername(username); 6user.setPassword(password); 7......

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

1Map<String, String[]> properties = request.getParameterMap(); 2 3// 2将散装的数据封装到JavaBean 4User user = new User(); 5 6try { 7 BeanUtils.populate(user, properties); 8} catch (IllegalAccessException | InvocationTargetException e1) { 9 e1.printStackTrace(); 10} 11// 现在这个位置user对象已经封装好了 12 13// 手动封装uid--uuid--随机不重复的字符串32位的--Java代码生成后是36位的 14user.setUid(UUID.randomUUID().toString()); 15 16// 3将参数传递给业务操作方法,将JavaBean中的数据存到数据库 17register(user);

UUID工具类

import java.util.UUID;
随机不重复的字符串32位的--Java代码生成后是36位的

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

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

完成注册成功的跳转回显

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

五、request总结

  • request获得请求行的内容

    1request.getMethod() 2request.getRequestURI(); 3request.getContextPath();//获得应用的名称 4request.getRemoteAddr();
  • request 获得头的内容
    request.getHeader(String name);

  • request 获得请求体的内容(请求参数)

    1String request.getParameter(String name); 2Map<String, String[]> request.getParameterMap(); 3String[] 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);
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java代码012

code012.jspInserttitlehere<%JSP内置对象1.request用于处理HTTP请求中的各项参数。如,删除可以通过request对象的getParameter()方法获取如,request.getParameter("id")在请求转发时,需要把一些数据传递到转发后的页面处理。就需要用到request的se

JSP 九大内置对象及其作用域

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception,下面就简单介绍下。1、request对象request对象是javax.servlet.httpServletRequest类型的对象