HttpServletRequest:一次来自客户端的请求的相关信息
请求行
request.getMethod() 获取http请求方式
request.getRequestURI() 获取统一资源标识符
request.getRequestURL() 获取统一资源定位符
request.getQueryString() 获取查询字符串
request.getProcotol() 获取协议版本
request.getScheme() 获取协议名
请求头
request.getHeader() 获取请求头信息
request.getHeaderNames() 获取所有请求头的名字
实体内容
request.getParameter() 获取请求实体中的参数、或URL后的请求参数
request.getInputStream() 获取请求参数,当表单提交的enctype="multipart/form-data"
网络相关信息
request.getRemoteAddr() 获取客户端的IP地址
request.getRemotePort() 获取客户端的端口号
request.getLocalAddr() 获取服务器端的IP地址
request.getLocalPort() 获取服务器端的端口号
 
 
HttpServletResponse:一次发送给客户端的响应的相关信息
状态行
应答头
response.setHeader() 设置应答头
response.setContentType("text/html; charset=utf-8") 设置响应内容及字符集
响应实体
response.getWriter() 获取打印流,输出字符数据
response.getOutputStream() 获取字节输出流,输出二进制数据
 
 
 
一、客户端请求服务器的数据有乱码
1.get方式请求
①修改tomcat/conf/server.xml,在<Connector> 标签中添加属性useBodyEncodingForURI="true"
②在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
2.post方式请求
在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
 
二、服务器返回给客户端的数据有乱码
response.setContentType("text/html; charset=utf-8");
 
 
 
 
 
请求转发
request.getRequestDispathcer("path").forward(reqeust,response);
 
请求转发的特点:
1.地址栏没有发生变化
2.用户只发起了一次请求
3.请求转发只能转发本服务器以内的资源
4.由于请求是同一个对象,所以可以利用该request做servlet之间数据的传输
 
 
重定向
response.sendRedirect("path")
 
重定向的特点:
1.地址栏会发生改变
2.用户发起了两次请求
3.重定向可以访问服务器以外的资源
4.重定向由于请求多次的,所以HttpServletRequest不是同一个对象,故不能使用它传递数据
 
 
一、分析
1.找出一个url中的项目名称
项目名称前面的“/”是服务器地址,例:http://127.0.0.1:8080/
项目名称后面的“/”是项目地址,例:http://127.0.0.1:8080/proejctname/
二、判断
1.判断一次请求行为是谁发出的
如果是浏览器行为,则表示项目名称前面的“/”,即服务器地址
如果是服务器内部行为,则表示项目名称后面的“/”,即项目地址
 
1.服务器内部行为:请求转发
2.浏览器行为:重定向、页面中form提交、页面中a标签、js中通过location.href定位一个路径
 
 
Cookie:在浏览器中保存用户的信息
 
使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器
1.创建cookie
Cookie cookie = new Cookie("name","value");
2.发送cookie到浏览器
response.addCookie(cookie对象);
3.获取来自客户端的cookie
Cookie[] cookies = request.getCookies();
 
使用注意:
1.cookie第一次是由servlet发送到浏览器中,第一次不能获取cookie
2.不同的浏览器存放的cookie不是同一个
3.如果设置了cookie的maxage,则cookie会保存在浏览器所在电脑的硬盘上,如果没设置该属性,则保存在浏览器的内存中
 
 
Session:在服务器中保存用户信息
使用:在服务器端创建Session,来保存当前访问服务器的用户的信息
1.获取session(如果已经创建了session,则返回当前session)或创建session:
HttpSession session = request.getSession();
2.设置session最大不活跃时间
session.setMaxInactiveInteval() //以秒为单位
3.使用session保存信息
session.setAttribute(String key,Object value);
session.getAttribute(String key);
4.立即销毁session
session.invalidate();
 
 
HttpServletRequest:封装了一次来自客户端的Http的请求信息
请求消息包含几个部分?
1请求行

private void getRequestLine(HttpServletRequest request,
HttpServletResponse response) {
//请求方式
String method = request.getMethod();
System.out.println(method);
//资源路径
String uri =request.getRequestURI();
String url=request.getRequestURL().toString();
System.out.println(uri);
System.out.println(url);
//请求参数字符串
String queryString =request.getQueryString();
System.out.println(queryString);
//协议及版本号
String protocol = request.getProtocol();
System.out.println(protocol);
String scheme = request.getScheme();
System.out.println(scheme); }
2请求头

private void getRequestHead(HttpServletRequest request,
HttpServletResponse response) {
// 根据header的key获取其value
String user_agent = request.getHeader("User-Agent");
System.out.println(user_agent);
// 查询header所有的keyname
Enumeration<String> enu = request.getHeaderNames();
while (enu.hasMoreElements()) {
System.out.println(enu.nextElement());
}
}
3 实体内容

