Servlet学习小结
什么是Servlet?Servlet是纯Java文件,是一个类。是Java语言编写的运行在服务器端的小应用程序,类似运行在客户端的Applet。它能够接收客户端的请求,并对Web客户端做出响应,通常是按照HTTP协议进行工作的。当客户机发送请求至服务器时,服务器将请求信息发送给Servlet,Servlet生成响应内容并将其传给Server,然后再由Server将响应返回给客户端。
Servlet API类框图(见附加图片)
1.Servlet接口的方法:
1)void destroy(); 由容器调用,表示该Servlet不可再用。
2)ServletConfig getServletConfig();获取ServletConfig对象,该对象包含了Servlet的初始化和启动参数等信息
3)String getServletInfo();获取Servlet的相关信息,例如开发者、创建日期、描述信息等。
4)Void inti(ServletConfig config);对Servlet进行初始化。实例化后,容器就调用此方法。
5)Void service(ServletRequest req,ServletResponse res)由Servlet容器调用,来对请求进行相应。
(Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,servlet不能独立运行,必须被部署到容器中,由容器来执行实例化和调用Servlet的方法。简言之,Servlet容器在Servlet的生命周期内包容和管理Servlet)
2.ServletConfig接口的方法:
1)String getInitParameter(String name);返回参数所指定的初始化参数值,如果指定的初始化参数不存在返回null;
2)Enumeration getInitParameterNames();返回所有的初始化参数的名字,如果不存在任何初始化参数返回空的Enumeration对象;
3)ServletContext getServletContext();返回一个ServletContext对象引用;
4)String getServletName();返回Servlet实例的名字;
3.GenericServlet是一个通用的与协议无关的Servlet;实现了以上两个接口和Serializable接口。另外定义了一下三个方法
1) log(String msg):把特定信息写到Servlet的日志文件;
2) log(String msg,Throwable()):为Throwable异常添加辅助描述信息,然后写入Servlet的日志文件,消息前面会加上Servlet的名字;
3) void init():如果不需要调用super.init(config),可以覆盖这个方法
4.HttpServlet继承自GenericServlet,编写HTTP协议下的Servlet应该继承这个类,该类是抽象类。除继承方法外,还实现了以下方法:
1)protected void doDelete(HttpServletRequest req,HttpServletResponse res);
2)protected void doGet(HttpServletRequest req,HttpServletResponse res);
3)protected void doPost(HttpServletRequest req,HttpServletResponse res);
4)protected void doLastModified(HttpServletRequest req,HttpServletResponse res);
5)protected void service(HttpServletRequest req,HttpServletResponse res);
......
以上方法接受的两个对象是ServletResquest和ServletResponse,ServletRequest对象含有发送给servlet的信息,而ServletResponse对象则是返回给客户机的数据载体。
5.Servlet的主要方法有:
1)init 方法:用于初始化。
2)destroy方法:用于释放资源。
3)service 方法:服务类方法,对用户的请求进行处理,并对用户进行响应,几乎所有处理功能都在此完成。该类方法有
doPost,响应post方式的请求; doGet,响应get方式的请求; service(),两种请求方式都可以响应;
post/get区别: get提交内容的大小有限制,post好像没有;使用get提交地址栏中会显示提交数据,post不会;get提交
通常要求服务器马上处理;通常表单提交使用post方式(提交客户端数据),超链接使用get方式(查询服务
端的数据)。
6.Servlet的生命周期:
1.编译(即将.java文件编译为.class文件)
2.加载()
3.实例化(分配内存)-
4.初始化-
5.执行-
6.销毁-
7.Servlet的三种转发方式:
1)request.getRequestDispatcher(url).include(request, response);包含
2)request.getRequestDispatcher(url).forward(request, response);请求转发
3)response.sendRedirect(url);重定向
区别:include 将url中的资源包含到当前Servlet中输出。原来的资源还在。
forword 将url中的资源拿到当前Servlet中显示。原来的资源被覆盖。
sendRedirect将url发送给客户端,让浏览器重新发送request去访问url中的资源。