Servlet知识小结

来源:互联网 发布:淘宝买家用假货换真货 编辑:程序博客网 时间:2024/06/18 13:53
Servlet  入门:

应用:

• Servlet 是一种 独立于平台和协议 的 服务器端的 Java 应用程序 ,可以生成 动态的 web 页面(所谓动态网页,就是在不同时刻或不同条件下访问 Web 服务器上的同一个页面时,浏览器会获得不同的内容。

• ) 。它担当 Web 浏览器或其他 http 客户程序发出请求、与 http 服务器上的数据库或应用程序之间交互的中间层。

• 主要内容 :Web 应用程序开发过程、 Servlet 的运行原理、 Servlet 的生命周期等。

开发过程:

• 开发 Java Web 应用程序的大致流程

– 设计目录结构:根据具体业务需要,遵照规范的目录结构设计好 Web 应用程序的目录结构。

– 编写 Web 应用程序代码:编写业务逻辑所需的 Java 代码。

– 编写部署描述文件:把 Servlet 、初始化参数等定义到部署描述文件 web.xml 中。

– 编译代码:把编写好的 Java 源代码编译成字节码。

– 将 Web 应用程序打包:把整个 Web 应用程序打成 War 包,以方便部署。

– 部署 Web 应用程序:把打好的 War 包部署到 Web 服务器上。

• 执行 Web 应用程序:启动 Web 服务器,利用客户端浏览器进行访问测试。

注意:在具体的开发过程中,一般都会使用 IDE 工具,使用 IDE 工具进行 Web 应用程序开发时,只需要开发人员完成前三个步骤,其他步骤 IDE 工具可以自动完成。

案例:

1. 在 web 工程下的 web-inf 目录下的 classes 目录中编写一个 FirstServlet 类,实现 GenericServlet 接口

package cn.itcast;

import java.io.*;

import javax.servlet.*;

public class FirstServlet extendsGenericServlet{

publicvoid service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException{

OutputStreamout = res.getOutputStream();

out.write("Firstservlet".getBytes());

}

}

2. 启动命令行窗口,把 servlet 开发包导入到 classpath 中

set classpath=%classpath%;C:\apache-tomcat-6.0.20\lib\servlet-api.jar

3. 编译: javac -d . FirstServlet.java

4. 在 web.xml 文件中把编译后的 servlet 配置到服务器中,并为它配置对外访问路径

<?xml version="1.0"encoding="ISO-8859-1"?>

<web-appxmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

<servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>cn.itcast.FirstServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>/xxx</url-pattern>

</servlet-mapping>

</web-app>

5. 启动 tomcat 和 ie, 访问:

简介:

• Servlet 是使用 Java Servlet 应用程序设计接口及相关类和方法的 Java 程序。它在 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。 Servlet 装入 Web 服务器并在 Web 服务器内执行。

• Servlet 是以 Java 技术为基础的服务器端应用程序组件, Servlet 的客户端可以提出请求并获得该请求的响应,它可以是任何 Java 程序、浏览器或任何设备。

运行过程:

• Servlet 程序是由 WEB 服务器调用, web 服务器收到客户端的 Servlet 访问请求后:

① Web 服务器首先检查是否已经装载并创建了该 Servlet 的实例对象。如果是,则直接执行第④步,否则,执行第②步。

② 装载并创建该 Servlet 的一个实例对象。

③ 调用 Servlet 实例对象的 init() 方法。

④ 创建一个用于封装 HTTP 请求消息的 HttpServletRequest 对象和一个代表 HTTP 响应消息的 HttpServletResponse 对象,然后调用 Servlet 的 service() 方法并将请求和响应对象作为参数传递进去。

⑤ WEB 应用程序被停止或重新启动之前, Servlet 引擎将卸载 Servlet ,并在卸载之前调用 Servlet 的 destroy() 方法。

生命周期

• 在代码中, Servlet 生命周期由接口 javax.servlet.Servlet 定义。所有的 Servlet 必须直接或间接地实现 javax.servlet.Servlet 接口,这样才能在 Servlet 容器中运行。 Servlet 提供 service 方法、 init 方法和 destroy 方法等。在 Servlet 的生命周期中,运行 javax.servlet.Servlet 接口中定义的这些方法,方法会在特定时间按照一定的顺序被调用

如何被加载和实例化

• Servlet 容器负责实例化和加载 Servlet ,这个过程可以在 Servlet 容器加载时执行,可以在 Servlet 响应请求时执行,也可以在两者之间的任何时候执行。

