Java Web基础(二)(Servlet编写与配置)

下面的内容都是基础的Servlet知识,如果你想打好基础,就别急着学习JSP,而是从Servlet开始学习。因为JSP页面最终会被转译为Servlet,掌握了Servlet,JSP也就学会了一半,而且在写JSP页面时也能更准确地定位错误。

开发环境的搭建我就不说了,百度一搜一大堆,说一下我的开发环境:MyEclipse + Tomcat 7.0 + JDK 7

编写一个基本的Servlet

我们使用最原始的方式编写一个Servlet,首先遇到建一个类,然后继承HttpServlet,并实现其中的某些方法。HttpServlet位于servlet-api.jar中,这个jar包是大名鼎鼎的web容器——Tomcat提供的,我们来看一下jar包里有啥:

下面是核心的类关系图:

通过这个类关系图我们知道,Servlet接口定义了基本行为,例如与Servlet生命周期有关的init()、destroy(),以及提供服务时调用的service()方法;然后抽象类GenericServlet实现了Servlet接口、ServletConfig接口,将容器调用init()方法时传入的ServletConfig实例封装起来,而service()方法直接标示为abstract而没有任何实现。

我们注意到GenericServlet没有规范任何有关HTTP的相关方法,而是由继承它的HttpServlet来定义,这也容易理解,因为不只有HTTP一种协议,还有FTP等其它协议。然后HttpServlet里面实现了service()方法,判断HTTP的请求方式并交给doGet、doPost等方法去处理,所以我们要在继承HttpServlet类时需要重写doGet或doPost方法。

在web.xml中注册Servlet程序

这是最传统的方式,首先我们需要写一个类并继承HttpServlet,重写相应的方法后,打开web.xml注册该Servlet,下面是一个注册Servlet的例子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<servlet>
		<description>该Servlet的描述信息</description>
		<display-name>显示的名称</display-name>
		<servlet-name>SimpleServlet</servlet-name>
		<servlet-class>com.web.SimpleServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>SimpleServlet</servlet-name>
		<url-pattern>/servlet/SimpleServlet</url-pattern>
	</servlet-mapping>
</web-app>

上面注册的意思是,用户可以通过”../servlet/SimpleServlet.view”来请求该Servlet,web容器会将该Servlet请求交给名称为SimpleServlet(由<servlet-name>匹配)的Servlet来处理,该Servlet对应的类是com.web.SimpleServlet。具体流程如下图所示:

这里需要注意的一点是,当应用程序启动后,默认情况下不会创建所有的Servlet实例。当这个Servlet第一次被请求时,他会被Web容器转译为Servlet并编译为.class文件,存放在指定目录中(具体啥目录由Web容器决定),并创建相应的实例,这个过程叫做Servlet的初始化;若以后再请求该Servlet,则不会触发转译和编译操作。如果想在应用程序启动时就进行编译和转译的操作,需要在web.xml中的<servlet>标签中,指定<load-on-startup>的值大于0(小于等于0为不随程序启动而初始化),其值的大小决定了初始化的顺序。

使用@WebServlet注册Servlet程序

在Servlet 3.0中,可以使用标注(Annotation)来告诉web容器哪些是需要注册的servlet,例如下面的例子:

这个例子等同于在web.xml中这样配置:

	<servlet>
		<servlet-name>HelloServlet</servlet-name>
		<servlet-class>com.web.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/hello.view</url-pattern>
	</servlet-mapping>

我们看到使用标注的形式比使用web.xml配置servlet简单多了,除此之外,@WebSevlet还可以配置name, urlPatterns(默认), loadOnStartup等,能在web.xml中配置的,使用@WebServlet也能配置。

虽然使用web.xml方式比较麻烦,但是web.xml中的配置会覆盖@WebServlet标注的配置,所以我们可以使用@WebServlet来作为默认值,然后使用web.xml方式作为日后更改设置值使用。

Servlet高级配置和部署,放在以后时机合适了再讲吧!

时间: 2024-10-06 23:40:24

Java Web基础(二)(Servlet编写与配置)的相关文章

Java Web基础 - Servlet

