Servlet简介

一,什么是Servlet?  

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

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

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

2,能够创建 HTML Web 页面的动态部分,并嵌入到现有静态 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进行扩展.   Servlet API 由两个程序包组成   

 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

package com.qu.servlet;



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 LoginServlet extends HttpServlet {



	/**

	 * 

	 */

	private static final long serialVersionUID = 1L;

	

	public LoginServlet() {

		super();

	}



	@Override

	public void doGet(HttpServletRequest request, HttpServletResponse response)

			throws ServletException, IOException {

		

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

		request.setCharacterEncoding("gb2312"); 

		

		String userName = request.getParameter("user");

		String userPswd = request.getParameter("pswd");

		

		PrintWriter out = 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

	public void doPost(HttpServletRequest req, HttpServletResponse resp)

			throws ServletException, IOException {

		this.doGet(req, resp);

	}

	

	public boolean checkLogin(String userName, String userPswd)

	{

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

			

			return false;

		}

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

			return false;

		}else{

			return true;

		}

		

	}

}
 

login.jsp

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

<%

String path = request.getContextPath();

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

%>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'index.jsp' starting page</title>

	<meta http-equiv="pragma" content="no-cache">

	<meta http-equiv="cache-control" content="no-cache">

	<meta http-equiv="expires" content="0">    

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

	<meta http-equiv="description" content="This is my page">

	<!--

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

	-->

  </head>

  

  <body>

    <form action="login" method="post" > 

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

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

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

    </form>

  </body>

</html>

web.xml

<?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">

  <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>

  

  <!-- Servlet mapping -->

  <!-- login mapping-->

  <servlet-mapping>

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

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

  </servlet-mapping>

</web-app>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章