Servlet工作流程Demo

在学习Java框架的同时,不能忘了基础。基础打好了,也有助于对框架的理解和运用。

Http访问的大致流程:

1、浏览器提交遵循Http协议的请求文本。

2、请求由服务器(比如Tomcat)接收并解析,封装成HttpServletRequest类型的requset对象。

3、Web容器决定选择URL对应的Servlet处理业务逻辑,如读取数据库等。

4、Tomcat把输出流封装为HttpServletResponse类型的response对象。通过控制response的属性,就可以控制输出内容。

5、浏览器根据收到的结果显示响应内容。

从这个流程我们可以发现,Servlet是JavaWeb的核心程序,所有的请求最终都交给Servlet来处理。

下面通过一个TestServlet小Demo,复习一下Servlet的工作流程。

1、在Eclipse中新建一个名为TestServlet的Dynamic Web Project。

2、在src目录下新建名为Test Servlet的Servlet,不妨设包名为com.demo.

TestServlet.java代码如下:

package com.demo;

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 TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {// 继承HttpServlet

	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.log("execute doGet method...");
		this.execute(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.log("execute doPost method...");
		this.execute(request, response);
	}

	private void execute(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{

		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");

		String requestURI =request.getRequestURI();
		String method = request.getMethod();
		String param = request.getParameter("param");

		response.setContentType("text/html");

		PrintWriter out = response.getWriter();//获取响应输出对象

		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");

		out.println("	<h2>通过 "+ method+ " 方式访问页面,参数为:"+ param +"</h2>");
		out.println("	<br/>");

		out.println("	<form action= '"+ requestURI +"' method='get'>"
				+ " <input type='text' name='param' value='get param' > <input type='submit' value='GET方式提交页面"+ requestURI +"'></form>");
		out.println("	<br/>");

		out.println("	<form action= '"+ requestURI +"' method='post'> "
				+ " <input type='text' name='param' value='post param' > <input type='submit' value='POST方式提交页面"+ requestURI +"'></form>");
		out.println("	<br/>");

		out.println("<script> document.write('update time:'+document.lastModified) </script>");
		out.println("</body>");
		out.println("</html>");

		out.flush();
		out.close();
	}

}

从代码中可以看到,doGet和doPost分别响应GET请求和POST请求,这里我们回顾一下GET和POST的区别

1、get是从服务器上获取数据,post是向服务器传送数据。

2、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5、get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式。2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式。

3、在TestServlet.java上右击选择Run As | Run On Server;服务器我用的是Tomcat7.0

4、在Eclipse内置浏览器可以看到如下内容

注:在TestServlet.java中用到了@WebServlet注解,其作用是告诉Web容器,如果请求的URL是“TestServlet”,则由TestServlet的实例来响应。

使用注解来定义Servlet是Servlet3.0以后的功能。更一般的我们是通过在WEB-INF目录下的web.xml文件来定义Servlet。

5、使用web.xml配置Servlet。

web.xml是部署描述文件,一般放在WEB-INF目录下,可以配置很多东西。这个Demo功能简单,我在这里只是简单配置一下TestServlet。

web.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">

	<servlet>
		<servlet-name>testServlet</servlet-name>
		<servlet-class>
			com.demo.TestServlet
		</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>testServlet</servlet-name>
		<url-pattern>/test</url-pattern>
	</servlet-mapping>

</web-app>

6、配置好后,右击选择Run As | Run On Server,运行项目,可以得到如下页面。

注意:为了便于区别,web.xml中url-patter设为了test。此时若用同第四步中的以/TestServlet/TestServlet结尾的的URL访问,则无法响应。

说明,web.xml的设置会覆盖Servlet中的注解设置。

虽然这个Demo比较简单,但仍然可以发现,上面的代码可读性是比较差的。视图逻辑写死在Java代码中,和处理逻辑混在一起,修改维护都很麻烦。

所以需要jsp将用out.println()输出的视图逻辑抽取出来,由JSP专门负责视图渲染,Servlet处理业务逻辑,也便于前端、后台开发人员分工协作。

对Servlet的回顾就到这,还有很多细节和知识点无法面面俱到。在遇到问题的时候上网查阅相关资料即可。

时间: 2024-10-13 17:29:46

Servlet工作流程Demo的相关文章

[Servlet]Servlet工作流程及注意事项

Servlet工作过程 采用Servlet完成Web实际的工作流应用程序是通过Tomcatserver公布服务,client与server遵循的端部之间的相互作用Http议完毕的. 详细工作流程例如以下: client浏览器向server端发送请求. server端由Tomcatserver提供的Servlet容器解析接收到的请求. 通过Web应用程序的配置文件web.xml.解析到相应执行的Servlet. Servlet完毕client发送的请求逻辑,并完毕向client发送的响应内容. 由

Tomcat与Servlet工作流程

什么是Tomcat? Tomcatserver是一个免费的开放源码的Web 应用server,属于轻量级应用server. 什么是Servlet? Servlet是在server上执行的小程序.,说白了Servlet就一个应用程序.用于提供服务. 什么是JSP? JSP全名为Java Server Pages,中文名叫javaserver页面.其根本是一个简化的Servlet设计. jsp的本质就是Servlet. 当将jsp部署到Tomcat上的时候,訪问该页面的时候.会在tomcat的wor

[Servlet]Servlet的工作流程及注意事项

Servlet工作流程 利用Servlet完成的Web应用的实际工作流程是通过Tomcat服务器发布服务,客户端与服务器端之间的交互遵循Http协议完成的.具体工作流程如下: 客户端浏览器向服务器端发送请求. 服务器端由Tomcat服务器提供的Servlet容器解析接收到的请求. 通过Web应用程序的配置文件web.xml,解析到对应执行的Servlet. Servlet完成客户端发送的请求逻辑,并完成向客户端发送的响应内容. 由Tomcat服务器提供的Servlet容器向客户端浏览器进行响应.

Servlet工作原理

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: <loadon-startup>1</loadon-startup&g

spring mvc的工作流程

Spring MVC工作流程图 图一 图二  Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3.

Android 4.4 Kitkat Phone工作流程浅析(九)__状态通知流程分析

本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程

servlet执行流程和生命周期

一.servlet执行流程: 二.生命周期: Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段.初始化阶段.服务阶段和实例销毁阶段. 1.初始化阶段  调用init()方法 2.响应客户请求阶段.调用service()方法,由service()方法根据提交的方式选择执行doGet()或者doPost()方法 3.终止阶段 调用destroy()方法 1.创建servlet实例: 在默认情况下Servlet实例是在第一个请求到来的时候创建,以后复用.如果有的Servlet需要复杂的

web服务器中的容器以及工作流程

杂谈:项目到现在,已经有几个Phase过去了,杂乱的js,jsp,杂乱的action,代码已经是面目全非,更别提什么高内聚,低耦合这一说了.现在的工作状态是,要不就是绞尽脑汁地改以前留下来的巨坑bug,要不就是无聊地加各种if ,else增加新的需求.趁这段时间不忙,赶紧复习一下以前的知识,做做笔记,否则就只会写if else了. 容器相当于是一个代理的角色,请求和响应都需要容器的参与. #1,通信支持 利用容器提供的方法,你可以轻松的让servlet与web服务器进行通信,而不用创建serve

了解SpringMVC框架及基本工作流程

传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此,我们都知道我们request和response都依赖于url,当我们想要通过针对围绕url进行编程的话单纯的JSP+Servlet在实现上只有过滤器Filter在抵达相对应的Servlet之前起作用,但是如果我们想要在Servlet转发或者重定向之后再进行一些工作呢?一个url对应一个Servlet