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 Web开发中的一个重要组成部分,它是Java服务器端程序与Web应用程序交互的核心接口。这个API定义了一系列用于处理HTTP请求和响应的类和接口,为开发动态、交互式的Web应用提供了基础。在...
**JAVA Servlet 编程指南** Java Servlet是一种Java技术,用于扩展服务器的功能,特别是在Web应用程序中。Servlet是Java EE(企业版)的一部分,它允许开发者创建动态、交互式的Web服务。Servlet容器,如Tomcat,...
Java Servlet是一种基于Java技术的服务器端组件,用于创建动态web应用程序。SUN公司(现在是Oracle)开源的Servlet规范使得开发者能够用Java语言编写能够处理HTTP请求的服务端程序。Servlet在Web开发中扮演着核心...
Java Servlet是Java编程语言中用于开发服务器端应用程序的API,主要用于构建动态Web应用程序。Servlet是Java EE(Enterprise Edition)的一部分,它允许开发者扩展Web服务器的功能,处理HTTP请求并返回响应。在Java ...
**JAVA SERVLET 高级编程** 在Java Web开发领域,Servlet是不可或缺的一部分,它为开发者提供了处理HTTP请求的能力。本教程将深入探讨Java Servlet在处理多媒体信息、集成Java Server Pages (JSP)技术、实现Servlet...
在Java Servlet API 2.5版本中,包含了对Servlet、Filter、Listener等关键概念的详细描述,以及它们在Web应用程序中的应用方式。 1. **Servlet接口**:Servlet是Java中处理网络请求的基础,它定义了web服务器如何与...
1.1 Servlet 定义:Servlet 是 Java 类,遵循 javax.servlet.Servlet 接口,用于接收和响应来自客户端(如浏览器)的请求。它们是服务器端的组件,主要用来生成动态内容。 1.2 Servlet 生命周期:包括加载、初始化...
在这个"JavaServlet示例代码"中,我们可能会看到以下关键点: 1. **注册功能**: - 用户信息可能被存储在一个数据库中,因此需要与数据库的交互。这通常通过JDBC(Java Database Connectivity)实现,包括加载...
Java Servlet是Java编程语言中用于处理Web服务器与客户端交互的一种技术,主要应用于构建动态Web应用程序。Servlet是Java EE(企业版)的一部分,它允许开发者在服务器端创建强大的、可扩展的网络应用程序。以下是对...
Java Servlet API是Java Web开发的核心组件,用于创建和管理服务器端的动态Web应用程序。这个API定义了一组接口和类,允许开发者编写能够处理HTTP和其他网络协议的Java程序,这些程序通常被称为Servlets。Servlets是...
Java Servlet Specification Version 2.3 是一份详细的文档,它定义了Java Servlet技术的规范,用于创建Web应用程序。Servlet是一种基于Java的服务器端组件,由Web容器管理,用于生成动态内容。这个规范是Java 2平台...
Java Servlet 是Java平台上的一个核心技术,用于构建动态web应用程序。它是一个服务器端的API,提供了处理HTTP请求和响应的功能,使得开发者可以扩展web服务器的能力,实现与客户端的交互。本篇文章将深入探讨Java ...
Servlet API是Java Servlet的核心部分,提供了一系列的接口和类,供开发者用来构建可部署在Web服务器上的Java应用程序。这篇帮助文档详细阐述了这些接口和类的使用方法、功能以及它们之间的关系。 在Servlet API中...
JavaServlet帮助文档中的CHM文件是一个编译过的HTML帮助文档,它包含详细的API参考、教程、示例代码和常见问题解答,是开发者学习和查阅Servlet技术的重要资源。利用其内置的搜索功能,开发者可以快速找到所需的信息...
在本文中,我们将深入探讨Java Servlet的相关知识点,包括其概念、工作原理、生命周期、请求和响应处理,以及如何在实际开发中使用。 ## 1. Java Servlet 概念 Java Servlet 是一个Java类,它遵循Servlet API规范,...
Java Servlet是Java平台上的一个核心技术,主要用于构建动态web应用程序。Servlet是服务器端的Java小程序,它接收并响应来自客户端(通常是web浏览器)的请求,处理数据,然后返回响应。在深入理解Java Servlet网络...
Java Servlet是Java EE平台中的核心组件之一,用于构建动态web应用程序。Servlet是一个Java类,它扩展了服务器的功能,处理来自客户端(通常是web浏览器)的请求并返回响应。本教程将深入探讨Java Servlet的基础知识...
Java Servlet Programming是O'Reilly出版的一本关于Java Servlet编程的书籍,涵盖了Java Servlet的基础知识和高级主题。 本书共分为十四章,涵盖了Java Servlet的基础知识、Java Servlet的架构、Servlet生命周期、...
Java Servlet API是Java Web开发中的核心组件之一,它为服务器端的动态网页处理提供了标准的接口和类。这个API说明文档详细阐述了如何利用Java来构建动态、交互式的Web应用程序。下面将对Java Servlet API的一些关键...