Servlet技术

Servlet技术
一、Servlet基础
Serlvet运行在Web服务器端的Java应用程序,它使用java语言编写,具有Java语言的优点。与Java程序的区别是,Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持,在Java Web应用方面,Servlet的应用占有十分重要的地位,它在Web请求的处理功能方面也非常的强大。
1、Servlet的体系结构
Servlet实际上是按Servlet规范编写的Java类,但它可以处理Web应用中的相关请求,它由Sun定义,其具体细节由Servlet容器进行实现,如Tomcat、JBoss等。
Servlet对象、ServletConfig对象与Serializable对象是接口对象,其中Serializable是java.io包中的序列化接口,Servlet对象、ServletConfig对象是javax.servlet包中的对象,这两个对象定义了Servlet的基本方法以及封装了Servlet的相关配置信息。GenericServlet对象是一个抽象类,它分别实现了上述的3个接口,该对象为Servlet接口及ServletConfig接口提供了部分实现,但它并没有对HTTP请求处理进行实现,这一操作有它的子类HttpServlet进行实现。这个对象为HTTP请求中的POST、GET等类型提供了具体的操作方法,,所以常通情况下,我们所编写的Servlet对象都继承于HttpServlet,在开发中,所使用的具体的Servlet对象就是HttpServlet,原因是HttpServlet是Servlet的实现类,并提供了HTTP请求的处理方法。
2、Servlet技术的特点
Servlet是由Java语言编写的,它不仅继承了java语言中的优点,而且还对Web的相关应用进行了封装,同时Servlet容器还提供了对应用的相关扩展,无论从功能、性能、安全等方面都十分优秀,其技术特点的表现在以下几方面:
(1)功能强大
Servlet采用Java语言编写,它可以调用Java API中的对象及方法。此外,Servlet对象对Web应用进行了封装,提供了Servlet对Web应用的编程接口,还可以对HTTP请求进行相应的处理,如提交数据、会话跟踪、读取和设置HTTP头信息。由于Servlet既拥有Java提供的API,而且还可以调用Servlet封装的Servlet API编程接口,因此,它在业务功能方面十分的强大。
(2)安全性高
Servlet使用了Java的安全框架,同时Servlet容器还可以为Servlet提供额外的功能,它的安全性是非常高的。
(3)可移植性
Java语言是跨平台的,所谓跨平台是不依赖于操作系统,它可以运行到多个系统平台中,如目前常用的操作系统Windows、Linux和UNIX等,由于Servlet使用Java语言编写,所以Servlet继承了Java语言的优点,程序一次编码,多平台运行,拥有超强的可移植性。
3、Servlet与JSP的区别
Servlet是使用Java Servlet接口(API)运行在Web应用服务器上的Java程序,其功分能十分强大,它不但可以处理HTTP请求中的业务逻辑,而且还可以输出HTML代码来显示指定的页面。而JSP是一种在Servlet规范上的动态网页技术,在JSP页面中,同样可以编写业务逻辑处理HTTP请求,也可以通过HTML代码来编辑页面,在实现功能上,Servlet与JSP貌似相同,实质上存在一定的区别,主要表现在以下几方面。
(1)角色不同
JSP页面可以存在HTML代码与Java代码并存的情况,而Servlet需要承担客户请求与业务处理的中间角色,只有调用固定的方法才能动态的输出静态的HTML,所以,JSP更具有显示层的角色。
(2)编程方法不同
Servlet和JSP编程方法上存在很大的区别,使用Servlet开发Web应用程序需要遵循Java的标准,而JSP需要遵循一定脚本语言规范。在Servlet代码中,需要调用Servlet提供的相关API接口方法,才可以对HTTP请求及业务处理,对于业务逻辑方面的处理功能更加强大。然而在JSP页面中,通过HTML代码与JSP内置对象实现对HTTP请求及页面进行处理,其显示功能更加强大。
(3)Servlet需要编译后运行
Servlet需要Java编译器编译后才可以运行,如果Servlet在编写完成或修改后没有被重新编译,则不能运行在Web容器中。而JSP则与之相反,JSP与JSP Container对其进行管理,它的编辑过程也由JSP Container对JSP自动编辑,所以,无论JSP文件被创建还是修改,都不需要对其编译即可执行。
(4)速度不同
由于JSP页面由JSP Container对其进行管理,在每次执行不同内容的动态JSP页面时,JSP Container都要对其进行自动编译,所以,它的效率低于Servlet的执行效率。而Servlet在编译完成之后,则不需要再次编译,可以直接获取及输出动态内容。在JSP页面中的内容没有变化的情况下,JSP页面的编译完成之后,JSP Container不会再次对JSP进行编译。
4、Servlet代码结构
例子:
 public void init(){//初始化方法

    }
    //处理HTT POST请求
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
//处理HTTP Get请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    //处理HTTP Put请求
    protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    //处理HTTP Delete请求
    protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    //销毁方法
    public void destroy(){

    }
}
上述代码显示了一个servlet对象的代码结构,TestServlet类通过继承HttpServlet类被声明为一个Servlet对象。该类中包含6个方法,其中init()和destroy()方法为Servlet初始化与生命周期结束所调用的方法,其余的四个为Servlet针对处理不同的HTTP请求类型所提供的方法,,其作用如注释中所示。
在一个Servlet对象中,最常用的方法是doGet()和doPost()方法,这两个方法分别用于处理HTTP的GET和POST请求。

