9512.net
甜梦文库
当前位置:首页 >> 理学 >>

第3章 JavaServlet



第3章 JavaServlet
3.1 JavaServlet 概述
3.2 Servlet编程基础

3.3 Servlet的生命周期
3.4 ServletAPI常用接口和类

3.5 Servlet的应用举例
习题

3.1 JavaServlet概述
3.1.1

什么是JavaServlet JavaServlet是位于Web服务器内部的、运行于服务 器端的、独立于平台和协议的Java应用程序(以下简 称Servlet),可以生成动态的Web。 Servlet由Web服务器进行加载,该Web服务器必须

包含支持Servlet的Java虚拟机。
Servlet的运行需要在web.xml中进行描述和注册。

3.1.2 Servlet的特点 1 .高效性 Servlet采用了多线程的处理机制,有效地节省了处理 时间和资源分配,提高了处理效率。 2 .开发的方便性

Servlet提供了大量的实用工具例程,用户可以非常方
便地学习并在此基础上开发出所需的应用程序。 3.强大的功能性 Servlet为用户提供了许多以往CGI很难实现的功能,这 些强大的功能为用户的Web开发提供了很好的支持。

3.1.2 Servlet的特点 4.可移植性 Servlet的定义和开发具有完善的标准。因此,Servlet不 需修改或只需简单调整即可移植到Apache、Microsoft

IIS等支持Servlet的Web服务器上。几乎所有的主流服
务器都直接或通过插件支持Servlet。 5.安全性 Servlet是由Java编写的,所以它可以使用Java的安全框 架;ServletAPI被实现为类型安全的;容器也会对 Servlet的安全进行管理。

3.2 Servlet编程基础
Servlet架构由javax.servlet和javax.servlet.http两个 Java包组成。在javax.servlet包中定义了所有的Servlet类 都必须实行或扩展的通用接口和类。 在javax.servlet.http包中定义了采用http通信的 HttpServlet类。

所有的Servlet 对象都要实现Servlet 接口。已经实
现了Servlet 接口的javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 这两个抽象类的子类来间

接实现Servlet 接口。

3.2.1 Servlet接口 用户编写的Servlet程序都必须实现javax.servlet.Servlet 接口,该接口是ServletAPI的核心,在这个接口中有5

个方法必须实现。
(1) init()方法 (2) service()方法

(3) destroy()方法
(4) getServletConfig()方法 (5) getServletInfo()方法 下面进行详细介绍。

(1) init()方法

格式 :public void init(ServletConfig config) throws
ServletException 说明:该方法用于初始化一个Servlet类实例,并将其 加载到内存中。接口规定对任何Servlet实例,在一个 生命周期中此方法只能被调用一次。如果此方法没有 正常结束就会抛出一个ServletException异常, 而 Servlet不再执行。随后对它的调用会由Servlet容器对它 重新载入并再次运行该方法。

(2) service()方法

格式:public void service(ServletRequest
req,ServletResponse res) throws ServletException,IOException 说明:Servlet成功初始化后该方法会被调用,用于处 理用户请求。该方法在Servlet生命周期中可执行很多 次,每个用户的请求都会执行一次service()方法,完成 与相应客户端的交互。

(3) destroy()方法

格式:public void destroy()
说明:该方法用于终止Servlet服务,销毁一个Servlet实 例。 (4) getServletConfig()方法 格式:public ServletConfig getServletConfig()

说明:该方法可获得ServletConfig对象,里面包含该
Servlet的初始化信息,如初始化参数和ServletContext 对象。

(5) getServletInfo()方法

格式:public String getServletInfo()
说明:此方法返回一个String对象,该对象包含Servlet 的信息,例如开发者、创建日期、描述信息等。 上述方法中的init()、service()、destroy()方法是 Servlet的生命周期方法,由Servlet自动调用,如当服务 器关闭时,就会自动调用destroy()方法。

实际上,Servlet为用户提供了两个更适用于编程的

抽象类javax.servlet.GenericServlet 和
javax.servlet.http.HttpServlet,这两个抽象类间接实现了 Servlet 接口。

GenericServlet抽象类继承了Servlet接口并实现了
javax.servlet.Servlet接口中除了service()方法以外的其他 所有方法,这样用户只需实现一个service()方法即可。 HttpServlet抽象类则是针对http协议而定义的,是 GenericServlet类的子类,它仅支持基于http协议的请求

