1.HTTP SERVLETRESPONSE简介
set heade
set int head
set data head
add haed
add int head
add int head
字节流可以写任何数据;
字符流只可写字符数据;
利用output stream来输出数据以及输出中文。
此时要注意这时的编码表。
html语言<mata>标签可以模拟一个HTTP 的响应头来控制浏览器的行为
<mata>标签
当你的程序写错时浏览器会提示下载
浏览器就是一个文本显示工具
字符与数字在浏览器中的显示不一样
二:
RESPONSE 的常见应用
PRINT WRITE 字符输出流不必要强转字符
通过response的write流来输出数据注意乱码问题
解决相关的乱码问题
老外喜欢用ISO8859码表
解决乱码问题的关键找出显示的码表改为自己想要的码表同时要控制浏览器的
打开码表来确保文件数据的正确输出
控制response选择码表的代码:response.setCharacterEncoding("UTF-8");
控制浏览器打开时选择码表的代码:
response.setHeader("context-type","text/html;chaeset=UTF-8");
便捷的方法:response.setContextType("text/html;charset=UTF-8");
三:
response的下载应用
文件的下载:
建立一个down-load目录来保证下载的资源
步骤:1.得到文件,用流来读取数据在web文件中的资源在servlet中用
context来读资源。
得到资源的绝对地址然后来读取资源将读到的资源写到浏览器中
写到浏览器中的代码如下:out=response.getoutputstream();
开发中的文件名一般为中文文件
如果下载的文件为中文文件文件名需要URL 编码:
例如:response.setHeader("context-disposition","attachment;filename"+URLEncoder.encode(filename,"UTF-8"));
四:
常见应用:显示随机应用图片:
步骤:先构建一张图片找一个bufferedImage
ImageIO类图形的输入与输出
与浏览器相关联的流response.utput stream()来进行图片的传输
字体旋转的方法:graphics2D:rotate方法旋转
五:
常见应用定时刷新
控制浏览器定时刷新refresh来控制
refresh刷新头
浏览器跳转时非常实用
利用浏览器之间的解析技术来解析浏览器的跳转信息
令浏览器自动跳转
六:
常见应用缓存技术控制浏览器缓存
用Expires头来控制代码如下:
代码:response.setDateHeader("expries",system.currerTimeMillis()+1000*3600);
代码缓存一小时。
七:请求重定向
常见的response应用:实现请求重新定向及将请求转到另一个服务资源
地址会发生变化。建议不要用请求重定向
会加重服务器的负担
必须用的情况:1.登陆的时候必须要用请求重定向
2.购物的时候若用转发会不断重复执行上一次的请求
及会不断的购买所购的物品而请求重定向的方法则只会
请求一次。
特点:1.浏览器会向服务器发送两次请求意味着有2个request和response
2.用重定向技术,浏览器地址会发生变化。
response的细节
1.getoutputstream与getwrite互斥两个不能被同时调用注意不能再两个转发的程序中写(最容易)
异常表现代码:getoutputstream()has already been called for this response
以后的调用基本都可以用字节流搞定没必要非去搞字符流
当用重定向时则不会出现这个问题因为发出了两次请求,有两个response
2.servlet的代码数据会写到response中服务器再从response中读取数据并向浏览器发送,后浏览器解析
request对象的讲解客户端的请求客户的请求放在request中
HTTPservletrequestAPI的讲解
获得请求方式getmethed
获得请求资源getrequestURL
http://www.sina.com/news/1.html为URL
其中/new/1.html为URI
URI可以表示任何资源是URL可以表示互联网上的资源
所以URI是URL的父亲用的更多的是URI
getHeadName可以得到所有头的名称在调用头可以得到头的值
getHeads可以得到所有的相同头的值
常用方法:getRequestURL:返回客户端发出请求时的完整URL
getRequestURI:返回客户端发出请求时的完整URI
其他常用方法见QQ好友帅的图片。
用request来获取头和请求数据:
1.String headVaule=reuqest.getHeader("Acceot-Encoding");
system.out.println(HeadVaule);
2.request.getHeads("名称");
3.e=request.getHeadNames();
获取客户及所带来的数据
两种带数据方式------一种以超链接来带
<a href="web资源">点带你</a>
第二种 以表单来带数据给服务器
3. 通过名称来获取值
request.getParamterNames();
4.MAP map=request.getparameterMap();
BeanUtils.populate(文件,map)//username string[]//用map集合的数据来填充Bean
BeanUtile.copyPropertites(user,forbean) bean的拷贝
5.request。getIntputStream();
流的使用与获取方式。
最常用的数据获取方式:
string value=request.getParameter("username");
if(value!=null&&!value.trim().equals("")){
system.out.println(value) ;
}
收集用户的数据:
通过表单来收集用户的数据:
收集是必须要将name定义给服务器
1. 收集姓名的表单类型用text的表单
2.收集密码的表单类型用password的表单
3.收集性别的表单类型用radio的表单
4.收集用户的所在地
5.收集爱好的表单用checkbox
6.收集用户简介的表单用rows,cols 的表单
7.收集照片是的表单类型用file输入项必须要加name
8.隐藏输入项用hidden类型
获取时用request.getparameter("");来获取相应的客户数据第十二个视频可以做一下练习
!!!!!!!!!!!!!!!!!!!! 数据一定要先检查后使用!!!!!!!!!
url后跟的编码数据若是中文要编码后在提交
中文乱码问题:
解决乱码问题的方式:
在request出控制码表:
request。setcharacterEncoding("UTF-8");只对post提交有效
若是get提交我们只能手工解决:得到数据的后将username的数据转为
UTF-8的码表,代码如下:
String name=request.getparameter("username");
username=new String (username.getBytes("iso8859-1"),"UTF-8");
system.out.println(username);
第二种解决文件乱码问题的方法,直接改配置文件只讲解不使用,因此
在此不做过多解释,要详细的解释请看day06的第13个视频。
request的转发以及使用request域对象把数据带给转发资源(重要)
request的请求转发request同时也是一个域对象
request的域及request的作用范围
request的专门转发方法通过request域对象带过去MVC
$(data)//jsp中的一个专门的输出方法从四个域中找data然后输出
Mvc技术的解释及原理
servlet收到请求产生数据,使用Javabean封装通过转发技术输出转给jsp
数据带过去存在request域上,从request域里取数据最后由输出。
print write输出流
在跳转之前不可以关闭流若关闭则会抛出异常
2.for word会清空response中的数据
for word特点:1.客户端只发出一次请求服务器端有多个资源调用
2.客户端浏览地址栏没有改变
request中的转发方法的include方法
用include实现页面包含在servlet中的技术
被包含页面不要出现全局架构标签
web的工程中各类地址的写法
地址最好以/开头给浏览器就代表网站
给服务器就代表web应用
request常见应用防盗链
request。getHeader("referer");
if(referer==null&&referer.startswith("http//localhost")){
response.sendredirect("/day06index.jsp")
return;
}
String data="";
response.getwriter().write(data);