二、ServletAPI编程常用接口和类
Servlet是运行在服务器端的Java应用程序,由Servlet容器对其进行管理,当用户对容器发送HTTP请求调用时,容器将通知相应的Servlet对象进行处理,完成用户与程序之间的交互。在Servlet编程中,Servlet API提供了标准的接口和类,这些对象对Servlet的操作非常重要,它们为HTTP请求与程序回应提供了丰富的方法。
1、Servlet接口
Servlet的运行需要Servlet容器的支持,Servlet容器通过调用Servlet对象提供了标准的API接口,对请求进行处理。在Servlet开发中,任何一个Servlet都直接或间接地实现了javax.servlet.Servlet接口。该接口包含5个方法。如下:
public  void init(ServletConfig config):Servlet实例化后,Servlet容器调用该方法来完成初始化工作。
public void  service(ServletRequest request,ServletResponse response):用于处理客户端的请求。
public void destroy():当Servlet对象从Servlet容器移除时,容器调用该方法,释放资源。
public ServletConfig getServletConfig():用于获取Servlet对象的配置信息,返回ServletConfig对象。
public String getServletInfo():返回有关Servlet的信息,它是纯文本格式的字符串。
例子:
public class MyServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
2、ServletConfig接口
ServletConfig接口位于javax.servlet包中,它封装了servlet的配置信息,在Servlet初始期间被传递,每一个Servlet都有且只有一个ServletConfig对象。
3、HttpServletRequest接口
HttpServletRequest接口位于javax.servlet.http包中,继承了java.servlet.ServletRequest接口,是Servlet中的重要对象,在开发中较常用。如下:
public String getContextPath():返回请求的上下文路径,此路径以“/”开头.
public Cookie getCookies():fabhuiqingqiuzhongfasongdesuoyoudecookie对象,返回值为cookie数组。
public String getMothod():返回请求所使用的HTTP类型,如get、post等。
4、HttpServletResponse接口
HttpServletResponse接口位于javax.servlet.http包中,它继承了javax.servlet.ServletResponse接口,同样是个非常重要的对象,其常用方法如下:
public void addCookie(Cookie cookie):向客户端写入cookie信息。
public void sendError(int sc):发送一个错误状态码为sc的错误响应信息给客户端。
public void sendError(int sc,String msg):发送一个包含错误状态码及错误信息的响应到客户端。参数sc为错误状态吗,参数msg为错误信息。
public void sendRedirect(String location):使用客户端重新定向到新的URL,参数location为新的地址。
5、GenericServlet接口
在编写一个Servlet对象是,必须实现javax.servlet.Servlet对象,在Servlet接口中有5个方法,也就是创建一个Servlet对象时,要实现这5个方法,这样操作非常不方便。javax.servlet.GenericServlet类简化了此操作,实现了servlet接口。
GenericServlet是一个抽象类,分别实现了Servlet接口和ServletConfig接口。该类实现了除service()之外的方法。
6、HttpServlet接口
GenericServlet类实现了javax.servlet.Servlet接口,为程序的开发提供了方便;但在实际开发过程中,大多数应用都是使用Servlet处理HTTP请求,并对请求做出响应,所以通过继承GenericServlet类仍然不是很方便.javax.servlet.http.HttpServlet对GenericServlet做了扩展,为HTTP请求的处理提供了灵活的方法。
public abstract HttpServelt extends GenericServlet implements Serializable{
}

三、Servlet的开发
在Java的Web开发中,Servlet具有重要的地位,程序中的业务逻辑可以由servlet进行处理,它也可以通过HttServletResponse对象对请求做出响应,功能十分强大。
1、Servlet配置
要使Servlet对象正常运行,需要进行适当的配置,已告知Web容器哪一请求调用哪一个Servlet对象处理,对Servlet起到一个注册的作用。Servlet的配置包含在web.xml文件中,主要通过以下两步进行设置:
(1)声明Servlet对象
在web.xml文件中,通过<servlet>标签声明一个servlet
(2)映射Servlet
在web.xml文件中声明了Servlet对象,需要映射访问Servlet的URL地。该操作使用<servlet-mapping>标签进行设置,<servlet-mapping>标签含有两个子元素,分别为<servlet-name>和<url-pattern>.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值