Servlet学习(二)

一、请求的方式

1.地址栏输入

2.超链接

3.Form表单

4.ajax,异步无刷新技术

5.请求转发

6.重定向

二、HttpServletRequest对象

主要作用:接受客户端发送过来的请求信息

1.常用方法

getRequestURL():获取来源URL

getQueryString():

getMethod():请求方式,get/post

2.请求乱码解决

2.1 方案一

只对post请求有效

req.setCharacterEncoding("UTF-8");

2.2 方案二

一次只能处理一个参数

如果本身不乱码,使用后会乱码

无论get还是post都可以使用

new String(request.getParameter("参数名").getBytes("ISO-8859-1"),"UTF-8")

3.请求转发

请求转发,是一种服务器的行为

当客户端请求到达后,服务器进行转发, 此时会将请求对象进行保存

req.getRequestDispatcher("请求地址").forward(request,response)

4.request作为域对象

设置作用域

req.setAttribute("user", "zhangsan");

移除作用域

req.removeAttribute("user");

三、HttpServletResponse对象

1.常用方法

getWriter(),获取输出的 字符流

getOutputStream(),获取输出的字节流

setContentType(),设置响应类型和编码

2.刷新和页面自动跳转

2.1 页面跳转

3秒后进行跳转

response.setHeader("refresh","3;URL=ok.html");

2.2 自动刷新

每隔2秒自动刷新

resp.setHeader("refresh","2");

3.响应数据

接受到客户端请求后,可以通过HttpServletResponse对象直接进行响应

getWriter()获取字符流

PrintWriter writer = resp.getWriter();

writer.write("<h4>Hello Servlet</h4>");

writer.close();

getOutputStream()获取字节流,可以响应一切数据

OutputStream outputStream = resp.getOutputStream();

outputStream.write("<h4>Hello Servlet</h4>".getBytes());

4.解决乱码

4.1 指定客户端和服务器使用的编码一致

设置服务器的编码格式

resp.setCharacterEncoding("UTF-8")

设置客户端的编码格式

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

4.2 使用单句话代替

用这句话,就可以替代,完成编码格式统一和,响应类型识别

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

5.响应图片

5.1  获取路径

获得项目在服务器中的真实路径

String path = req.getServletContext().getRealPath("/")

获得图片的存放路径

String filepath = path + "WEB-INF/图片名称.jpeg"

5.2 获取对象

获取该对象

File file = new File(filepath)

5.3 判断对象

判断该对象是否存在,并且是否为一个文件

if(file.exists() && file.isFile())

5.4 写入关闭

得到输出流

ServletOutputStream out = resp.getOutputStream();

得到输入流

InputStream in = new FileInputStream(filepath);

写出

byte[] arr = byte[1024];

int len =0;

while((len=in.read(arr))

!= -1){

    out.write(arr,0,len);

}

out.flush();

in.close();

out.close();

5.5 设置响应类型

resp.setContentType("img/jpeg");


6.请求转发和重定向的区别

6.1 请求转发

1. 只有一次请求,request作用域中的数据可以共享

2. 浏览器地址栏不发生改变

3. 服务器行为

4. 跳转的绝对地址可以定位到站点名后

6.2 重定向

1. 有两次请求,request作用域的属于不可以共享

2. 浏览器地址方式改变

3. 客户端行为

4. 跳转地址可以定位到http://后

5. 重定向可以定位到任意路径

6.3 请求转发和重定向的"/"含义

请求转发(服务端跳转):"http://localhost:8080/站点名"

重定向(客户端跳转):"http://localhost:8080/"

6.4 客户端跳转

1. 表单提交

2. 超链接提交

3. 地址栏输入

4. 重定向 

6.5 服务端跳转

1. 地址栏直接输入

2. 请求转发

7.路径问题

7.1相对路径

路径的前面不要加任何符号,一般情况下代表的是:"http://localhost:8080/站点名"

7.2绝对路径

以http://开头的完整的绝对路径,可以跨域,可以访问任何资源

以"/"开头,访问当前项目下的资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容