Java Web基础学习---Servlet 1.什么是servlet jsp的前生就是servlet,servlet就是在服务器端上运行的小程序,一个servlet就是一个java类,并且可以通过"请求-响应",编程模型来访问这个驻留在服务器内存里的servlet程序 2. 手工编写第一个Servlet Servlet层级关系: Servlet(接口)-->GenericServlet(抽象类,与协议无关的Servlet)-->HttpServlet(抽象类,实现了Htt

Java web基础总结四之—— Servlet基础

Java web基础总结四之-- Servlet基础 一.什么是Servlet? 通过名字就能看出来,Servlet 就是在服务器上运行的小程序.Servlet是sun公司(现在已经属于oracle了)实现的一门用于开发动态java web资源的技术.Sun公司在其API中提供了一个servlet接口,如果你想开发一个动态的java web资源,需要完成以下2个步骤:编写一个Java类,实现servlet接口.把开发好的Java类部署到web服务器中. Servlet接口已经有了两个默认的实现类

Java Web基础教程(二)开发基础

Java Web基础教程(二)开发基础 转载:Future魏来 前言 Java web是一种基于B\S(浏览器\服务器)架构的网络应用程序的技术实现.这种结构的Web应用程序被大量的企业级应用所采用.随着Web应用程序的规模不断扩大,传统的Web开发模式无法满足日渐复杂的业务需要,所以出现了更加合理更加先进的MVC开发模式.随之而来的也出现了一系列的基于MVC模式的开发框架,Struts框架.Spring MVC 等. 1. Web 技术的发展 1. 第一阶段 静态网站 Web技术出现伊始,由于

Java Web基础 --- Servlet 综述(理论篇)

摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Servlet 的产生动机,并揭示了 Servlet 的本质以及其在标准MVC模式中所扮演的角色.紧接着,给出了 Servlet族的继承结构,并对族内的接口和抽象类作了进一步的介绍,并给出开发一个Servlet程序的常用做法.在此基础上,我们图文并茂地介绍了 Servlet 的生命周期与执行流程,清晰展现

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

Java Web基础(HTML、Servlet/JSP)

要成为牛逼的JavaWeb程序员, Java Web的基础非常重要,现在有各种成熟的设计框架例如JQuery.Spring.Struts.Mybatis,将Java Web基础的复杂且通用的逻辑进行封装,减少了程序员的代码量,提高了编码效率,但是这些框架非常不利于我们了解Java Web底层如何运作,甚至不知道HTML(HyperText MarkupLanguage).HTTP(HyperText Transfer Protocol).URL(Uniform Resource Locator)

Java web基础总结二之—— http协议

Java web基础总结之二--http协议 由于java web是基于B/S的,所以http协议是java web 最基础,也非常重要的知识.HTTP协议用于定义客户端与web服务器之间进行通信的格式.从web服务器中获得某个web资源或者web 服务器接受客户端的请求都需要遵守一定的通讯格式,就是http协议. 一.HTTP协议是什么? HTTP协议是学习java web的基石,同时也是管理和维护一些复杂的WEB站点的必备的基础,如果你想要深入的理解java web的服务器的实现,就更需要掌

Java Web 基础 --- Filter 综述

摘要: 伴随J2EE一起发布的Servlet规范中还包括一个重要的组件--过滤器(Filter).过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链.Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过滤器的抽象,FilterChain是基于AOP理念对责任链方面的抽象,FilterConfig则是对Filter配置的抽象.本文概述了Filter的提出动机.工作原理.使用流程和应用实例,并指出Java W

Java web基础总结九之—— jsp标签

Java web基础总结九之-- jsp标签 JSP标签也称之为Jsp Action,在前面讲过,jsp的设计目的就是作为表现层.我们希望JSP页面仅用作数据显示模块,不要嵌套任何java代码引入任何业务逻辑,但在实际开发中不引入一点业务逻辑是不可能的,但引入业务逻辑会导致页面出现难看java代码.jsp的标签就是为了解决这个问题.所以jsp页面中也内置了一些标签(这些标签叫做jsp标签),开发人员使用这些标签可以完成页面的一些业务逻辑.我们也可以开发自定义标签,使jsp页面不出现一行java代

Java web基础总结八之—— jsp基础

Java web基础总结八之-- jsp基础 一.什么是jsp? JSP是Java ServerPages的缩写,它和servlet一样,都是用于开发动态web资源的技术.在servlet中拼凑输出html代码时,非常麻烦.而JSP的最大的特点在于,写jsp就像在写html,但是html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,开发动态资源. 现在随着前端越来越重要,很多的公司都会采取前后端分离的开发模式.即后端只提供返回json等格式的接口,而前端开发人员则通过对后端接