或响应。具体的方法详见下节。

程序示例

例3.1:实现网页版的HelloWorld程序。
运行结果:

程序代码

程序说明:

这个HelloWorld类,继承了HttpServlet接口。而
HttpServlet是一个实现了Servlet接口的类,所以这个 Servlet就间接地实现了Servlet的接口,从而可以使用接 口提供的服务。 这个程序中的doGet()方法就是具体的功能处理 方法,这个方法可以对以get方法发起的请求进行处理, 在这里这个方法的功能就是输出一个HTML页面。 本例中并没有出现具体的init()方法和destroy()

方法,而是由Servlet容器以默认的方式对这个Servlet进
行初始化和销毁动作。

3.2.2 Servlet程序的编译

在例3-1程序中,引入了三个包:java.io包、
javax.servlet包和javax.servlet.http包,其中后两个包不 是j2se的标准包,而是扩展包。在Tomcat安装目录的lib 文件夹下,有一个servlet-api.jar,这就是需要的包。 在环境变量的classpath中添加这个jar包后就可以正 常编译了。编译成功后会生成一个HelloWorld.class文 件。

3.2.3 Servlet的配置

Servlet编译完以后不能直接运行,还需要存放在指
定位置,并在web.xml文件中进行配置。在这里以 Tomcat为Servlet应用服务器为例进行介绍。 1.Servlet的存放 将Servlet编译成功后生成的.class文件按要求放在

Tomcat安装目录的指定位置,在本例中将
HelloWorld.class文件放在Tomcat安装目录下的 webapps/ROOT/WEB-INF/classes目录下(如果不存在

classes目录可新建一个)。

2.Servlet的配置

编辑webapps/ROOT/ WEB-INF目录下的web.xml文件
(如该文件不存在则新建): web.xml文件内容 说明: 在该配置文件中<servlet>和<servlet-mapping>标识用于

对Servlet进行配置,这个配置信息可以分为两个部分,
第一部分是配置Servlet的名称和对应的类,第二部分 是配置Servlet的访问路径。

<servlet>:对每个Servlet进行说明和定义。

<description>是对Servlet的描述信息,<display-name>
是发布时Servlet的名称,这两项在配置是可省略。 <servlet-name>是这个Servlet的名称,这个名字可以任 意命名,但是要和<servlet-mapping>节点中的<servletname>保持一致。 <servlet-class>是Servlet对应类的路径,在这里要注意, 如果有Servlet带有包名,一定要把包路径写完整,否 则Servlet容器就无法找到对应的Servlet类。

<init-param>用于对Servlet初始化参数进行设置(没有

可省略)。在这里指定了两个参数:
参数user的值为alex,参数address的值为 http://www.hrbust.edu.cn。这样以后要修改用户名和地 址时就不需要修改Servlet代码,只需修改配置文件。 对这些初始化参数的访问可以在init()方法体中通 过getInitParameter()方法进行获取。 <load-on-startup>用于指定容器载入Servlet时的优先顺 序。如果Servlet没有设定<load-on-startup>载入优先级,

则Servlet容器会在这个Servlet被访问时再进行初始化。

<servlet-mapping>:是对Servlet的访问路径进行映射。

<servlet-name>是这个Servlet的名称,要和<servlet >节
点中的<servlet-name>保持一致。 <url-pattern>定义了Servlet的访问映射路径,这个路径 就是在地址栏中输入的路径。 注意: <servlet>和<servlet-mapping>是成对出现,而且

Servlet容器中有多少个servlet类就需要配置多少次。

Servlet的执行过程:

首先根据在地址栏输入的路径信息找到<servletmapping>中<url-pattern>对应的<servlet-name>,再对应 找到<servlet>中该<servlet-name>对应的<servlet-class> 类,从而实例化该servlet并执行。 在本例中的<url-pattern>为/servlet/HelloWorld(此路径 为虚拟路径,通常的写法为/servlet/类名)所以在地址 栏中输入http://127.0.0.1:8080/servlet/HelloWorld

3.3 Servlet的生命周期
每个Servlet都有一个生命周期,该生命周期由创建 Servlet实例的Servlet容器进行控制。所谓Servlet生命周 期就是指Servlet容器创建Servlet实例后响应客户请求直 至销毁的全过程。 Servlet的生命周期可以分为四个阶段:类装载及实

