JSP详细篇——Servlet(一)

Servlet技术

Servlet是用Java语言编写应用到Web服务器端的扩展技术。它先于JSP产生,可以方便的对Web应用中的HTTP请求进行处理。在Java Web程序开发中,Servlet主要用于处理业务逻辑,它比JSP更具有业务逻辑层的意思。而且Servlet的安全性、扩展性以及性能方面十分优秀。在Java Web程序开发及MVC模式的应用方面起到了十分重要的作用。

Servlet基础

1.Servlet结构体系

如图所示,Servlet、ServletConfig与Serializable都是接口。其中Serializable是java.io包中的序列化接口,Servlet和ServletConfig是javax.servlet包中的接口。GenericServlet是一个抽象类,它分别实现了上述的三个接口。GenericServlet为Servlet和ServletConfig提供了部分实现,但是它没有对HTTP请求中的GET,POST等类型提供具体的操作方法。一般情况下,我们所编写的Servlet对象都继承自HttpServlet,在开发中所使用的具体Servlet对象就是HttpServlet对象,因为HttpServlet是Servlet的实现类,并提供了HTTP请求的处理方法。

2.Servlet技术的特点

功能强大

Servlet采用Java编写,它可以调用Java API中的对象及方法。此外,Servlet对Web应用进行了封装,提供了Servlet对Web应用的编程接口,还可以对HTTP请求进行相应的处理。

可移植性强

Java语言是可以跨平台的,由于Servlet是用Java编写,因此Servlet继承了Java的优点。

性能高效

Servlet对象在Servlet容器启动时被初始化,当第一次请求时,Servlet容器将其实例化,此时它贮存于内存中。如果存在多个请求,Servlet不会再被实例化,仍然由此Servlet对其进行处理。每个请求都是一个线程,而不是进程,因为Servlet十分高效

安全性高

Servlet使用了Java的安全框架,同时Servlet容器还可以为Servlet提供额外的功能,因此安全性很高。

可扩展性

Java语言是面向对象的语言, Servlet是由Java编写,它继承了Java的面向对象的特点,在业务逻辑处理中,可以通过封装,继承等来扩展实际的业务需求,扩展性很强。

3.Servlet与JSP的区别

角色不同

JSP可以存在Java代码和HTML代码并存的情况。Servlet需要承担客户请求与业务处理的中间角色,只有调用固定的方法才能将动态的内容输出为静态的HTML代码。所以,JSP更具有显示层的角色。

编程方法不同

Servlet与JSP在编程方法上区别很大。使用Servlet开发Web需要遵循Java的标准,而JSP需要遵循一定的脚本语言规范。在Servlet代码中,需要调用Servlet提供的相关API接口方法,才可以对HTTP请求及业务进行处理,对于处理业务逻辑方面的处理能力更加强大些。在JSP页面中,通过HTML代码与JSP内置对象实现对HTTP请求及页面的处理,其显示界面的功能更加强大些。

Servlet需要编译后运行

Servlet需要在Java编译器编译后才可以运行,如果Servlet编写完成或修改完成后,没有被重新编译,则不能运行在Web容器中。JSP则与之相反,JSP由JSP Container对其进行管理,他的编译过程也是由JSP Container对其进行编译,所以,无论JSP文件被创建或是修改,都不需要对其编译即可执行。

速度不同

由于JSP页面由JSP Container对其进行管理,在每次执行不同内容的动态JSP页面时,JSP Container都要对其进行编译,所以,他的效率低于Servlet的效率。而Servlet在编译完后将不再需要进行编译,可以直接获取及输出动态内容。在JSP页面中的内容没有变化的情况下,JSP编译完成后,JSP Container不会再次对其进行编译。

4.Servlet代码结构

在Java中,通常所说的Servlet指的是HttpServlet对象。在声明一个对象为Servlet时,需要继承HttpServlet类。HttpServlet类是Servlet接口的一个实现类,继承该类后,可以重写HttpServlet类中的
方法对HTTP请求进行处理。其代码结构如下:

范例:

创建一个名为TestServlet的Servlet。

package com.zgy.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

// 初始化方法

public void init() throws ServletException {

}

// 处理HTTP Get请求

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}

// 处理HTTP Post请求

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}

//处理HTTP Put请求

public void doPut(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException{

}

//处理HTTP Delete请求

public void doDelete(HttpServletRequest request,HttpServletResponse response)

throws ServletException,IOException{

}

//销毁方法

public void destroy(){

super.destroy();

}

}

