servlet学习笔记二

request和response

HttpServletResponse:

给客户端会送数据时会用到的类

常用API:setSatus 设置相应状态码

setHeader 设置响应头信息

getWriter 获得响应体字符输出流

getOutputStream 获得响应体字节输出流


1.请求重定向

response.sendRedict(request.getContextPath+"/login.jsp");//此处路径是动态获得,也可以写死

请求重定向的特点: 1)浏览器地址栏发生了变化,指向了另一地址

 2)发生了两次http请求(可以通过抓包工具看到)

2.自动刷新

response.setHeader("refresh","5;url=mail/news.html");//5秒后跳转到该页面

在js中实现代码如下:

<meta http-equiv="refresh" content="5;url=/day6/hello.html" />

<script type="text/javascript">

var i = 5;

function timeChange(){

document.getElementById("span").innerHTML=i;

i--;

window.setTimeout("timeChange()", "1000");

}

</script>


<body οnlοad="timeChange();">

您将在<span id = "span"></span>秒后跳转到网站首页

</body>


3.设置三个http头信息禁用浏览器缓存

为什么要禁用浏览器缓存?

对于一些动态数据,我们希望每当用户在地址栏中敲了回车之后能够看到最新的数据,

但是很多时候,浏览器会自动帮你去缓存该数据,因此禁用缓存就ok了

response.setHeader("Cache-Control","no-cache");

response.setHeader("Pragma","no-cache");

response.setHeader("Expires",-1);//此处需要的是一个时间值


有这三个禁用缓存,主要是因为目前市场上的浏览器太多,而每种浏览器所支持的禁用缓存

可能不一致,所以最好把这三个头信息都设置一下


4.生成http响应体内容

response.getWriter()和response.getOutputStream()

如果有乱码要在这个两个方法之前设置setContentType()或setCharacterEncoding()


HttpServletRequest:

常用API:getMethod() 获得请求方式

getProtocol() 获得协议

getRequestURI()和getRequestURL() 获得请求资源路径

getRemoteAddr() 获得客户机IP地址

getContextPath() 获得工程虚拟目录

URI和URL的区别:URI比URL大

URI:sina/news URL:http://www.sina.com/news

http://www.sina.com/news 是URL也是URI,但sina/news是URI不是URL

获取当前请求资源路径:request.getRequestURI.subString(request.getContextPath().length());


获取请求头信息:request.getHeader(name);


获得复杂表单中的数据(get和post方式),并解决乱码的方式

1.post:当表单的提交方式是post的时候,只需一行代码就搞定:request.setCharacterEncoding("UTF-8");

2.get:由于是get请求方式,所以会把数据带到URL地址栏中,如果有中文就会对其进行编码(按照当前页面的

 的编码格式去编译)所以在地址栏中看到的就会是%EA%CD(URL编码)形式,在服务端接收到之后(假设现在

 还没有对request设置编码),要把接收到的value通过默认的编码格式(ISO8859-1)去解码,由于编码集不

 一样,所以在服务端解码之后会出现???乱码形式,这时候就需要通过ISO8859-1解码之后的字节反着去查

 这个字节再UTF-8中字节,然后再把这些字节通过设置成UTF-8之后输出到页面

 String name = request.getParameter("name");

 name=new String(name.getBytes[]("ISO8859-1","UTF-8"));

 System.out.println(name);

 这样就可以解决乱码问题


解决请求参数中有多个值时丢失数据的问题:

当jsp页面中有"checkbox"的选项时,会出现多个值,如果使用getParameter()方法来获得其中的参数会出现丢失

数据的可能,这时要使用getParameterValue("name")方法来获得一个String[]数组,然后对这个数组进行遍历

来获得其中的每一个参数


请求转发和请求重定向的区别:

1)请求转发一次请求,一次响应;请求重定向两次请求,两次重定向

2)请求转发URL地址不变,请求重定向URL地址变为要跳到的资源地址

3)请求转发只能转发给同一个网站的内部资源,请求重定向可以定向到任何一个网站

4)请求转发属于服务器内部路径,不写工程名;请求重定向来自客户端必须要写工程名

注意:request.setAttribute("name","value")必须要和request.getRequestDispatcher().forward 转发一起使用



转载于:https://my.oschina.net/u/995565/blog/299084

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值