`
chenzehe
  • 浏览: 538125 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Servlet

 
阅读更多

1、 Java Servlet是一种使用 Java 编写的 CGI 程序, 是位于Web  服务器内部的服务器端的 Java 应用程序,与传统的从命令行启动的 Java 应用程序不同, Servlet Web 服务器进行加载,该 Web 服务器必须包含支持 Servlet Java 虚拟机 在通信量大的服务器上, Java Servlet 的优点在于它们的执行速度更快于CGI 程序。各个用户请求被激活成单个程序中的一个线程, 而无需 创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。 常见的 Java Servlet容器有 Tomcat Jetty Oracle Application  S erver Weblogic  S erver Jboss

      在Servlet中可以控制html代码的输出,所有的html代码输出都必须使用out.println();一行一行进行输出。

 

2、 Java Servlet架构

 

3、 Servlet的生命周期

初始化:init()

只执行一次,默认情况下第一次使用该Servlet 程序时进行初始化,也可以在服务器启动时通过配置 web.xml 文件让它在程序启动时初始化: <load-on-start>1</load-on-start>

服务:doGet() doPost()

可多次调用

销毁:destroy()

服务器关闭时或此Server 长时间不用时执行

 

 

4、 Servlet程序基本结构


package com.xxx.xxx

import java.io.* ;

import javax.servlet.* ;

import javax.servlet.http.* ;

public class xxx extends HttpServlet

{

// 初始化

public void init(ServletConfig config) throws ServletException{

}

// 表示处理 get 请求

public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException{
    PrintWriter out = resp.getWriter();
    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>HELLO WORLD</TITLE>");
    out.println("</HEAD>");
    out.println("<BODY>");
    out.println("<H1>hello world!!</H1>");
    out.println("</BODY>");
    out.println("</HTML>");
    out.close();
}

// 处理 post 请求

public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException{

}

// 销毁

public void destroy(){

}

} 
 

 

Servlet直接继承 HttpServlet 类,在 doGet() doPost() 方法中写入相应服务代码,并在 web.xml 文件中配置 Servlet 的访问路径,如:

<servlet>

<servlet-name>xxx</servlet-name><!--Servlet名字 -->

<servlet-class>com.xxx.xxx.xxx</servlet-class><!--Servlet所对应的类 -->

</servlet>

<servlet-mapping>

<servlet-name>xxx</servlet-name><!--上面定义的 Servlet 名字 -->

<url-pattern>/yyy</url-pattern><!--URL地址应射,必须有 /-->

</servlet-mapping>

多个servlet-mapping 可以映射到同一个 servlet

Servlet有两个初始化方法:

init():不需要传递参数时使用

init(ServletConfig config):需要传递参数时使用,如果有此方法,则上面的方法不起使用。

 

// 初始化

// 要取得初始化参数,必须使用以下初始化方法

public void init(ServletConfig config) throws ServletException{

// config对象中有取得初始化参数的方法: getInitParameter(" 参数名称 ")

String ref1 = config.getInitParameter("xxx") ;

}

<servlet>

<servlet-name>param</servlet-name>

<servlet-class>com.xxx.xxx.xxx</servlet-class>

<load-on-startup>0</load-on-startup>

<init-param>

<param-name>xxx</param-name>

<param-value>vvv</param-value>

</init-param>

</servlet>

在表单提交数据中,method get 时执行对应的 doGet() 方法,为 post 时,执行对应的 doPost() 方法。

在编译Servlet程序时,可能会提示找不到Servlet包,因为Servlet包不是JDK提供的,它属于J2EE包而不是J2SE,所以需要单独放到classpath目录中。

 

5 load-on-startup

load-on-startup元素标记容器是否在启动的时候就加载这个 servlet( 实例化并调用其 init() 方法。它的值必须是一个整数,表示 servlet 应该被载入的顺序 当值为0 或者大于 0 时,表示容器在应用启动时就加载并初始化这个 servlet 当值小于0 或者没有指定时,则表示容器在该 servlet 被选择时才会去加载。正数的值越小,该 servlet 的优先级越高,应用启动时就越先加载。当值相同时,容器就会自己选择顺序来加载。

 

6、JSP和Servlet的关系

JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。

     由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在 Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控 制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。

    从表面上看,JSP页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。事实上,JSP是Servlet的一种特殊形式,每个JSP页面 就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使 用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。对于Tomcat而 言,JSP页面生成的Servlet放在work路径对应的Web应用下。

   看下面一个简单的JSP页面:

<!--  表明此为一个JSP页面 -->
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <TITLE>第一个JSP页面</TITLE>
    </HEAD>
    <BODY>
        <!--  下面是Java脚本-->
        <%
            for(int i = 0 ; i < 10; i++)
            {
                out.println(i);
        %>
        <br>
        <%}%>
    </BODY>
</HTML>
 当启动Tomcat之后,可以在Tomcat的Catalinalocalhostjsptestorgapachejsp目录下找到如下文件(假如 Web应用名为jsptest,上面JSP页的名为test1.jsp):test1_jsp.java和test1_jsp.class。这两个文件都 是Tomcat生成的,Tomcat根据JSP页面生成对应Servlet的Java文件及class文件。

    下面是test1_jsp.java文件的源代码,这是一个特殊的Java类,是一个Servlet类:

   //JSP页面经过Tomcat编译后默认的包
    package org.apache.jsp;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    //继承HttpJspBase类,该类其实是个Servlet的子类
    public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase
         implements org.apache.jasper.runtime.JspSourceDependent{
         private static java.util.Vector _jspx_dependants;
         public java.util.List getDependants() {
             return _jspx_dependants;
         }

         //用于响应用户的方法
         public void _jspService(HttpServletRequest request,
            HttpServletResponse response)
            throws java.io.IOException, ServletException{
             //获得页面输出流
             JspFactory _jspxFactory = null;
             PageContext pageContext = null;
             HttpSession session = null;
             ServletContext application = null;
             ServletConfig config = null;
             //获得页面输出流
             JspWriter out = null;
             Object page = this;
             JspWriter _jspx_out = null;
             PageContext _jspx_page_context = null;
             //开始生成响应
             try {
                 _jspxFactory = JspFactory.getDefaultFactory();
                //设置输出的页面格式
                response.setContentType("text/html; charset=gb2312");
                pageContext = _jspxFactory.getPageContext(this, request,response, null, true, 8192, true);
            _jspx_page_context = pageContext;
            application = pageContext.getServletContext();
            config = pageContext.getServletConfig();
            session = pageContext.getSession();
            //页面输出流
            out = pageContext.getOut();
            _jspx_out = out;
            //输出流,开始输出页面文档
            out.write("rn");
            //下面输出HTML标签
            out.write("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
            Transitional//EN">rn");
            out.write("<HTML>rn");
            out.write("<HEAD>rn");
            out.write("<TITLE>first Jsp</TITLE>rn");
            out.write("</HEAD>rn");
            out.write("<BODY>rn");
            //页面中的循环,在此处循环输出
            for(int i = 0 ; i < 10; i++){
             out.println(i);
             out.write("rn");
             out.write("<br>rn");
            }
            out.write("rn");
            out.write("</BODY>rn");
            out.write("</HTML>rn");
            out.write("rn");
           }catch (Throwable t){
            if (!(t instanceof SkipPageException)){
               out = _jspx_out;
               if (out != null && out.getBufferSize() != 0)
                 out.clearBuffer();
               if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
            }
          }
           finally{
           if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
          }
      }
    }
 

    根据上面的JSP页面工作原理图,可以得到如下四个结论:

    —  JSP文件必须在JSP服务器内运行。

    —  JSP文件必须生成Servlet才能执行。

    — 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

    —  JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。

 

    JSP和Servlet会有如下转换:

    - JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。

    - JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。

    - JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。

    - 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。

 

7、在servlet中使用jsp页面

在日常开发中,为了实现后台业务代码和前台展示代码分开,在servlet中处理完业务后把处理结果保存到request对象中,在jsp页面中显示,如下代码:

request.setAttribute("xxx", yyy);//保存值的范围是服务器请求范围: request
//Stores an attribute in this request. Attributes are reset between requests. This method is most often used in conjunction with RequestDispatcher. 

request.getRequestDispatcher("WEB-INF/jsp/index.jsp").forward(request,
				response);//RequestDispatcher.forward()跳转是报务器端跳转
 

 

分享到:
评论

相关推荐

    Java Servlet API 2.5

    Java Servlet API 2.5是Java Web开发中的一个重要组成部分,它是Java服务器端程序与Web应用程序交互的核心接口。这个API定义了一系列用于处理HTTP请求和响应的类和接口,为开发动态、交互式的Web应用提供了基础。在...

    JAVA servlet 编程指南

    **JAVA Servlet 编程指南** Java Servlet是一种Java技术,用于扩展服务器的功能,特别是在Web应用程序中。Servlet是Java EE(企业版)的一部分,它允许开发者创建动态、交互式的Web服务。Servlet容器,如Tomcat,...

    Java Servlet详细讲解

    Java Servlet是一种基于Java技术的服务器端组件,用于创建动态web应用程序。SUN公司(现在是Oracle)开源的Servlet规范使得开发者能够用Java语言编写能够处理HTTP请求的服务端程序。Servlet在Web开发中扮演着核心...

    java servlet jar包

    Java Servlet是Java编程语言中用于开发服务器端应用程序的API,主要用于构建动态Web应用程序。Servlet是Java EE(Enterprise Edition)的一部分,它允许开发者扩展Web服务器的功能,处理HTTP请求并返回响应。在Java ...

    JAVA SERVLET 高级编程

    **JAVA SERVLET 高级编程** 在Java Web开发领域,Servlet是不可或缺的一部分,它为开发者提供了处理HTTP请求的能力。本教程将深入探讨Java Servlet在处理多媒体信息、集成Java Server Pages (JSP)技术、实现Servlet...

    Java Servlet Api文档

    在Java Servlet API 2.5版本中,包含了对Servlet、Filter、Listener等关键概念的详细描述,以及它们在Web应用程序中的应用方式。 1. **Servlet接口**:Servlet是Java中处理网络请求的基础,它定义了web服务器如何与...

    深入 Java Servlet 网络编程

    1.1 Servlet 定义:Servlet 是 Java 类,遵循 javax.servlet.Servlet 接口,用于接收和响应来自客户端(如浏览器)的请求。它们是服务器端的组件,主要用来生成动态内容。 1.2 Servlet 生命周期:包括加载、初始化...

    JavaServlet示例代码

    在这个"JavaServlet示例代码"中,我们可能会看到以下关键点: 1. **注册功能**: - 用户信息可能被存储在一个数据库中,因此需要与数据库的交互。这通常通过JDBC(Java Database Connectivity)实现,包括加载...

    java Servlet学习笔记

    Java Servlet是Java编程语言中用于处理Web服务器与客户端交互的一种技术,主要应用于构建动态Web应用程序。Servlet是Java EE(企业版)的一部分,它允许开发者在服务器端创建强大的、可扩展的网络应用程序。以下是对...

    Java Servlet API说明文档.doc

    Java Servlet API是Java Web开发的核心组件,用于创建和管理服务器端的动态Web应用程序。这个API定义了一组接口和类,允许开发者编写能够处理HTTP和其他网络协议的Java程序,这些程序通常被称为Servlets。Servlets是...

    Java Servlet Specification__ Version 2.3

    Java Servlet Specification Version 2.3 是一份详细的文档,它定义了Java Servlet技术的规范,用于创建Web应用程序。Servlet是一种基于Java的服务器端组件,由Web容器管理,用于生成动态内容。这个规范是Java 2平台...

    深入java servlet 网络编程

    Java Servlet 是Java平台上的一个核心技术,用于构建动态web应用程序。它是一个服务器端的API,提供了处理HTTP请求和响应的功能,使得开发者可以扩展web服务器的能力,实现与客户端的交互。本篇文章将深入探讨Java ...

    JAVA SERVLET帮助文档(API)

    Servlet API是Java Servlet的核心部分,提供了一系列的接口和类,供开发者用来构建可部署在Web服务器上的Java应用程序。这篇帮助文档详细阐述了这些接口和类的使用方法、功能以及它们之间的关系。 在Servlet API中...

    JavaServlet帮助文档

    JavaServlet帮助文档中的CHM文件是一个编译过的HTML帮助文档,它包含详细的API参考、教程、示例代码和常见问题解答,是开发者学习和查阅Servlet技术的重要资源。利用其内置的搜索功能,开发者可以快速找到所需的信息...

    javaservlet帮助文档

    在本文中,我们将深入探讨Java Servlet的相关知识点,包括其概念、工作原理、生命周期、请求和响应处理,以及如何在实际开发中使用。 ## 1. Java Servlet 概念 Java Servlet 是一个Java类,它遵循Servlet API规范,...

    深入Java Servlet 网络编程

    Java Servlet是Java平台上的一个核心技术,主要用于构建动态web应用程序。Servlet是服务器端的Java小程序,它接收并响应来自客户端(通常是web浏览器)的请求,处理数据,然后返回响应。在深入理解Java Servlet网络...

    Java Servlet开发与实例

    Java Servlet是Java EE平台中的核心组件之一,用于构建动态web应用程序。Servlet是一个Java类,它扩展了服务器的功能,处理来自客户端(通常是web浏览器)的请求并返回响应。本教程将深入探讨Java Servlet的基础知识...

    Java Servlet Programming

    Java Servlet Programming是O'Reilly出版的一本关于Java Servlet编程的书籍,涵盖了Java Servlet的基础知识和高级主题。 本书共分为十四章,涵盖了Java Servlet的基础知识、Java Servlet的架构、Servlet生命周期、...

    Java Servlet API说明文档

    Java Servlet API是Java Web开发中的核心组件之一,它为服务器端的动态网页处理提供了标准的接口和类。这个API说明文档详细阐述了如何利用Java来构建动态、交互式的Web应用程序。下面将对Java Servlet API的一些关键...

Global site tag (gtag.js) - Google Analytics