例创建阶段、实例初始化阶段、服务阶段以及实例销
毁阶段。

创建 servlet 实 例

初始化servlet 实例

Servlet 可服务 状态

servlet 处 理 请 求并将结果返回 给客户端 (初始化失败) 销 毁 servlet

卸载

1.类装载及实例创建 默认情况下,Servlet实例是在接受第一次请求时进行

创建,而且对以后的请求进行复用。
如果Servlet实例需要在初始化时完成一些复杂的工作, 可以通过配置在服务器启动时就创建实例:声明servlet 标签中添加<load- on-startup>1</load-on-startup>标签。 其中<load-on-startup>标记的值必须为数值类型,表示 Servlet的装载顺序,取值及含义如下: 正数或零:该Servlet必须在应用启动时装载,容器必 须保证数值小的Servlet先装载

2.初始化Servlet 实例init() 一旦Servlet实例被创建,将会调用Servlet的

init(ServletConfig config)方法。init()方法在整个Servlet
生命周期中只会调用一次,如果初始化成功则进入可 服务状态,准备处理用户的请求,否则卸载该servlet实

例。
在init()方法中包含了一个参数config,主要用于传递 Servlet的配置信息,比如初始化参数等,该对象由服 务器进行创建。

3.服务 services() 一旦Servlet实例成功创建并且初始化,该Servlet实例

就可以被服务器用来服务于客户端的请求并生成响应。
在服务阶段,应用服务器会调用该实例的 service(ServletRequest request, ServletResponse response)

方法,其中request对象和response对象由服务器创建并
传给Servlet实例。request对象封装了客户端发往服务器 端的信息,response对象封装了服务器发往客户端的信 息。

4.销毁 destory() 当Servlet容器将决定结束某个Servlet时,将会调用

destory()方法,在destory方法中进行资源释放。一旦
destory()方法被调用,Servlet容器将不会再发送任何请 求给这个实例。若Servlet容器需再次使用该Servlet,需

重新实例化该Servlet实例。

3.4 Servlet API常用接口和类
3.4.1 ServletConfig接口 属于javax.servlet包,是一个由Servlet容器使用的Servlet 配置对象,用于在Servlet执行init()初始化方法时向它 传递信息。

javax.servlet.ServletConfig接口的主要方法 方法名 方法说明

public String 返回包含指定初始化参数的值的 String, getInitParameter(String name) 如果参数不存在,则返回 null。

public Enumeration 以 String 对象的枚举形式返回 servlet 的 getInitParameterNames() 初始化参数的名称,如果 servlet 没有 初始化参数,则返回一个空的枚举对象。 public ServletContext 返 回 对 调 用 者 在 其 中 执 行 操 作 的 getServletContext() ServletContext 的引用。 public String getServletName() 返回当前Servlet实例的名称。

3.4.2 GenericServlet类 GernericServlet类属于javax.servlet包,用于定义一

般的、与协议无关的Servlet。
GenericServlet 实现了 Servlet 和 ServletConfig 接口, 用户可以直接继承 GenericServlet实现Servlet。

