java web request_javaweb入门笔记(4)-request和response

javaweb入门笔记(4)-request和response

标签: javaweb

[TOC]

API:

response

输出数据

程序以什么码表输出,就一定要控制浏览器以什么码表打开。可有如下两种写法:

response.setHeader("Content-type","text/html;charset=UTF-8")

response.setContentType("text/html;charset=UTF-8")(默认调用setHeader和setCharacterEncoding)

把分号;错写成逗号,,浏览器会提示下载

用html技术的标签可以模拟一个http响应头,

response可用setCharacterEncoding方法设置码表。字符流输出:PrintWritet->response->浏览器,response->浏览器默认使用iso-8859编码

文件下载

使用ServerContext的getRealPath方法,再InputStream和OutputStream

如果下载文件是中文名为中文,则文件名需要经过url编码URLEncoder.encode

随机图片

汉字的区间:\u4e00-\u9fa5

刷新和缓存

刷新:一般不在servlet里加refresh头,而是在jsp加入头模拟。

缓存:加入expires头,当前时间+要缓存的时长

请求重定向

重定向:设置状态码和location头即可,或者直接使用response的sendRedirect方法。向服务器两次请求。浏览器会改变地址栏,一般适用于登录、购物等场景。

转发:则是调用ServletContex对象的getRequestDispatcher方法,再调用forward方法。向服务器一次请求,浏览器地址栏不变。

一些细节:

getOutputStream和getWriter方法跟别用于输出二进制数据、输出文本数据的ServletOutputStream、Printwriter对象,这两个方法相互排斥,只能调用其中一个,否则抛IllegalStateException异常。

response的输出流会自己关闭。Servlet的service方法结束后,Servlet引擎会检查并调用close方法关闭该输出流对象。

request

URI:标识某个资源

URL:标识互联网上某个资源

一些方法

getRequestURI用于权限拦截,访问统计

getRemoteAddr用于得到客户机IP地址

getMethod得到客户机请求方式

requst对象获取数据的四种方式

getParameter

getParameterNames

getParameterValues

getParameterMap(可结合JavaBean使用)

(getInputStream用于文件上传)

中文乱码

url后面如果有中文数据,需要编码后再提交

表单提交的数据使用的码表和该页面的码表一致,而getParameter方法默认使用ISO-8859码表。

解决:

对于post提交的数据,在获取数据前要使用request对象的setCharacterEncoding设置码表。

对于get提交的数据,只能手工解决。先对数据调用getBytes("ISO-8859-1")获取二进制字节,再用特定码表构建字符串。

超链提交的中文,解决办法同get提交的数据。

也可以通过改服务器配置来解决乱码问题,但一般不建议使用。

URIEncoding:改tomcat的配置文件conf/server.xml的连接器中的URIEncoding属性

useBodyEncodingForURI:将conf/server.xml的连接器中的useBodyEncodingForURI置为true

请求转发

应用场景:MVC设计模式

model : javabean;

view : jsp;

controller : servlet

使用request域对象把数据带给转发资源。调用request对象的getRequestDispatcher方法,再调用forward方法。一次请求,浏览器地址栏不变。

forward一些细节

不能在关闭输出流后再调用转发,也不能调用两次,否则会抛出异常。

跳转之前会清空response中的数据。即数据只是写入到缓冲区而没真正输出到客户端,则可调用forward方法,原来写入到缓冲区的内容被清空,但响应头字段信息保持。

include方法可以用于包含一些公共页面(一般不在servlet中包含)

地址的写法

以斜杠/开头。如果是给服务器用,则/代表当前web应用;如果给浏览器用,则/代表网站。

例子:目录结构如下

mail---------------------------Web应用所在目录

|----form1.html

|----WEB-INF目录

|---------classes目录

|---------lib目录

|---------web.xml

request.getRequestDispatcher("/form1.html")

response.sendRedirect("mail/form1.html")

this.getServletContext().getRealPath("/form1.html")

this.getServletContext().getResourceAsStream("/form1.html")

其中,1,3,4是给服务器用;2,5,6是浏览器用

防盗链

读取referer请求头,不合要求则重定向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值