Java Web学习(28): Servlet学习(一)

一Servlet概述

(1)什么是Servlet

先有JSP还是先有Servlet呢?对于这个问题,我们只需要知道JSP的前身就是Servlet。因此我们乐意清楚的知道

Servlet是JSP的基础。

Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过"请求-响应"编程模型来访问的

这个驻留在服务器内存里的Servlet程序。

Servlet为创建基于Web的应用程序提供了基于组件、独立于平台的方法,可以不受CGI程序的性能限制。Servlet

有权限访问所有的Java API,包括访问企业级数据库的JDBC API。

Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和

HTTP服务器上的数据库或应用程序之间的中间层。

使用Servlet,可以收集来自表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet通常情况下与使用CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效

果。但是相比于 CGI,Servlet 有以下几点优势:

1)性能明显更好。

2)Servlet在Web服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

3)Servlet是独立于平台的,因为它们是用Java编写的。

服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的。

4)Java类库的全部功能对Servlet来说都是可用的。它可以通过Socket和 RMI机制与Applet、数据库或其他软件

进行交互。

(2)Servlet包

Servlet是运行在带有支持Servlet规范的解释器的web服务器上的Java类。

Servlet可以使用 javax.servlet 和 javax.servlet.http 包创建,它是Java企业版的标准组成部分,Java企业版是支持大

型开发项目的Java类库的扩展版本。这些类实现Servlet和JSP规范。

Servlet就像任何其他的Java类一样已经被创建和编译。

(3)Servlet任务

Servlet执行以下主要任务:

1)读取客户端(浏览器)发送的显式的数据。这包括网页上的HTML表单,或者也可以是来自Applet或自定义的

HTTP客户端程序的表单。

2)读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等

等。

3)处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计

算得出对应的响应。

4)发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTM 或XML)、

二进制文件(GIF图像)、Excel等。

5)发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如HTML,设置

cookies和缓存参数,以及其他类似的任务。

二Servlet的运行过程

下图显示了Servlet在Web应用程序中的位置:

Servlet调用图:

三在Eclipse中开发Servlet

(1)Servlet接口实现类

  Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

  HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比

Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

  HttpServlet在实现Servlet接口时,覆写了service()方法,该方法体内的代码会自动判断用户的请求方式,如为

GET请求,则调用HttpServlet的doGet()方法,如为Post请求,则调用doPost()方法。因此,开发人员在编写Servlet

时,通常只需要覆写doGet()方法或doPost()方法,而不要去覆写service()方法。

(2)实例开发

1)在Eclipse中新建一个web project工程,Eclipse会自动创建下图所示目录结构:

2)在com.servlet包右键下创建一个Servlet:

3)在弹出的对话框中填写Servlet的名称,就像创建一个Java类一样:

4)创建完成之后,我们就开始编写一些代码,在这里只是重写了doGet()方法,代码为:

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<h1>Hello Servlet</h1>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

5)在浏览器中输入;http://localhost:8080/ServletDemo1/HelloServlet,我们就可以访问这个Servlet:

6)我们再编写一个测试的index.jsp页面,需要注意的是我们输入的URL地址必须与Servlet中注解中URL地址的一

致,其中输入的代码为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Servlet编程</title>
</head>
<body>
       <h1>Servlet小程序</h1>
       <hr/>
       <a href="HelloServlet">get方式请求HelloServlet</a>
       <hr/>
       <form action="HelloServlet" method="post">
             <input type="submit"  value="post方式请求HelloServlet"/>
       </form>
</body>
</html>

7)在浏览器中输入:http://localhost:8080/ServletDemo1/index.jsp,点击两个请求的方式,我们也可以得到

结果:

这是最新的创建Servlet的方法,过去的我们在Eclipse中开发Servlet,需要手动编写一个web.xml配置文件,完

成Servlet的创建。那么我们也来手动编写一个Servlet程序。

四过去的做法

(1)直接使用类继承HttpServlet抽象类

具体的步骤为:

1)就像创建一个普通的Java类一样,这个类继承自HttpServlet类,

2)我们在类中右键选择下图的选项:

3)在出现的对话框中选择重写下图中的两个方法:

代码为:

