1.Servlet简介
从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。
●从狭义上来讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类。
●Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用;Servlet容器会在Web应用卸载时销毁Servlet对象的实例。
创建Servlet的步骤:
1、创建Servlet类:
1.1创建类实现Servlet接口,实现接口的抽象方法
1.2在service方法中编写业务逻辑
分析请求报文
发送响应报文
2、在web.xml文件中配置Servlet映射信息
1.1节点:配置Servlet逻辑名和完整类名间的映射信息
1.2节点:配置Servlet逻辑名和URL地址间的映射信息
2.Servlet的执行流程
1、启动Tomcat服务器
2、在浏览器中输入Servlet的虚拟路径访问Servlet
3、浏览器向Web容器(Tomcat)发送Http请求
4、Web容器接收到Http请求后,动态创建ServletRequest和ServletResponse对象
5、分析请求的虚拟路径
6、通过读取配置文件中的配置信息,获取完整的Servlet全类名
7、利用Java的反射机制动态创建Servlet对象
8、条用Servlet对象的service方法,并将前面创建的request对象response作为方法的参数
9、执行service方法中的业务逻辑并调用其他业务组件得到返回结果
10、将需要发送给客户端浏览器的响应结果组织成响应报文发送给客户端的浏览器
11、客户端浏览器中可以接收到服务器端返回的响应报文
12、浏览器解析响应报文并将内容显示在浏览器上
3.Servlet生命周期
生命周期方法:
四个方法:构造函数、init、service、destroy
执行流程:
服务器启动后Servlet第一次被访问时:
1、先执行构造方法初始化Servlet实例
2、再执行init方法对Servlet进行初始化配置
3、接下来调用Service方法执行核心业务逻辑
4、当服务器正在关闭或项目销毁时,会调用destroy方法,并执行垃圾回收工作
再次被访问时:
直接执行Service方法
4.ServletConfig与ServletContext
- ServletConfig(了解):
代表Servlet配置信息
对象:由Servlet容器创建,并传入init(ServletConfig config)方法
作用:
(1)获取Servlet友好名称
(2)获取Servlet初始化参数
(3)获取ServletContext对象 - ServletContext(重要):
意思是Servlet上下文,代表当前Web应用
对象由Servlet容器创建,通过ServletConfig对象获取
作用:
(1)获取WEB应用程序的初始化参数
(2)获取虚拟路径所映射的本地路径
(3)application域范围的属性
5.Servlet接口扩展
为什么要扩展Servlet接口?封装不常用方法
实现类体系
GenericServlet实现Servlet接口
HttpServlet继承GenericServlet
创建Servlet的最终方式:继承HttpServlet
创建Servlet集成HttpServlet
默认会有两个方法需要被完善:doGet、doPost
doGet:当客户端以get形式发送请求的时候会被自动调用
doPost:当客户端以post形式发送请求的时候会被自动调用
6.请求与响应,转发与重定向
- request对象:
表示:客户端提交的请求报文
创建时机:Web容器接收到Http请求后,动态创建ServletRequest对象
作用:
1、获取客户端提交的数据
2、获取请求头信息
3、获取上下文路径
4、进行请求转发
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、获取请求参数
String id = request.getParameter("id");
System.out.println("参数 id=" + id );
//2、获取请求头信息
String referer = request.getHeader("referer");
System.out.println(referer);
//3、获取上下文路径
String contextPath = request.getContextPath();
System.out.println(contextPath);
//4、请求转发
RequestDispatcher requestDispatcher = request.getRequestDispatcher("info.html");
requestDispatcher.forward(request, response);
//response.getWriter().append("Served at: ").append(request.getContextPath());
}
-
response对象:
表示:服务器发送给客户端的响应报文
创建时机:Web容器接收到Http请求后,动态创建ServletResponse对象
作用:
1、向客户端发送响应数据
2、设置响应头
3、进行请求重定向
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(username) && "123".equals(password)) {
//3、请求重定向
response.sendRedirect("1.html");
}else {
//2、设置响应头
//注意:一定要在发送响应报文之前设置响应头
response.setHeader("Content-Type", "text/html;charset=UTF-8");
//1、发送响应报文
response.getWriter().write("<h1>失败响应response ....</h1>");
}
}