首页 > 其他 > 详细

Servlet学习request对象总结

时间:2019-06-11 23:01:22      阅读:100      评论:0      收藏:0      [点我收藏+]

一、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获得请求行的内容
    java request.getMethod() request.getRequestURI(); request.getContextPath();//获得应用的名称 request.getRemoteAddr();
  • request 获得头的内容
    request.getHeader(String name);
  • request 获得请求体的内容(请求参数)
    java 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对象总结

原文:https://www.cnblogs.com/zxfei/p/11006754.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!