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

平常我们需要这样写:

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);
posted on 2019-06-11 22:40  行之间  阅读(722)  评论(0编辑  收藏  举报