JavaWeb - response对象,重定向,定时跳转案例,百度java面试经验

//得到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)把验证码显示到登录的页面中

(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”);

(3)Map<java.lang.String,java.lang.String[]> getParameterMap() :

= 返回的是map集合,key是表单输入项name属性的值,value是输入的值

= 代码

Map<String,String[]> map = request.getParameterMap();

//得到map集合里面的key和value,遍历map

Set keys = map.keySet();

//遍历set集合

for (String key : keys) {

//根据key得到value

String[] values = map.get(key);

//key和对应的value输出(表单输入项name的属性值和输入的值)

System.out.println(key+" :: "+Arrays.toString(values));

}

(4)Enumeration<java.lang.String> getParameterNames()

8.6 获取表单提交的中文数据乱码问题的解决

(1)post提交方式解决方法

= 使用post提交数据时候,会把数据放到request缓冲区里面,

request缓冲区默认的编码 iso8859-1,不支持中文

= 解决方法:

设置request缓冲区的编码

= 代码:

request.setCharacterEncoding(“utf-8”);

(2)get提交中文乱码解决

= 有三种方式

第一种:修改tomcat的配置文件

== <Connector port=“80” protocol=“HTTP/1.1”

connectionTimeout=“20000”

redirectPort=“8443” URIEncoding=“utf-8”/>

第二种:把数据先编码,再进行解码

第三种:使用string构造进行编码

new String(“”);

= 代码:

username = new String(username.getBytes(“iso8859-1”),“utf-8”);

8.7 request是域对象

(1)域对象:在一定的范围内,可以存值和取值

(2)servletContext域对象:范围是整个web项目,存值 setAttribute方法 和取值 getAttribute方法

(3)request也是一个域对象:范围是一次请求,存值和取值

= 向request域里面存值的方法:setAttribute(java.lang.String name, java.lang.Object o)

= 从request域里面取值的方法:getAttribute(java.lang.String name)

(4)request域对象范围是一次请求,经常和转发一起使用

= 代码 request.getRequestDispatcher(“转发的路径 不带项目名称”).forward(…);

(5)举例演示request域对象

= 创建servlet1,在servlet1里面向request域里面设置一个值,最后转发到servlet2里面

== //向request域里面设置一个值

request.setAttribute(“msg”, “aaa100”);

//转发到servlet2

request.getRequestDispatcher(“/servlet2”).forward(request, response);

= 创建servlet2,在servlet2里面获取通过servlet1向request域里面设置的那个值

== //获取通过servlet1向request里面设置的值

response.getWriter().write(“”+request.getAttribute(“msg”));

8.8 重定向和转发的区别

(1)重定向

= 重定向请求两次,请求的地址带项目名称

= 302+Location实现重定向的操作

= response.sendRedirect(“路径 带项目名称”);

(2)转发

= 转发请求一次,路径不需要带项目名称(在服务器内部进行操作)

= request.getRequestDispatcher(“转发的路径 不带项目名称”).forward(request, response);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image
x15d-1711915659676)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-xPmh1lT0-1711915659677)]

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

[外链图片转存中…(img-h8sLoyp8-1711915659678)]

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值