• Servlet 容器加载完 Servlet 之后,首先必须初始化它。初始化时 Servlet 调用 init() 方法,该方法可以以一个 ServletConfig 类型的引用为参数,该参数可以让 Servlet 从部署描述符文件中读取一些键值对形式的参数值,以初始化这些数据, ServletConfig 对象的引用还可以让 Servlet 接受 ServletContext 对象。

如何处理请求

• Servlet 被初始化以后,就处于能响应请求的就绪状态。每个 Servlet 都有一个请求的 Servlet Request 对象和响应的 Servlet Response 对象。

• Servlet 还可以实现 ServletRequest 和 ServletResponse 接口。 ServletRequest 接口可以让 Servlet 获取客户端请求中的参数,如 request 信息、协议类型等。 Servlet 可以从 ServletInputStream 流中读取 request 数据。 ServletResponse 接口允许 Servlet 设置 response headers 和 status codes 。实现这个接口可以使 Servlet 能访问 ServletOutputStream 流,用来向客户端返回数据。

package cn.csdn.com;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

public class servletdemo2 extendsHttpServlet {

publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

response.setContentType("text/html");

PrintWriterout = response.getWriter();

out.print("HellowServlet");

}

publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

}

<? xml version = "1.0" encoding = "UTF-8"?>

< web-app version = "2.4"

xmlns = "http://java.sun.com/xml/ns/j2ee"

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

< servlet >

< servlet-name > servletdemo </ servlet-name >

< servlet-class > cn.csdn.com.servletdemo </ servlet-class >

</ servlet >

< servlet >

< servlet-name > servletdemo2 </ servlet-name >

< servlet-class > cn.csdn.com.servletdemo2 </ servlet-class >

</ servlet >

< servlet-mapping >

< servlet-name > servletdemo </ servlet-name >

< url-pattern > /www </ url-pattern >

</ servlet-mapping >

< servlet-mapping >

< servlet-name > servletdemo2 </ servlet-name >

< url-pattern > servlet /servletdemo2 </ url-pattern >

</ servlet-mapping >

</ web-app >

1. 右击 new ,新建一个 Web 项目,勾选 J2EE 1.4. 继承 Genericservlet ,点击完成

2. 导入源文件, Tomcat crc 文件

3. 编写 JAVA 文件,配置 web.xml 文件,然后配置服务器,把 Tomcat 配置进去,

4. 利用配置好的服务启动程序,利用 IE 浏览器访问程序

还可以直接创建 servlet ,这样比较方便。

线程安全问题:

package cn.csdn.com;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class servletdemo2 extends HttpServlet {

private int count=0;

public void doGet(HttpServletRequestrequest, HttpServletResponse response)

throwsServletException, IOException {

Synchronized(this){ count++;

try {

Thread.sleep(1000);

} catch(InterruptedException e) {

// TODOAuto-generated catch block

e.printStackTrace();

}

response.getWriter().print(count);

}

}

public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

}

Config 对象:

package cn.csdn.com;

import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class servletdemo4 extends HttpServlet {

private ServletConfigconfig;

public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

/*String value =config.getInitParameter("data");

response.getWriter().print(value);*/

Enumeratione=this.getServletConfig().getInitParameterNames();

while(e.hasMoreElements()){

Stringparaname=(String) e.nextElement();

Stringvalue=this.getServletConfig().getInitParameter(paraname);

response.getWriter().println(paraname+"="+value);

}

}

public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

public voidinit(ServletConfig config) throws ServletException {

// TODOAuto-generated method stub

super.init(config);

this.config=config;

}

public void destroy() {

// TODOAuto-generated method stub

super.destroy();

}

}

线程安全问题:

package cn.csdn.com;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class servletdemo2 extends HttpServlet {

private int count=0;

public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

Synchronized(this){ count++;

try {

Thread.sleep(1000);

} catch (InterruptedExceptione) {

// TODOAuto-generated catch block

e.printStackTrace();

}

response.getWriter().print(count);

}

}

public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

}

Config 对象:

package cn.csdn.com;

import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class servletdemo4 extends HttpServlet {

private ServletConfigconfig;

public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

/*String value =config.getInitParameter("data");

response.getWriter().print(value);*/

Enumeratione=this.getServletConfig().getInitParameterNames();

while(e.hasMoreElements()){

Stringparaname=(String) e.nextElement();

Stringvalue=this.getServletConfig().getInitParameter(paraname);

response.getWriter().println(paraname+"="+value);

}

}

public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

public voidinit(ServletConfig config) throws ServletException {

// TODOAuto-generated method stub

super.init(config);

this.config=config;

}

public void destroy() {

// TODO Auto-generatedmethod stub

super.destroy();

}

}

原创粉丝点击