以上代码显示了一个Servlet对象的代码结构。TestServlet类通过继承HttpServlet类被声明为一个Servlet对象。该类中包含了6个方法,其中,init()方法和destroy()方法为Servlet初始化与生命周期结束所调用的方法。其余4个方法为Servlet针对不同的HTTP请求类型所提供的方法。

Servlet API编程常用接口和类

1.Servlet接口

在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 getConfig()


用于获取Servlet对象的配置信息,反悔ServletConfig对象


public String getServletInfo()


返回有关Servlet的信息,他是纯文本格式的字符串

范例:

创建一个Servlet,实现向客户端输出字符串

package com.zgy.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class StringServlet implements Servlet {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public ServletConfig getServletConfig() {

// TODO Auto-generated method stub

return null;

}

@Override

public String getServletInfo() {

// TODO Auto-generated method stub

return null;

}

@Override

public void init(ServletConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

@Override

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException {

// TODO Auto-generated method stub

PrintWriter pw = response.getWriter();

pw.write("hello world");

pw.close();

}

}

在Servlet中,主要的方法是service()方法,当客户端请求来到时,Servlet容器将调用Service()方法对请求进行处理。本例中,在service()方法中,首先通过ServletResponse类的getWriter()方法得到一个PrintWriter()类型的输出流,然后使用该输出流向客户端输出字符串。

2.ServletConfig接口

ServletConfig接口位于javax.servlet包中,他封装了Servlet的配置信息,在Servlet初始化期间传递。每一个Servlet都有且仅有ServletConfig对象。该对象定义的4个方法如下:


方法


说明


public String getInitParameter(String name)


返回String类型的名称为name的初始化参数的值


pubic Enumeration getInitParameterNames()


获取所有初始化参数的枚举集合


public ServletContext getServletContext()


用于获取Servlet上下文


public String getServletName()


返回Servlet对象的实例名

3.HttpServletRequest接口

HttpServletRequest接口位于javax.servlet.http包中,继承了javax.servlet.ServletRequest接口,是Servlet中的重要对象。在开发过程中较为常见。其方法说明如下:


方法


说明


public String getContextPath()


返回请求的上下文路径,次路径以“/”开头


public Cookies[] getCookies()


返回请求中发送的所有cookie对象,返回值为cookie数组


public String getMethod()


返回请求所使用的HTTP类型


public String getQueryString()


返回请求中参数的字符串形式,如请求MyServlet?username=mr,则返回username=mr


public String getRequestURI()


返回主机名到请求参数之间的字符串形式


public StringBuffer getRequestURL()


返回请求URL,此请求参数不包含请求参数


public String getServletPath()


返回请求URI中的Servlet路径的字符串,不包含请求中参数信息


public HttpSession getSession()


返回与请求关联的HttpSession对象

4.HttpServletResponse接口

HttpServletResponse接口位于javax.servlet.http包中,他继承了javax.servlet.ServletResponse接口,同样是一个非常重要的方法。方法说明如下:


方法


说明


public void addCookie(Cookie cookie)


向客户端写入cookie信息


public void setError(int sc)


发送一个错误码为sc的错误响应到客户端


public void setError(int sc,String msg)


发送一个包含错误码及错误信息的响应到客户端,参数sc为错误码,参数msg为错误信息


public void sendRedirect(String location)


使用客户端重定向到新的URL,参数location为新的地址

5.GenericServlet类

在创建一个Servlet对象时,必须实现javax.servlet.Servlet接口,此接口中包含5个方法,也就是说,创建一个Servlet对象要实现这5个方法,这样的操作实在不便,javax.servlet.GenericServlet类简化了此操作,实现了Servlet接口。

public abstract class GenericServlet extends Object implements Servlet,ServletConfig,Serializable

该类实现了出service()之外的所有方法,在创建Servlet对象时,可以通过继承GenericServlet类来简化程序中的代码,但要实现service()方法。

6.HttpServlet类

虽然GenericServlet为程序开发提供了方便,但是在实际开发中,大多数应用的是Servlet处理HTTP请求,并对请求做出相应。所以在开发中使用GenericServlet类仍然还是不方便。javax.servlet.http.HttpServlet类对GenericServlet类进行了扩展,为HTTP请求的处理提供了灵活的方法

Public abstract class HttpServlet extends GenericServlet implements Serializable

HttpServlet仍然是一个抽象类,实现了service()方法,并针对HTTP1.1中定义的7中请求类型提供了响应的方法。分别为:doGet()方法,doPost()方法,doPut()方法,doDelete()方法,doHead()方法,doTrace()方法,doOptions()方法。在这7个方法中,只对doTrace()和doOption()方法进行了实现,其他方法都没有实现,需要开发人员在使用中根据实际需要对其进行重写。

时间: 2024-10-16 12:24:21

JSP详细篇——Servlet(一)的相关文章

JSP详细篇——Servlet(二)

Servlet开发 1.Servlet创建 Servlet创建很简单,主要有两种方法:一是创建一个普通的Java类使其继承HttpServlet类,在手动配置web.xml文件注册Servlet对象.另一种是直接通过IDE继承开发工具进行创建. 2.Servlet配置 (1)声明Servlet对象 在web.xml中,通过<servlet>标签声明一个Servlet对象.再此标签下主要包含两个子元素,分别为:<servlet-name>和<servlet-class>.

JSP详细篇——Servlet过滤器和监听器(二)

4.字符编码过滤器 在Java Web开发中,由于Web容器内部所使用的编码格式并不支持中文,所以,处理浏览器请求的中文数据会出现乱码. Web容器使用的编码格式是ISO-8859-1,所以在Web应用的业务处理中也会使用ISO-8859-1的编码格式.虽然浏览器提交请求使用的中文编码格式是UTF-8,但是经业务处理中的ISO-8859-1编码,就会出现乱码.在开发中,处理此问题的方法是:通过过滤器来处理字符编码. 范例: 实现图书信息的添加功能,并创建字符编码过滤器,避免中文乱码出现. (1)

JSP详细篇——Servlet过滤器和监听器

过滤器和监听器 Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建监听器需要实现响应的接口,并对其进行配置. Servlet过滤器 1.什么是过滤器 Servlet过滤器与Servlet十分相似,但是它具有拦截客户端请求的功能.Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要.对于程序开发人员来说,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端与目标资源之

JSP详细篇——EL表达式(二)

EL的隐含对象 为了能够获得Web应用中的是相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作.在EL的隐含对象中,除了PageContext是JavaBean对象,对应于javax.servlet.jsp.PageContext类型外,其他的隐含对象都对应于java.util.Map类型.这些隐含对象可以分为页面上下文对象.访问作用域范围的隐含对象和访问环境信息的隐含对象3种.下面分别进行详细介绍. 1.页面上下文对象 页面上下文对象为pageCon

JSP详细篇——JDBC操作数据库(二)

删除数据 范例: 在查询所有图书信息的页面中,添加删除图书信息的超链接,通过Servlet实现对数据的删除操作 (1)在book_list.jsp中,增加删除图书信息的超链接,将连接的地址指向DeleteServlet. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextP

JSP详细篇——异步处理

异步处理 一个Servlet的工作流程是:首先,Servlet接收到请求后,需要对请求修改的数据进行一些预处理.接着调用业务接口的某些方法,以完成业务处理.最后根据处理结果提交响应.至此,Servlet线程结束.在此过程中,如果任何一个任务没有结束,Servlet线程就处于阻塞状态,知道业务方法执行完毕.对于较大的应用,很容易造成程序性能的降低. Servlet3.0针对这一问题做出了突破性的工作,现在通过使用Servlet3.0的异步处理机制可以将之前的Servlet处理流程调整为以下过程.

JSP详细篇——application

application对象 application对象用于保存所有应用程序中的共有数据.它在服务器启动时自动创建,在服务器停止时自动销毁.当application对象没有被销毁时,所有用户都可以共享该application对象.与session相比,application 对象的生命周期更长,类似于"全局变量" 1.访问应用程序初始化参数 application提供了对应用程序初始化参数进行访问的方法.应用程序初始化参数在web.xml文件中进行设置,web.xml文件位于Web应用所

JSP详细篇——out

out对象 out对象用于在web浏览器上输出信息,并且管理应用服务器上的输出缓冲区.在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中残留的数据,为其他输出让出缓冲空间.待数据输出完成后,要及时关闭输出流. 1.向客户端输出数据 out对象可以输出各种数据类型的数据,在输出非字符串时,会自动将其转换为字符串.out提供print()和println()两种向页面输出信息. print()方法 使用print()方法向客户端输出信息相当于使用JSP表达式 范例: <% out

JSP详细篇——Ajax

Ajax技术 一.Ajax开发模式与传统开发模式的比较 传统的Web开发模式中,页面中用户的每一次操作都会触发一次返回Web服务器的HTTP请求,服务器进行相应的处理(获得数据.运行与不同的系统会话)后,返回一个HTML页面给客户端 在Ajax应用中,页面中用户的操作将通过Ajax引擎与服务器端进行通信,然后将返回的结果提交给客户端页面的Ajax引擎,再由Ajax引擎来决定将这些数据插入到页面的指定位置 二.Ajax技术的使用 1.XMLHttpRequest对象 Ajax使用的技术中,最核心的