Request

来源:互联网 发布:java字符串转数组 编辑:程序博客网 时间:2024/06/10 01:43

Request

  • 完成用户注册的案例

  • 使用request获得表单请求参数

  • 掌握重定向和转发区别

案例一:用户注册的案例

一,需求分析

​ 在注册页面中输入相关的内容,点击注册按钮将输入的数据保存到数据库中.注册成功,跳转到登录页面.

img

二,技术分析

1.Request对象概述

​ 在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法.

img

​ Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

2,获取客户机信息(操作请求行)

​ 请求方式 URI 协议版本

​ GET /web17Request/login.html HTTP/1.1

  • getMethod();获取请求方法

  • getRemoteAddr() ;获取客户机的IP地址

  • getRequestURI();获得请求地址,不带主机名
  • getRequestURL();获得请求地址,带主机名
  • getServerPort();获得服务端的端口
  • getContextPath();获得当前应用工程名; /web17Request
  • getQueryString();获的请求参数(get请求的,URL的?后面的. eg:username=zs&password=12345)
3.获得请求头信息

img

  • User-Agent: 浏览器信息
  • Referer:来自哪个网站(防盗链)
4.接受请求参数(请求体 )
法名 描述 String getParameter(String name) 获得指定参数名对应的值。如果没有则返回null,如果有多个获得第一个。 例如:username=jack String[] getParameterValues(String name) 获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒 Map
5.作为域对象存取值,*掌握
  • Object getAttribute(String name) ;
  • void setAttribute(String name,Object object) ;
  • void removeAttribute(String name) ;

三,步骤分析

1.准备工作
1.1创建数据库和表
create database web17;use web17;create table user(    id int primary key auto_increment,    username varchar(20),    password varchar(20),    name varchar(20),    email varchar(30),    sex varchar(10),    hobby varchar(50),    birthday date);
1.2创建包结构,创建实体类
1.3整理登录页面
1.4引入数据库相关的包和工具类
2.思路分析
  • 创建一个注册页面

  • 创建数据库

  • 点击注册按钮,

    ​ 把信息提交到registerServlet,写入数据库

    ​ 注册成功跳转到登录页面

四,代码实现

五,总结

1.接收和封装数据简化

使用工具类:简化数据的封装.BeanUtils是Apache的工具类.

  • 使用BeanUtils,导入如下jar包:

    ​ commons-beanutils-1.8.3.jar

    ​ commons-logging-1.1.1.jar

  • 可以自动封装基本数据类型(8种),引用类型(date,String[])不能自动转换,

img

注意的地方: 1.引用类型不能封装

​ 2.如果表单里面的name属性值和javabean里面的字段属性不一致,封装不了

2,request请求乱码解决
  • post方式

    request.setCharacterEncoding("utf-8");
  • get方式

new String(name.getBytes("iso8859-1"),"utf-8");

1.为什么出现乱码?

​ 编码和解码字符集不一样

2.处理办法: Servlet:(解决post方式和输出的中文乱码)

request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");
3.转发和重定向区别 **重要

转发

request.getRequestDispatcher(url).forward(request, response);
  • 转发是一次请求,重定向是二次请求
  • 转发地址栏路径不变,重定向地址栏路径改变了
  • 转发写跳转路径的时候,不需要加工程名;重定向需要加工程名
  • request域对象存取的值在转发(一次请求)中是有效的,在重定向(两次请求)无效的
4.作为域对象存取值
  • void removeAttribute(String name)
  • void setAttribute(String name, Object o)
  • getAttribute(String name)

注意:
- 在一次请求范围内有效

原创粉丝点击