package com.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 ServletOld1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.print("<h1>Hello Servlet</h1>");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}

}

4)完成后我们就需要在web.xml文件中配置Servlet:

5)在浏览器中输入:http://localhost:8080/ServletDemo1/ServletOld1的结果:

(2)Servlet3.0之前的做法

具体的步骤:

1)创建一个Servlet,不使用注解

package com.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;

/**
 * Servlet implementation class ServletDemo
 */
public class ServletDemo extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletDemo() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<h1>Hello Servlet</h1>");

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2)在web.xml配置文件中配置:

3)在浏览器中输入:http://localhost:8080/ServletDemo1/ServletDemo的结果:

综上这三个方法,使用注解的是最简单的,也是Serlet3.0的新特性,具体的可以参

考:http://blog.csdn.net/xiazdong/article/details/7208316

时间: 2024-12-28 21:10:35

Java Web学习(28): Servlet学习(一)的相关文章

java web.xml listener servlet 和filter的加载顺序

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servle

java web (j2ee)学习路线 —— 将青春交给命运

RESON TO DO JAVA WEB:1.JAVA WEB(企业级)  2.Android和iOS过于火爆并且不兼容 一.JAVA WEB开发需要的知识储备 1.      基本的网页设计语言:HTML.JavaScript.CSS 2.      制作动态网站:Java.JSP(servelt) 3.      数据库:MySQL.SQL Server.SQL Lite.Access.Oracle 4.      流行的框架:MVC思想和原理——了解Struts.Spring.Hibern

Java Web:使用Servlet生成网页随机图片验证码

最近在学习Java Web开发,做了一个生成网页随机图片验证码的例子,在此记录. 一.新建Servlet项目: 在MyEclipse中新建Servlet项目,一步步操作就OK,在此不再赘述.建好之后文件目录树如下图: 二.源代码实现: (1)java代码: package com.zdt.identity; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.

Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)

Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的Java Web工程. 参考原文:How to Build Web Scanning Application with Gradle Servlet文件上传 使用Servlet文件上传,可以参考Oracle的官方文档The fileupload Example Application.这里需要注意

Java Web开发之Servlet、JSP基础

有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发相对繁琐,代码量庞大而且不易维护,美工无法参与界面设计开发等不足,于是就诞生了jsp.jsp是对servlet开发模型的重要升级.有了jsp,Java Web开发技术才真正被广泛使用. 一.Servlet 在Java Web开发当中,新建一个类继承(派生)自HttpServlet类即可创建一个Ser

Gradle构建Java Web应用:Servlet依赖与Tomcat插件

Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的Java Web工程. 参考原文:How to Build Web Scanning Application with Gradle Servlet文件上传 使用Servlet文件上传,可以参考Oracle的官方文档The fileupload Example Application.这里需要注意

Java web 实验五 Servlet过滤器

loginform.html <html> <head> <title>使用过滤器改变请求编码</title> <meta http-equiv="Content-Type" content="text/html;charset=GB2312"> </head> <body> <center> <h2>请输入用户名和口令:</h2> <for

Myeclipse 搭建Java Web 项目:Servlet 《二》

上一节,我们使用myeclipse部署了web项目,但那部署的为静态的web项目,下面我们来学习编写动态的web项目,编写动态项目必须要用到的为:servlet. Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序. 编写一个现实登陆的Servlet,并部署访问. 1.编写登录的jsp页面,采用post方式提交. 访问此JSP页面: 2.编写LoginServlet 来通过后台校验登录的用户

Java Web笔记之Servlet(1)

今天在学习Servlet时,使用浏览器显示的网页效果与预期的有差异,仔细查找发现实<!DOCTYPE>声明的问题,截图如下: 代码如下: package secondServlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.ht

Java Web项目--使用Servlet生成一个页面

为了生成一个servlet对应的网页.我们需要新建一个web.xml,其中将会放置servlet的相关信息.web.xml文件放置在WebContent/WEB-INF/目录下.(我们在Eclipe中新建一个Dynamic Web Project的时候一直点"next"的话会有提示"Generate web.xml deployment descriptor",勾选该选项会默认生成一个web.xml文件).我们需要配置两对映射关系,一对是servlet名和他对应的s