javax.servlet.GenericServlet类的主要方法
方法名 方法说明 public void destroy() Servlet容器调用该方法注销当前Servlet。 public void init(ServletConfig config) 由 servlet 容器调用,对servlet进行初始化。 throws ServletException public void init()throws ServletException 这是为用户重写 init 提供的便捷方法。用户不用重写 init(ServletConfig),只需重写此方法即可。 public void log(String msg) public void Throwable t) log(String 将有 servlet 名称的指定消息写入 servlet 日志文件。 msg为要写入的消息。 message, 将有 servlet 名称的给定 Throwable 异常的解释性消息 和堆栈跟踪写入 servlet 日志文件。 message 为描述错 误或异常的消息,t为产生的错误或异常。 由 servlet 容器调用,允许 servlet 响应某个请求。此 方法声明为抽象方法,因此子类必须重写它。

abstract public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException public ServletConfig getServletConfig() public ServletContext getServletContext() public String getServletInfo()

返回此 servlet 的 ServletConfig 对象。 返回对此 servlet 在其中运行的 ServletContext 的引用。 返回有关 servlet 的信息,比如作者、版本和版权等。 默认情况下,此方法返回一个空字符串。

由上表可见,用户只需重写service()方法即可实现 Servlet的编程,从而大大减少程序的代码量和复杂度。

例3.2:继承GenericServlet实现Servlet。
主要代码 运行结果:

3.4.3 ServletRequest接口 ServletRequest接口属于javax.servlet包,定义将客

户端请求信息提供给某个 servlet 的对象。
servlet 容器创建 ServletRequest 对象,并将该对象 作为参数传递给该 servlet 的 service 方法。

javax.servlet.ServletRequest接口的主要方法
方法名 public void setAttribute(String name, Object o) public Object getAttribute(String name) public Enumeration getAttributeNames() public void setCharacterEncoding(String env) public String getCharacterEncoding() public int getContentLength() public String getContentType() public String getLocalAddr() public ServletInputStream getInputStream() 方法说明 存储此请求中的属性。

以对象形式返回指定属性的值,如果不存在给 定名称的属性,则返回 null。
返回包含此请求可用属性的名称的枚举对象。 重写此请求正文中使用的字符编码的名称。必 须在使用 getReader() 读取请求参数或读取输入 之前调用此方法。否则,此方法没有任何效果。 返回此请求正文中使用的字符编码的名称。如 果该请求未指定字符编码,则此方法返回 null。 返回请求正文的长度(以字节为单位),如果 长度未知,则返回 -1。 返回请求正文的 MIME 类型,如果该类型未知, 则返回 null。 返回接收请求的接口的IP地址。 使用 ServletInputStream 以二进制数据形式获取 请求正文。

方法名

方法说明

public Locale getLocale()

基于 Accept-Language 头,返回客户端将用来接受内 容的首选 Locale。如果客户端请求没有提供 AcceptLanguage 头,则此方法返回服务器的默认语言环境。

public Enumeration getLocales() 返回 Locale 对象的枚举,这些对象以首选语言环境 开头,按递减顺序排列。

public String getLocalName()
public int getLocalPort() public String getParameter(String name) public Enumeration getParameterNames() public String[] getParameterValues(String name) public String getProtocol() public String getRemoteAddr() public String getRemoteHost() public int getRemotePort()

返回接收请求的IP的主机名。
返回接收请求的接口的IP端口号。 以字符串形式返回请求参数的值,如果该参数不存 在,则返回 null。 返回包含此请求中所包含参数的名称的 字符串对象 的枚举集合。 返回包含给定请求参数拥有的所有值的 字符串对象 数组,如果该参数不存在,则返回 null。 返回请求使用的协议的名称和版本。 返回发送请求的客户端或最后一个代理的IP地址。 返回发送请求的客户端或最后一个代理的完全限定 名称。 返回发送请求的客户端或最后一个代理的 IP 源端口。

例3.3:显示用户请求信息。 程序代码

运行结果:

3.4.4 ServletResponse接口 ServletResponse接口属于javax.servlet包,主要用于

向客户端发送信息。

javax.servlet. ServletResponse接口的主要方法
方法名 public int getBufferSize() 方法说明 返回用于该响应的实际缓冲区大小。如果未使用任何 缓冲,则此方法返回 0。 设置响应正文的首选缓冲区大小。

public void setBufferSize(int size) public String 返回用于此响应中发送的正文的字符编码 。 getCharacterEncoding() public void 设置将发送到客户端的响应的字符编码。 setCharacterEncoding(String charset) public String getContentType() 返回用于此响应中发送的 MIME 正文的内容类型。 public void setContentType(String type) public void setLocale(java.util.Locale loc) public java.util.Locale getLocale() public ServletOutputStream getOutputStream() public java.io.PrintWriter getWriter() 设置将发送到客户端的响应的内容类型。 设置响应的语言环境。

返回使用 setLocale 方法指定的此响应的语言环境。
返回到客户端的输出字节流。 返回到客户端的输出字符流。

3.4.5 HttpServlet类 HttpServlet类属于javax.servlet.http包,该类提供了 适用于 Web 站点的 HTTP Servlet 的抽象类。

HttpServlet 的子类至少必须重写一个方法,该方法
通常是以下这些方法之一: doGet,用于 HTTP GET 请求 。

doPost,用于 HTTP POST 请求 。
doPut,用于 HTTP PUT 请求 。 doDelete,用于 HTTP DELETE 请求 。

javax.servlet.http.HttpServlet类的主要方法
方法名
protected void doGet(HttpServletRequest req, HttpServletResponse resp) protected void doHead(HttpServletRequest req, HttpServletResponse resp) protected void doPost(HttpServletRequest req, HttpServletResponse resp) protected void doPut(HttpServletRequest req, HttpServletResponse resp) protected void doOptions(HttpServletRequest req, HttpServletResponse resp) protected void doTrace(HttpServletRequest req, HttpServletResponse resp) protected void service(HttpServletRequest req, HttpServletResponse resp) protected long getLastModified(HttpServletReques t req)

方法说明
由服务器调用(通过 service 方法),以允许 servlet 处理 GET 请求。 重写此方法用于支持 用户的GET 请求。 接收来自受保护 service 方法的 HTTP HEAD 请求并处理 该请求。 由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。 POST 方法允许一次将不限长度的数据发送 到 Web 服务器。 由服务器调用(通过 service 方法),以允许 servlet 处理 PUT 请求。 PUT 操作允许客户端将文件放在服务器上, 类似于通过 FTP 发送文件。 由服务器调用(通过 service 方法),以允许 servlet 处理 OPTIONS 请求。 OPTIONS 请求可确定服务器支持哪些 HTTP 方法,并返回相应的头。 由服务器调用(通过 service 方法),以允许 servlet 处理 TRACE 请求 接收来自 public service 方法的标准 HTTP 请求,并将它 们 分 发 给 此 类 中 定 义 的 doXXX 方 法 。 此 方 法 是 javax.servlet.Servlet#service 方法的特定于 HTTP 的版本。 返回上次修改 HttpServletRequest 对象的时间.

3.4.6 HttpServletRequest接口 HttpServletRequest接口属于javax.servlet.http包,其

继承了ServletRequest接口,但只支持HTTP协议。
servlet 容器创建 HttpServletRequest 对象,并将该 对象作为参数传递给 servlet的service 方法(doGet、

doPost,等等)。

javax.servlet.http. HttpServletRequest接口的主要方法
方法名
public Cookie[] getCookies()

方法说明
返回客户端一起发送的所有 Cookie 对象的数组。

public long getDateHeader(String name) public String getHeader(String name)
public Enumeration getHeaderNames()

以表示 Date 对象的 long 值的形式返回指定请求头的值。
返回指定请求头的值。 返回此请求包含的所有头名称的枚举。

public Enumeration getHeaders(String name) public int getIntHeader(String name)
public String getMethod() public String getPathInfo() public String getQueryString()

返回指定请求头的所有值。
以 int 的形式返回指定请求头的值。 返回用于发出此请求的 HTTP 方法的名称。 返回与客户端发出此请求时发送的 URL 相关联的额外路 径信息。 返回包含在请求 URL 中路径后面的查询字符串。

public String getRequestedSessionId()
public String getRequestURI() public HttpSession getSession() public String getContextPath()

返回客户端指定的会话 ID。
返回此请求的 URL 的一部分,从协议名称一直到 HTTP 请求的第一行中的查询字符串。 返回与此请求关联的当前会话,如果该请求没有会话, 则创建一个会话。 返回请求 URI 指示请求上下文的那一部分。

例3.4:显示HTTP请求头的信息。 程序代码

运行结果:

3.4.7 HttpServletResponse接口 HttpServletResponse接口属于javax.servlet.http包,

其继承了ServletResponse接口,但只支持HTTP协议。

javax.servlet.http. HttpServletResponse的主要方法
方法名 public void addCookie(Cookie cookie) public void addHeader(String name, String value) public void addIntHeader(String name, int value) public boolean containsHeader(String name) public String encodeRedirectURL(String url) public void sendRedirect(String location) throws java.io.IOException 方法说明 将指定 cookie 添加到响应。 用给定名称和值添加响应头。此方法允许 响应头有多个值。 用给定名称和整数值添加响应头。此方法 允许响应头有多个值。 返回一个 boolean 值,指示是否已经设置 指定的响应头。 对指定 URL 进行编码。 使用指定重定向位置 URL 将临时重定向 响应发送到客户端。

public void setHeader(String name, String 用给定名称和值设置响应头。如果已经设 value) 置了头,则新值将重写以前的值。

public void setIntHeader(String name, int value)
public void setStatus(int sc)

用给定名称和值设置响应头。如果已经设 置了头,则新值将重写以前的值。
设置此响应的状态代码。

3.5 Servlet的应用举例
程序功能:用户登录的身份验证。 程序模块:程序共分3个部分 用户登录页面login.html 登录页面验证码生成类CheckCodeServlet.class 用户身份验证类LoginServlet.class。

(1)用户登录页面login.html 在这个登录页面中,只包含三项内容:用户名、密码

和验证码。其中验证码由CheckCodeServlet.class类自动
生成。

(2)验证码生成类CheckCodeServlet.class 该类用于在登录页面生成一个由4个数字或字符组成的

验证码图片。
设计思想:首先在一个由数字和字母组成的字符串中 随机获取4个字符形成验证码字符串;然后利用 drawString()方法将验证码字符串画到图像对象上; 将这个对象用write()方法输出到客户端。同时将验 证码字符串放入到session中,以便在身份验证页面进 行验证码的一致性比较。 需要注意的是:在输出时,要将ContentType设置为

“image/jpeg”类型,同时将Cache设为“no-cache”。

(3)用户身份验证类LoginServlet.class 该类用于对登录页面提交的信息进行验证。

为了降低程序复杂度,待验证的用户信息没有从数据
库中进行获取,而是以类的初始化参数方式进行传递 。运行结果如图所示:

习题
1.什么是JavaServlet,其有何特点。 2.JavaServlet有哪几个生命周期。请简述JavaServlet的 注册过程。 3.JavaServlet针对HTTP协议提供的专门类和接口有哪 些。



更多相关文章:
初一上册第3章练习题
初一上册第3章练习题_初一数学_数学_初中教育_教育专区。初一上册第3章练习题 七年级数学《实数》 七年级数学《实数》练习题一、判断题(1 分×10=10 分) 1....
会计学第3章 筹资
会计学第3章 筹资_经济学_高等教育_教育专区。第三章一、思考题(教材) 思考题(教材) 资金筹集业务的核算 1. 我国实行资本金制度的主要内容是什么; 2. 短期...
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初...
3.1.3 监听器中的方法会在特殊事件发生时被调用 3.2 事件源 3.2.1 javaweb 域 ServletContext 生命周期监听 ServletContextListener void # contextInitialized(...
JavaWeb_程序设计_习题参考答案(第1-6章)
JavaWeb_程序设计_习题参考答案(第1-6章)_理学_高等教育_教育专区。javaweb ...所以 Servlet 的效率更高 3、下列关于 Servlet 的编写方式正确的是___(多选)...
什么是servlet
Java Servlet的主要功能... 1页 免费 第三章 Servlet 33页 1下载券喜欢...什么是 Servlet Servlet 是用 Java 编写的 Server 端程序,它与协议和平台无关...
jsp
复习 第1章:概述 掌握: 1.JSP 的含义: JSP 是在 Servlet 的基础上开发的...()方法) 有一个无参数的构造方法 3.JavaBean 的应用(重要) 动作标签<jsp:...
三Servletjava面试题
三Servletjava面试题_面试_求职/职场_实用文档。java面试题三 三、J2EE 之 Servlet 基础知识 1、什么是 Servlet?它有哪些特点? Servlet 是 J2EE 应用框架中部署...
毕业论文
第 1 页 第 1 章 系统开发背景及意义 1.1 课题背景和意义目前网上人才招聘...页面被编译成 第 3JavaServlet 类,并驻留在服务器内存中,这样以后调用该...
java试题
Java语言能实现的功能,Servlet基本都能实现 ABDE (3)Servlet的生命周期包括下列...多个Servlet E 第9章Servlet 常用接口 一、选择题: (1)下列关于ServletConfig...
JAVA WEB 基础考试题
一、 填空题(每空 2 分,共 30 分) 1、在 tomcat 上发布 javaweb 应用时....ServletContext d) javax.servlet.Servlet 、 编程题(共 40 分) 1、第一...
更多相关标签:
java servlet 3    java servlet    java servlet教程    jsp servlet javabean    java servlet 配置    java jsp servlet    java web servlet    java servlet例子    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图