private void getRequestBody(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// 获取请求实体中的数据 // 请求实体中的数据有三种形式:
// 1.application/x-www-form-urlencoded
// 2.multipart/form-data
// 3.text/plain // 对于1、3
// getParameter() //无论post方式还是get方式都可以获取用户的请求数据
String value = request.getParameter("username");
System.out.println(value);
String coment = request.getParameter("coment");
System.out.println(coment); ServletInputStream in= request.getInputStream();
FileOutputStream out = new FileOutputStream(
"d:\\1.txt");
int len = 0;
byte[] flush = new byte[1024];
while ((len = in.read(flush)) != -1) {
out.write(flush, 0, len);
}
out.close();
in.close();
}
4网络信息
    private void getIntenetInfo(HttpServletRequest request,
HttpServletResponse response) {
System.out.println("访问服务器的地址为:" + request.getRemoteAddr() + ":"
+ request.getRemotePort());
System.out.println("服务器的本地地址为:" + request.getLocalAddr() + ":"
+ request.getLocalPort());
} }
响应消息分为几步?
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 状态行
// 协议版本 http状态码 htt状态描述
// 应答头
// 响应实体 // 设置应答头
response.setHeader("content-type", "image/jpeg; charset=utf-8"); // 向用户输出字符数据
/*
* PrintWriter out = response.getWriter(); out.write("<h1>你好世界!</h1>");
* out.flush(); out.close();
*/ // 我们只能打开一个流为用户输出数据
FileInputStream in = new FileInputStream("D:\\1.jpg");
ServletOutputStream out = response.getOutputStream(); int len = 0;
byte[] flush = new byte[1024 * 1024];
while ((len = in.read(flush)) != -1) {
out.write(flush, 0, len);
} out.flush();
out.close();
in.close(); }
 
 
 
 
 
 
 
 
 
 
 
 
 

03 HttpServletRequest_HttpServletResponse的更多相关文章

  1. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  2. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  3. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  4. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  5. UML大战需求分析——阅读笔记03

    读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图 ...

  6. 2016-1-28 图解HTTP(03)

    6.2.5 非HTTP/1.1首部字段        不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...

  7. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  8. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)

    视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  9. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

随机推荐

  1. 报错:Table 'sell.hibernate_sequence' doesn't exist

    错误信息:Table 'sell.hibernate_sequence' doesn't exist 错误原因:实体主键没有配置主键自增长 完整配置如下 /**主键id*/ @Id @Generate ...

  2. JavaScript数字精度丢失的一些问题

    本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 1 0.1 + 0.2 ! ...

  3. arcgis python ListEnvironments 函数可返回地理处理环境名称列表。

    import arcpy environments = arcpy.ListEnvironments() # Sort the environment names environments.sort( ...

  4. Linux 端口被进程多次占用,LINUX最好用查看端口占用并杀死(kill)的方式

    一.端口被占用 二.查看进程 三.并杀死占用端口的进程,并重启服务,状体正常 补充: 根据指定端口查看 wd@wd:~/workspace/cat$ sudo netstat -tlnp|grep 6 ...

  5. JS 将页面上的表格导出为 Excel 文件

    如果在页面上展示了一个表格,想把这个表格导出为Excel文件,那么在要求不高的情况下,可以直接利用 JavaScript 的 Blob 和 Object URL 特性将表格导出.不过,这就是利用了 E ...

  6. Matrix: 利用Matrix来设置ImageView的宽高,使图片能正常显示

    在Android中加载ImageView一般都不会给ImageView的宽高设置一个确切的值,一般都是直接写成: <ImageView android:id="@+id/iv_test ...

  7. python argparse例子实践

    python 解析命令行读取参数,在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数. 万能的python自带了sys.arg.argparse.optparse模块等, ...

  8. 【原创】主机不能访问虚拟机CentOS7中的站点

    主机不能访问虚拟机CentOS7中的站点 ================================ 虚拟机上装好了centos7,并配好了nginx+php+mysql,但是本机就是无法访问. ...

  9. CSS如何实现把鼠标放在行上整行变色

    CSS如何实现把鼠标放在行上整行变色: 在很多网站都有这样的效果,那就是当鼠标放在一个文章列表行的时候,此行就会显示与其他行不同的颜色,本站的文章列表也具有这样的效果,便于浏览者识别,非常人性化,下面 ...

  10. 算法习题---3.12浮点数(UVa11809)

    一:题目 尴尬的非会员水印 二:题目摘要 1.int和float比较 int共32位,可以表示的最大的数为2^32次方 float虽然也是32位,但是是以指数形式保存,指数占8位(含符号),最大127 ...