一、向服务器发起请求的方式
1、地址栏输入(http://ip:port/path)
2、超链接
3、Form表单提交
4、ajax
通过ajax发出的请求属于异步请求,能实现局部刷新的效果,通过JQuery中的ajax(),get(),post(),getJson()等方法都能发出请求。
5、请求转发(在下面会详细介绍)
6、重定向(在下面会详细介绍)
二、HttpServletRequest对象
1、介绍
·主要作用是用来接收客户端发送过来的请求信息,例如请求参数,发送的头信息等。
·service方法的形参接收的是HTTPServletRequest接口的实例化对象,表示该对象主要用在HTTP协议上,是由Tomcat封装好传递过来的
ServletRequest只有一个子接口HTTPServletRequest接口,但为什么不将两个接口合在一起呢?
原因是现在主要用的协议是HTTP协议,如果以后出现新的协议,想支持新的协议,只要继承ServletRequest接口就行了。
2、常用形式
1)常用方法
2)获取请求头
3)获取客户端请求参数(客户端提交的数据)
3、请求乱码的解决方式
req.setCharacterEncoding("UTF-8");
这种方法只针对POST有效,必须在接收所有数据前设置
new String(req.getParameter(name).getBytes("ISO-8859"),"UTF-8");
这种方式对任何请求都有效,但Tomcat8起,以后的GET方式请求不会出现乱码,再设置反而会出现乱码。
4、请求转发
请求转发是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL地址不会改变,
得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。
5、Request作为域对象
作用范围只在一次请求中有效,经过请求转发request域的数据依然存在。
request.setAttribute(); 设置域对象的内容
request.getAttribute(); 获取域对象内容
request.removeAttribute(String name); 删除域对象内容
三、HTTPServletResponse对象
1、介绍
HTTPServletResponse主要功能是服务器对客户端的请求进行相应,将Web服务器处理后的结果返回给客户端
2、常用方法
3、刷新和页面自动跳转
response头信息刷新
HTML方式刷新
4、数据响应
getWrite()获取字符流(只能响应回字符)
getOutputStream()获取字节流(能响应一切数据)
5、乱码解决
resp.setCharacterEncoding("UTF-8") 服务端解码方式
resp.setHeader("content-type", "text/html;charset=UTF-8"); 客户端解码方式
要保持发送端和接收端一致,所以两种方式要同时使用
可以同时指定服务器和客户端的方式:
resp.setContentType("text/html;charset=utf-8");
6、响应图片
public class Servlet02 extendsHttpServlet{/*** 响应图片*/@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {//设置图片响应类型
resp.setContentType("image/jpeg");//得到服务器的真实路径
String realPath=req.getServletContext().getRealPath("/");
System.out.println(realPath);//得到图片路径
String filePath=realPath+"s1.jpg";//通过图片路径得到file对象
File file=newFile(filePath);//判断file对象是否存在,并且是一个标准文件
if (file.exists() &&file.isFile()) {//得到输出流
ServletOutputStream out=resp.getOutputStream();//得到输入流
InputStream is=newFileInputStream(file);byte[] buf=new byte[1024];int len=0;while ((len=is.read(buf))!=-1) {
out.write(buf,0,len);
}
is.close();
out.close();
}else{
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("文件不存在");
}
}
}
7、重定向跳转
重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect("url");),当客户端接收到响应后, 立刻、马上、自动根据服务器 给的地址进行请求的发送第二个请求,服务器接收请求并作出响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。
实现方式
请求转发和重定向比较:
原文:https://www.cnblogs.com/dhome/p/9551520.html