1. Requst对象获取请求行/头方法
1.1 Request原理
request和response是服务器创建的两个对象给我们使用,request封装了浏览器发送过来的所有数据,如果是获取浏览器发送过来的信息那么就找request对象,如果想告诉浏览器展示信息那么就找response对象;
1.2 Requst对象获取请求行方法
1. 获取请求方式 :GET
String getMethod()
2. (*)获取虚拟目录:/day14
String getContextPath()
3. 获取Servlet路径: /demo1
String getServletPath()
4. 获取get方式请求参数:name=zhangsan
String getQueryString()
5. (*)获取请求URI:/day14/demo1
String getRequestURI(): /day14/demo1 不全的路径
StringBuffer getRequestURL() :http://localhost/day14/demo1 全路径
URL:统一资源定位符 : http://localhost/day14/demo1 中华人民共和国
URI:统一资源标识符 : /day14/demo1 共和国
6. 获取协议及版本:HTTP/1.1
String getProtocol()
7. 获取客户机的IP地址:
String getRemoteAddr()
重点掌握:获取虚拟目录的getServletPath()方法,getRequestURI()方法作为一个次掌握的方法
1.3 Requst对象获取请求头方法
1. String getHeader(String name) ;根据指定的请求头获取请求头的值;
2. Enumeration<E> getHeaderNames() ;获取所有请求头
2.Request对象获取请求参数方法
2.1 获取请求参数的三个方法
String getParameter(String name) :根据一个name获取一个value值
String[] getParameterValues(String name) :根据一个name获取多个value值
Map<String,String[]> getParameterMap() :获取所有请求参数
2.2 请求参数中文乱码问题
说明:从tomcat8.0之后,get请求参数不再乱码,但是post请求参数依然乱码
原因:request缓冲区默认字符集是iso-8859-1不支持中文
解决办法:在获取请求参数之前设置request缓冲区字符集为utf-8
request.setCharacterEncoding("utf-8");
3.Request对象请求转发和作为域对象
3.1 请求转发实现页面跳转
1.请求转发api:
request.getRequestDispatcher("/转发的路径,不带虚拟路径").forward(request,response);
2.转发的特点:
2.1 请求转发是一次请求一次响应;
2.2 请求转发浏览器地址栏不会发生变化
2.3 请求转发api中路径不需要携带虚拟路径,默认是访问项目内部资源;
3.2 request作为域对象数据共享(存值、取值、移除值)
作用范围:一次请求范围,浏览器发送请求到服务器做成响应结束,请求转发在一次请求范围内;
创建和销毁时间:浏览器发送请求之后服务器创建request对象,服务器做成相应之后销毁;
存值、取值、移除值api:
存值:request.setAttribute(String name,Object value);
取值:Object value=request.getAttribute(String name);
移除值:request.removeAttribute(String name);
4.登录案例以及BeanUtils
4.1 案例分析
4.2 BeanUtils的使用
//3.创建User对象
User loginUser = new User();
//3.2使用BeanUtils封装
try {
BeanUtils.populate(loginUser,req.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
注意:form表单的name属性要和javabean的属性一一对应;
4.3 javabean规范
就是一个标准的java类。
javabean的成员变量和属性的区别:
成员变量:成员变量都是private修饰的;
属性:去掉setter和getter方法的set和get部分,将首字母变小写之后就是属性
setUsername()----->Username----->username;
注意:往往javabean的属性和成员变量是一样,因为getter和setter方法都是idea工具根据成员变量自动生成的。
5. 重点内容总结
1、http协议-请求部分(4部分)
请求行:
请求方式 url路径 协议/版本
POST /day14/servletDemo2 HTTP/1.1
请求头:都是一个key对应一个或者多个value值,多个value值用逗号隔开
user-agent:获取当前浏览器的类型和版本信息,下一次课文件下载会用到。
referer:当前请求的来源,用于防盗链和统计工作。
请求空行:就是一个换行
请求体:只有post请求才有请求体,get请求没有请求体。
存放post请求的请求参数: username=zhouxiangyang&password=123456
继承体系:tomcat中的RequestFacade--->实现了HttpServletRequest接口--->继承ServletRequest
2、request对象获取请求行的方法:
获取虚拟目录/路径:String contextPath=request.getContextPath();
获取URI:String uri=request.getRequestURI()
3、获取请求参数的通用方法
String getParameter(String name):根据一个name获取一个value值。
String[] getParameterValues(String name):根据一个name获取多个value值。
Map<String,String[]> getParameterMap():获取所有的请求参数
4、请求中文乱码问题的原因和解决办法
get请求:在tomcat8之后中文就不再乱码。
post请求:中文会乱码
原因:request缓冲区字符集默认是iso-8859-1不支持中文
解决办法:在第一次获取请求参数之前设置缓冲区字符集
request.setCharacterEncoding("utf-8");
5、请求转发实现页面跳转:
api:request.getRequestDispatcher("不带虚拟目录的路径").forward(request,response);
特点:
1、本质:请求转发是一次请求一次响应。
2、请求转发地址栏不会发生变化
3、请求转发的路径不带虚拟目录
4、请求转发只能跳转到项目内部资源
6、request作为域对象共享数据
域对象:有一定作用范围的对象。
作用范围:一次请求,从浏览器发送亲请求到接收响应结束。请求转发在一次请求范围内。
存值、取值、移除值的API:
存值:void setAttribute(String name,Object value);
取值:Object getAttribute(String name);
移除值:void removeAttribute(String name);
7、登录案例
1、案例的环境搭建
准备数据库
创建项目,创建包结构、拷贝资源代码、相关jar包、相关工具类和配置文件
相关jar包:数据库驱动jar、druid连接池、jdbcTemplate工具类,lib目录必须在WEB-INF 中,名字也必须叫lib。
2、登录逻辑分析
3、Servlet代码实现
4、dao操作数据库代码实现