一、请求的方式
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://开头的完整的绝对路径,可以跨域,可以访问任何资源
以"/"开头,访问当前项目下的资源