Servlet学习request对象总结
一、servletContext对象和request对象的比较
ServletContext
- 何时创建:服务器启动
- 何时销毁:服务器关闭
- 域的作用范围:整个web应用
request
- 何时创建:访问时创建request对象
- 何时销毁:响应结束,request对象销毁
- 域的作用范围:一次请求中
二、转发与重定向的区别
- 重定向是两次请求,转发是一次请求(在内部转发的)
- 重定向地址栏地址会变化,转发地址栏地址不变
- 重定向可以访问外部网站资源,转发只能访问内部资源
- 转发的性能要优于重定向
三、客户端地址与服务器端地址的写法
- 客户端地址
- 是客户端去访问服务器端的地址,服务器外部的地址。
- 特点:写上web应用名称
- 服务器端地址
- 服务器内部资源的跳转地址
- 特点:不需要写web应用名称
四、注册功能的实现
- 获取表单数据
- 将数据存储到数据库(中文乱码的解决)
- 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对象总结的更多相关文章
- 10 Servlet+Http+Request对象
1.Servlet的体系结构 Servlet -- 接口----->GenericServlet -- 抽象类------->HttpServlet -- 抽象类 (1)GenericSe ...
- Servlet之Request对象
下面的方法可用在 Servlet 程序中读取 HTTP 头.这些方法通过HttpServletRequest 对象可用. 1 Cookie[] getCookies() 返回一个数组,包含客户端 ...
- Servlet中request对象得到路径问题
1.项目源码:假设现在有一个名为JavaWeb的项目,其中有一个名为TestServlet的serlvet,其doGet方法为: protected void doGet(HttpServletReq ...
- Request对象介绍(客户端到服务器)
1.处理请求和响应的过程request,response,关于request可以从三个方面着手学习.1:如何获取请求头 行 体 2:请求中文处理 3:请求对象的其它常用方法 1.1:r ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 重温Servlet学习笔记--request对象
request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...
- request对象学习
import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; imp ...
- Servlet学习(九)——request
request运行流程在Servlet学习(四)——response已介绍,不再赘述 1.通过抓包工具获取Http请求 因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行, ...
- JSP内置对象之request对象【学习笔记】
request对象是JSP中重要的对象,每个request对象封装着一次用户的请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径. 一.获取请求头与 ...
随机推荐
- mybatis 绑定 statement 失败
错误信息:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 问题原因:编译时没有将mapp ...
- leetcode 230. 二叉搜索树中第K小的元素(C++)
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 示例 1: 输入: root = [ ...
- day23—JavaScript实现DIV盒子拖拽(原生方式)
转行学开发,代码100天——2018-04-08 <!doctype html> <html> <head> <meta charset="utf- ...
- 【经验分享】 解决CentOS7 安装VMTools提示找不到Kernel头文件的方案
配置一个Linux的开发环境,用VM10+CentOS7(Kernel版本3.10.0-327.10.1.el7),之后发现VMTools功能不全,查证后发现需要卸载重装,于是开始折腾. 按照各种说明 ...
- Vagrant 官网文档翻译汇总
入门 Vagrant 入门 - 项目设置 Vagrant 入门 - box Vagrant 入门 - 启动 vagrant 及 通过 ssh 登录虚拟机 Vagrant 入门 - 同步目录(synce ...
- 更新系统时间 & 查看/修改LINUX时区和时间
一.时区0. date '+%Y%M%D' 按照格式显示当前日期,结果如下: date "+%Y-%m-%d %H:%M:%S" 1. 查看当前时区 :[root@master ~ ...
- Go-Mutex互斥量
先来看一段go1.12.5中Mutex的源码: // Copyright 2009 The Go Authors. All rights reserved. // Use of this source ...
- Pikachu漏洞练习平台实验——越权漏洞(八)
1.概述 由于没有对用户权限进行严格的判断 导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作 水行越权:A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如 ...
- Spring Cloud Stream 进行服务之间的通讯
Spring Cloud Stream Srping cloud Bus的底层实现就是Spring Cloud Stream,Spring Cloud Stream的目的是用于构建基于消息驱动(或事件 ...
- #3831 TJOI2013单词
WOJ#3831 TJOI2013单词 题面 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数 N ,表示有 ...