Servlet学习总结

Servlet简介

它符合特定规范的Java程序,基于Java技术的Web组件,运行在服务器端,主要用于生成HTML内容和处理客户端请求并给出响应。

为什么使用Servlet

在有JSP之前,想要生成HTML动态页面就只能在服务器运行Java程序,并生成HTML内容,那么只有Servlet是运行在服务器的Java程序,需要在Java中编写HTML内容。
这样在Java中编写HTML内容呢麻烦,效率低,所以就有了JSP,JSP是为了简化Servlet的开发所产生的,这样避免了复杂的编写方法,适用于开发页面内容的表示层。
但是使用JSP开发WEB应用时,HTML与Java代码都写入JSP,这样导致页面代码繁琐,维护性差。
所以就将Java代码写入Servlet,HTML代码写入JSP文件。

使用Java编写HTML代码:

response.setContentType(“text/html;charset=UTF-8);
JspWriter  out  = pageContext.getOut();
out.write(<html>);
out.write(<body>); 
out.write(<html>);
// 这样编写很麻烦,也很消耗时间

Servlet和JSP的关系?

JSP运行时会被Web容器翻译成Servlet,动态响应式通过运行这个Servlet类产生。
Servlet是JavaWeb动态交互关键的组件,容器运行JSP时,需要先将内容翻译成Servlet语法,在按照Servlet的方式进行运行。

Servlet工作过程:
客户端请求–>服务器–>运行Servlet程序–>生成HTML代码–>响应客户端。

Servlet API

Servlet API在两个包中:
javax.servlet包中的类和接口是通用的不依赖HTTP协议的。
javax.servlet.http包中的类和接口是用于支持HTTP协议的。

Servlet接口

Servlet接口常用方法描述
abstract void init (ServletConfig config)Servlet对象处理请求前的初始化
abstract void service (ServletRequest req,ServletResponse res)处理客户端的请求
abstract void destroy()释放Servlet对象使用的资源
abstract ServletConfig getServletConfig ()返回ServletConfig对象,包含该对象的初始化参数,传递给init方法的对象。
abstract String getServletInfo()返回Servlet的纯文本信息,如版本等。

GenericServlet抽象类

GenericServlet实现了Servlet接口和ServletConfig接口,定义了不依赖HTTP协议的Servlet。

GenericServlet抽象类常用方法描述
void init (ServletConfig config)将ServletConfig实例保存可以再子类中重写
String getInitParameter (String str)获取Web.xml文件中设置以name命名的初始值
ServletContext getServletContext ()返回ServletContext对象的引用

重写带参数的init()方法需要包含super.init(config)代码,通常重写不带参数的init()方法。
如果写通用的Servlet只需要继承GenericServlet类,实现service()方法即可。

HTTPServlet抽象类

HttpServlet抽象类继承于GenericServlet类,支持对HTTP协议的post,get的请求进行差异化处理,如果需要编写Servlet,主要继承HttpServlet抽象类。

HttpServlet抽象类常用方法描述
public void service (ServletRequest req , ServletResponse res)GenericServlet中的service()方法的实现,将请求分给service(HttpServletRequest req,…)方法
protected void service (HttpServletRequest req,HttpServletResponse res)接收HTTP请求,发送到此类中的doPost()/doGet()方法。
protected void doXxx(…)根据不同的请求定义处理的方法:doPost(),doGet()

ServletConfig接口

Servlet容器使用ServletConfig接口的实例在Servlet初始化期间传递的配置信息。

ServletConfig接口常用方法描述
String getInitParameter(String name)获取Web.xml文件中以name命名的初始值
ServletContext getServletContext()返回Servlet的上下文对象引用。

ServletContext接口

ServletContext接口的实例表示Web应用的上下文,此接口定义的方法是与Servlet容器进行的通信,application就是ServletContext实例,容器在加载时创建ServletContext。它被Servlet容器中所有Servlet共享。

ServletContext接口常用方法描述
String getInitParameter (String name)获取Web.xml文件中以name命名的初始值,在部署描述符中用< context-param>定义
void setAttribute(String str,Object ob)设置名称为str的属性,ob参数是值
Object getAttribute(String str)获取名称是str的属性,取值
String getRealPath(String path)返回参数所代表目录的真实路径
void log(String message)记录日志信息

ServletRequest接口

客户发送请求时,Servlet容器会创建ServletRequest对象来封装客户的请求信息,被容器作为service()方法的参数之一传递给Servlet获取请求的数据。

ServletRequest接口常用方法描述
abstract String getParameter(String name)获取表单指定的单个name属性值
String[] getParameterValues(String name)获取表单指定的一组name属性值
getRequestDispatcher(String path)返回指定路径的请求转发对象
void serCharacterEncoding(String charset)设置请求的字符编码
String getCharacterEncoding()返回请求时用的字符编码
void serAttribute(String name,Object ob)在请求中保存为name的属性,存放值
Object getAttribute(String name)获取值名为name的属性值
void removeAttribute(String name)删除名为name的属性

HttpServletRequest接口

继承自ServletRequest接口,该接口也可获取请求的参数,此接口增加了读取请求信息的方法。

HttpServletRequest接口常用方法描述
String getContextPath()返回URI中表示请求上下文路径
Cookie[] getCookies()返回客户端请求中发送的所有cookie对象
HttpSession getSession()HttpSession getSession() 返回和此次请求关联的session,没有分配session,则创建一个session
String getMethod()返回请求所用的HTTP方法的名称如post.
String getHeader(String name)获取指定的请求头信息

ServletResponse接口

容器接收请求时,创建了ServletRequest对象,还创建了ServletResponse对象用于封装响应数据,同时将两个对象作为参数传递给Servlet。
ServletResponse也有设置和返回字符编码方法和ServletRequest相同。

ServletResponse接口常用方法描述
PrintWriter getWriter()返回PrintWriter对象,向客户端发文本
void setContentType(String type)设置发送到客户端响应的内容类型,此时响应状态未提交

HttpServletResponse接口

用于对客户端的请求执行响应。

HttpServletResponse接口常用方法描述
addCookie(Cookie cookie)添加cookie到响应,可多次调用设置多个
addHeader(String name,String val)将名为name,值为val的响应报头添加到响应中
sendRedirect(String location)发送一个临时的重定向到客户端
encodeURL(String url)用sessionID对用重定向的URL进行编码

Servlet生命周期

1.加载和实例化
Servlet不能单独运行,需要部署到容器中,由容器实例化调用相应方法,容器启动或接收请求时,容器会找内存中是否存在该Servlet的实例,如果不存在,就创建一个实例,如果存在直接取出该实例响应请求。执行一次。
2、初始化
容器完成实例化后,容器将调用Servlet的init()方法进行初始化,目的是让Servlet对象处理请求前完成一些资源预加载,如连接数据库参数,jdbc连接等。执行一次。
3、服务
初始化后,就是就绪状态。当容器接受请求时,调用service()方法,根据请求类型在调用doGet()/doPost()方法。执行多次。
4、销毁
实例是容器创建,那么销毁也是容器来完成。容器会判断Servlet是否应该被回收资源,容器会调用destroy()方法指明哪些资源可被回收。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值