您的位置:首页 > 其它

Servlet简介

2008-06-13 18:59 253 查看
一,什么是Servlet?

Servlet是用Java编写的服务器端程序模块,用以扩展WebServer的功能。Servlet被加载到Web服务器上,并在其中运行。Servlet使用HTTP服务器接收和响应客户机发出的请求。

二,Servlet能够执行哪些功能?

1,能够创建并返回整个HTMLWeb页面,根据客户请求的性质而具有动态内容。

2,能够创建HTMLWeb页面的动态部分,并嵌入到现有静态HTML页面中。

3,可以与服务器上的其他资源进行通信,包括数据库、其他Java应用程序、以及用其他语言编写的应用程序。

4,能够处理与多个Web客户机的连接,接收来自多个Web客户机的输入信息,并将结果广播到多个Web客户机。

5,能够打开对Web客户机上applet的个别连接,并保持连接处于打开状态,允许在这个单一连接上进行多种数据传递。这种效能使客户机和服务器能够容易地进行会话。

三,什么是Servlet组件

Servlet组件(即Servlet容器)实际是一个程序模块(Class文件),那么服务器在接收到客户发送的URL请求,就根据URL请求中的资源部分在服务器找到相应的Servlet组件资源然后装载到服务器并执行;这个过程是所有J2EE服务器都共有的标准过程。

四,Servlet的生命周期。

Servlet的生命周期由Servlet容器控制,由容器创建Servlet实例;

整个生命周期:

1,实例化:加载Servlet组件类,由容器创建Servlet实例;

2,初始化:执行init方法,初始化Servlet实例;

ServletConfig接口实现对象:向Servlet传递配置信息,包含Servlet初始化信息。以名-值对形式提供。Servlet使用ServletConfig接口与Servlet容器通信。通过getServletConfig方法获得当前ServletConfig接口实现对象。

3,服务:调用Servlet组件GenericServlet类的Service方法处理客户请求;

ServletRequest接口和ServletResponse接口的实现对象来处理请求和发送响应。

如果URL为GET请求则执行HttpServlet类的doGet方法;如果URL为POST请求则执行HttpServlet类的doPost方法;

4,释放:执行Destory方法释放Servlet实例资源;

五,Servlet体系结构和层次结构

1,Servlet体系结构

------请求--->------->------->

客户端HTTP服务器Servlet容器Servlet

<-----响应----<---------<-------

2,Servlet层次结构

Servlet是实现javax.servlet.Servlet接口的对象,大多数Servlet通过GenericServlet或HttpServlet进行扩展.ServletAPI由两个程序包组成

javax.servlet包

类:

ServletInputStream类:从客户端读取二进制数据;

ServletOutputStream类;向客户端发送二进制数据;

GenericServlet类:抽象类,定义了一个通用的,独立于底层协议的Servlet。

接口:

Servlet接口:管理Sevlet。定义实现Servlet的必须方法。一个Servlet必须实现Servlet接口或Servlet接口的扩展。

ServletConfig接口:Servlet初始化时,向Servlet传递配置信息。

ServletContext接口;Servlet上下文,使Servlet与其他的Servlet容器进行交互通信。

ServletRequest接口:向Servlet客户端提供请求信息

ServletResponse接口;Servlet向客户端提供响应信息。

javax.servlet.http包

类:

Cookie类

HttpServlet类:抽象类,继承自GenericServlet。应用于HTTP协议的请求和响应的Servlet。

接口:

HttpSession接口:

HttpAttributeListener接口:会话的属性监听接口;

HttpServletRequest接口;扩展ServletRequest接口,向Servlet客户端提供HTTP请求信息。

HttpServletResponse接口;扩展ServletResponse接口,Servlet向客户端提供HTTP响应信息。

总体可以分为:

Servlet类:实现具体协议的业务类,其目的是一个业务实现的WEB组件类;

Servlet接口:该接口独立于协议实现,其目的是为了定义服务器的组件标准;

GenericServlet抽象类:该类提供了一个独立于协议的实现,其目的是为了满足服务器;

HttpServlet:该类实现了HTTP协议,其目的是为了让客户程序扩展;

示例:登录处理,将表单提交给Servlet处理

LoginServlet.java

packagecom.qu.servlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassLoginServletextendsHttpServlet{

/**

*

*/

privatestaticfinallongserialVersionUID=1L;

publicLoginServlet(){

super();

}

@Override

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("text/html;charset=gb2312");

request.setCharacterEncoding("gb2312");

StringuserName=request.getParameter("user");

StringuserPswd=request.getParameter("pswd");

PrintWriterout=response.getWriter();

out.println("<html>");

out.println("<head><title>Login</title></head>");

out.println("<body>");

if(this.checkLogin(userName,userPswd)){

out.println("用户名为:"+userName);

out.println("欢迎您访问本网站!");

}else{

out.println("您的用户名或密码有误,请重新登录!");

}

out.println("</body>");

out.println("</html>");

out.close();

}

@Override

publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

this.doGet(req,resp);

}

publicbooleancheckLogin(StringuserName,StringuserPswd)

{

if(userName.equals("")||userName.length()>12||userName.length()<4){

returnfalse;

}

elseif(userPswd.equals("")||userPswd.length()>12||userPswd.length()<6){

returnfalse;

}else{

returntrue;

}

}

}


login.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

<title>MyJSP'index.jsp'startingpage</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="Thisismypage">

<!--

<linkrel="stylesheet"type="text/css"href="styles.css">

-->

</head>

<body>

<formaction="login"method="post">

用户名:<inputtype="text"name="user"/><BR/>

密码:<inputtype="password"name="pswd"><BR/>

<inputtype="submit"value="提交"/><inputtype="reset"value="重置"/>

</form>

</body>

</html>

web.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="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">
<welcome-file-list>

<welcome-file>login.jsp</welcome-file>

</welcome-file-list>

<!--Servlet-->

<!--login-->

<servlet>

<servlet-name>LoginServlet</servlet-name>

<servlet-class>com.qu.servlet.LoginServlet</servlet-class>

</servlet>

<!--Servletmapping-->

<!--loginmapping-->

<servlet-mapping>

<servlet-name>LoginServlet</servlet-name>

<url-pattern>/login</url-pattern>

</servlet-mapping>

</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: