JavaWeb - response对象,快速上手

== addHeader(“bb”,“55”);

addHeader(“bb”,“66”);

结果:名称 bb ,值 55,66

= 针对特殊的类型,设置头的方法

= addIntHeader(java.lang.String name, int value) :针对int类型值的方法

= addDateHeader(java.lang.String name, long date) :值long类型,是毫秒数

第三部分:响应体

(1)向页面显示的内容

(2)方法

= getWriter():使用字符流向页面输出内容

= getOutputStream():使用字节流向页面输出内容




### []( )2、重定向的案例



2.1 使用重定向实现登录的操作

(1)需求的描述:

在登录页面中,输入用户名和密码,判断输入的用户名和密码是否正确;

如果用户名和密码都正确,登录成功,向页面输出内容;

如果用户名或者密码有一个是错误的,重定向到登录页面。

(2)实现的步骤:

第一步:创建登录页面,写表单,在表单里面写两个输入项,一个输入用户名,一个输入密码,提交到一个servlet里面

第二步:创建servlet,在这个servlet里面首先获取到输入的用户名和密码,根据用户名和密码进行判断(用户名如果是admin,密码如果是123456表示正确的)

如果用户名和密码都正确,登录成功,向页面输出内容;

response.getWriter().write("login success");

否则重定向到登录页面

//设置状态码

response.setStatus(302);

//使用头Location完成重定向

response.setHeader("Location", "/aaa/login.html");

(3)代码实现

//得到输入的用户名和密码

String username = request.getParameter(“username”);

String password = request.getParameter(“password”);

//根据用户名和密码判断,(用户名admin、密码123456)

if(“admin”.equals(username) && “123456”.equals(password)) {

//向页面输出内容

response.getWriter().write("login success");

} else { //重定向到登录页面

//设置状态码

response.setStatus(302);

//使用头Location完成重定向

response.setHeader("Location", "/aaa/login.html");

}

(4)重定向的代码简写的方式

response.sendRedirect(“要重定向到的页面的路径”);




### []( )3、定时跳转的案例



3.1 当注册一个网站,注册完成之后,5秒之后跳转到登录页面

3.2 实现方式

(1)使用头信息Refresh实现

(2)写法: response.setHeader(“Refresh”,“在几秒值后跳转;url=要跳转到页面的路径”);

3.3 创建servlet,在servlet实现,在五秒之后跳转到一个页面

response.setHeader("Refresh", "5;url=/aaa/login.html");

3.4 倒计时的效果

(1)直接在html页面中实现操作

在html中使用meta标签实现页面的定时跳转

(2)倒计时

//每一秒向span标签里面写内容

//bom里面widow对象里面 setInterval方法

var m = 5;

function loadTime() {

//得到span标签

var span1 = document.getElementById("spanid");

//向span里面写内容

span1.innerHTML = m;

m--;

}

setInterval(“loadTime();”,1000);




### []( )4、设置响应体(向页面输出内容)



4.1 使用字节流向页面输出内容

(1)getOutputStream()

(2)代码

response.getOutputStream().write("输出的内容".getBytes());

(3)如果向页面输出中文,根据不同的浏览器的编码设置会产生乱码问题

* 解决方法:

/*

 * 1、设置浏览器的编码

 * 2、设置字节数组的编码

 * 让浏览器的编码和字节数组的编码一致

 * */

//设置浏览器的编码 使用头信息 Content-Type

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

//设置字节数组的编码

response.getOutputStream().write("字节流中文".getBytes("utf-8"));

4.2 使用字符流向页面输出内容

(1)getWriter()

(2)代码

response.getWriter().write("response");

(3)如果使用字符流向页面输出中文,一定会有乱码

/*

 * 使用字符流向页面输出内容;首先会把内容放到response缓冲区里面,

 * response缓冲区默认的编码是 iso8859-1,这个编码不支持中文,一定会有乱码

 * 

 * 解决方法:

 * 1、设置response缓冲区的编码

 * 2、设置浏览器的编码

 * response缓冲区的编码和浏览器的编码一致

 * */

//设置response缓冲区的编码

response.setCharacterEncoding("utf-8");

//设置浏览器的编码

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

response.getWriter().write("字符流中文");	



### []( )5、使用response的流的注意事项



5.1 使用字符流向页面输出中文乱码问题解决,简写方式

response.setContentType("text/html;charset=utf-8");

5.2 字节流和字符流是互斥的

5.3 使用字符流不能直接向页面输出数字

//根据数字到码表中查询数字对应的字符,把字符输出

response.setCharacterEncoding("utf-8");

response.getWriter().write(111);



### []( )6、验证码的案例



6.1 什么验证码:防止恶意注册

6.2 实现验证码的步骤(画图分析)

第一步:生成图片

第二步:生成随机的数字和字母

第三步:把数字和字母画到图片上

第四步:把图片显示到页面上

6.3 代码实现验证码

6.4 显示验证码

(1)把验证码显示到登录的页面中

<img src="验证码的servlet的路径"/>

(2)实现看不清换一张

//实现看不清换一张

function loadCode() {

	//得到img标签

	var img1 = document.getElementById("img1");

	img1.src = "/aaa/code?"+new Date().getTime();

}



### []( )7、文件下载的案例



7.1 文件下载的基本实现的步骤

(0)设置头信息 Content-Disposition,无论是什么格式的文件都以下载方式打开

(1)在服务器上面有一个可以下载的文件

(2)从服务器上拿到这个文件(使用文件输入流得到文件)

(3)使用输出流把文件写到浏览器

7.2 代码实现文件的下载

//得到要下载文件的路径

String path = getServletContext().getRealPath("/down/a.zip");

//得到文件的名称

//得到最后一个\位置,根据位置进行截取

int lens = path.lastIndexOf("\\");

String filename = path.substring(lens+1);

//设置头信息

response.setHeader("Content-Disposition", "attachment;filename="+filename);

//得到文件的输入流

InputStream in = new FileInputStream(path);

//使用输出流操作

OutputStream out = response.getOutputStream();

//流对接

int len = 0;

byte[] b = new byte[1024];

while((len=in.read(b))!=-1) {

	out.write(b, 0, len);

}

//关闭流

in.close();



### []( )8、request对象



8.1 代表请求的对象,HttpServletRequest接口,父接口是ServletRequest

8.2 获取请求行的信息

(1)getMethod() :得到http请求方式

(2)getRequestURI() :得到请求地址(不包含ip+端口号)

(3)getProtocol() :得到http的版本

8.3 获取请求头的信息

(1)getHeader(java.lang.String name) :根据名称得到请求头的值

= 头信息 User-Agent:获取当前请求的浏览器的类型

= String agent = request.getHeader(“User-Agent”);

8.4 获取客户机的信息

(1)getContextPath() :请求项目的名称

(2)getRequestURL() :客户端发送的请求的路径

(3)getRemoteAddr() :获取当前客户端的ip地址

8.5 获取表单提交的数据

(1)String getParameter(java.lang.String name) :参数是表单输入项name属性的值,根据名称得到输入的值

= 代码

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

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

(2)String[] getParameterValues(java.lang.String name) :参数是表单输入项name的值,针对复选框的情况

= 代码

String[] loves = request.getParameterValues("love");

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

CodeChina开源项目:《Android学习PDF+架构视频+面试文档+源码笔记》

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-ri3Q7p3N-1630931600397)]

CodeChina开源项目:《Android学习PDF+架构视频+面试文档+源码笔记》

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值