servlet简单介绍


当我们在地址栏里面输入www.baidu.com,终于呈如今我们面前的是百度搜索的页面。在这些訪问过程中,都会有一个webserver来处理这些请求以及訪问处理后的结果。

而servlet就是这样一个用来处理前端请求并处理数据来返回相关数据到界面显示的工具。用以下一张图来表示这样一个过程。

原理简单介绍


对于servlet,它的工作原理也是能够去了解一下的。浏览器依据ip地址。向指定的server发送一个请求。在请求的过程中。依据http协议将请求数据封装成一个数据包。

server端在接受到发送过来的数据包后,解析,再次封装成request对象和response对象。假设是tomcatserver的话,这里依据sun定义的规范。

会找到指定webapps找到建立好的目录,先读取web.xml.在xml中我们找到这样一个xml的节点<url-pattern>.这里存放的是servlet。也就是你编译好的那个class文件的路径。找到这个路径后。通过反射生成servlet对象。再调用这个对象的service方法,将之前解析封装好的两个对象作为这个service方法的參数传进来。拿到从client传过来的数据后,想怎么办就怎么办了。连接数据库还是直接通过一系列的逻辑处理都能够。

处理完毕之后,封装好http协议数据包返回到client。

整个servlet就是这样一个过程了。

与CGI的比較


和servlet相比,CGI也是一种用来使网页具有交互功能的接口。可是因为其移植性、性能、编写难度上和线程訪问上的劣势导致越来越多的人開始使用servlet。换个角度看,servlet是一种相比CGI更加灵活和先进的替代品。

servlet生命周期


1.init()初始化方法

2.service()方法

3.destroy()方法

总的来讲也就是这三个方法的调用了。在servlet容器启动的时候,也就是tomcatserver启动的时候,通过读取配置文件的配置信息来初始化servlet对象。当client向server发出请求的时候,就调用servlet对象的service方法。而destroy方法的运行能够手动。也能够自己主动的销毁。手动就是直接将tomcatserver停了就能够了,自己主动的依据网上的资料。在长时间不动就会自己主动销毁或者写一个监听就能够。这里相比于之前的CGI。servlet在实例化后假设没有销毁的话,会一直存在。而且能够服务给多个浏览器的请求,而CGI每次訪问时会生成一个线程,当server终止后就销毁指定的线程。这也是servlet比CGI效率高的原因。

servlet和cookie、session的关系



Cookie



之前也接触过cookie,这里再次了解一下对应的原理。cookie在client存放有两种方式,a.存放在cache中,浏览器关闭自己主动消失。b.存放在指定的目录中,常常看到的哪些小的浏览器中icon等,会自己主动消失。

在与server交互过程中是。server将返回的数据以键值对的方式发送到client。这样在浏览器第二次訪问时,向server发送这个键就能够了,server接受后,同样的键值就觉得是一个用户。

Session



一个用户相应一个session对象,session到期自己主动消失。

浏览器请求server时,会调用resquest对象的getsession()。从而产生一个session对象,并给session配一个键值。将每一个用户的对象存放在map集合中。server就是依据这些sessionid跟踪这个session的。

而session和cookie都是用来存放用户数据,不同的是session仅限于用户的单个会话。而cookie是存放在client的。而session和cookie又有什么关系,用户和应用程序打交道的过程中,建立session的同一时候会产生一个UUID存在cookie其中,当用户再次请求时,读取这个UUID来server查询相应的session最后得到相应ID的session。

Filter



简单了解一下这个filter。从字面上就知道这个是过滤器的作用。举个样例。这个就和进北京火车站似得。

进入到北京火车站相当于servlet,而filter就是那些安检过程。假设带个管制刀具,汽油易燃物品是须要过滤掉的。filter就是干这个事的,在你在訪问server创建resquest对象之前把一些信息过滤掉。为了让你更好的进火车站。

常见的filter有这些用户辨认filter,日志filter,审核filter,加密filter。符号filter。能够为多个servlet配置一个filter。

实例用户登录


Loginservlet


        
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*; public class LoginServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,
IOException{
String username=req.getParameter("username");
String password=req.getParameter("password");
System.out.println("username="+ username);
System.out.println("password="+ password); resp.setContentType("text/html;charset=GB18030");
resp.getWriter().println();
resp.getWriter().println("loginsuccess"); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,
IOException{
doGet(request,response);
}
}


Html


<html>
<head>
<title>登录</title>
</head>
<body> <form action="LoginServlet" method="get"> 用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录"> </form>
</body> </html>


Web.xml


      
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 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"
version="3.0"
metadata-complete="true"> <servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping> </web-app>


总结



简单来说,servlet就是一个桥梁。一个将client连接和数据库等业务逻辑后台处理连接的桥梁。有了这个桥将界面的显示和后台的逻辑处理分开。也是一个解耦的体现。

说白了也是两个jar包和一些接口的定义和实现,更深次的涉及到一些协议的传输和工作原理。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

servlet其工作原理和例子证明的更多相关文章

  1. Servlet的工作原理和生命周期

    Servlet的工作原理 . Web服务器加载Servlet:Web服务器启动后,它会根据每个工程的web.xml文件去查找该工程的Servlet,并且找到这些Servlet的Class文件所在的地址 ...

  2. java servlet的工作原理

    servlet本质上就是java类嘛.不过是有特殊规范的java类而已.下面就说一说为什么servlet要有特殊规范. 首先,考虑一下什么地方用servlet,WEB应用,而且是需要servlet容器 ...

  3. JSP 和 Servlet 的工作原理和生命周期

    JSP的英文名叫Java Server Pages,翻译为中文是Java服务器页面的意思,其底层就是一个简化的Servlet设计,是由sum公司主导参与建立的一种动态网页技术标准.Servlet 就是 ...

  4. Servlet 工作原理解析

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...

  5. Servlet生命周期+工作原理

    Servlet生命周期+工作原理 1.Servlet的生命周期:     Servlet加载,加载,服务,销毁. 2.典型函数解释:     Init():这个函数是用来初始化Servlet对象的.在 ...

  6. [转]Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  7. Servlet 工作原理解析--转载

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...

  8. 【Java】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  9. Java web每天学之Servlet工作原理详情解析

    上篇文章中我们介绍了Servlet的实现方式以及Servlet的生命周期,我们这篇文章就来介绍一下常用对象. 点击回顾:<Java Web每天学之Servlet的工作原理解析>:<J ...

随机推荐

  1. javascript笔记整理(变量作用域)

    变量的作用域(作用域:指的就是一段代码的作用范围) 一.变量的作用域 1.全局变量(在代码中任何地方都能够访问得到的变量,拥有全局的作用域) A.最外层函数外面定义的变量 var a=1; funct ...

  2. 普通图片转ascii码字符图

    效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii码,完成 实现 第一步:获 ...

  3. [放松一下] 经典高清电影合集 170G BT种子下载

    经典高清电影合集 170G BT种子下载 点击文件名下载 经典高清电影合集170G BT种子.torrent 下载方法 经典高清电影合集详情见目录: 1. 杀手47 2. 这个杀手不太冷 3. 放牛班 ...

  4. JDK自己主动拆箱下,三目运算符的潜规则

    近期发现了一个非常诡异的NullPointerException,在以下这种方法抛出,一開始怎么都没想明确,dSrc即使为null,那直接赋值给distinct也没问题啊. private Doubl ...

  5. Cookie例子

    马士兵老师的~~ cookie是服务器将信息保存在客户端的一个表示方式 名-值 服务器只能写入文档文件 每个浏览器都有唯一的标识号 且每个浏览器只允许访问与自身相关的cookie的内容 cookie分 ...

  6. DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...

  7. Windows Azure入门教学系列 (九):Windows Azure 诊断功能

    本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...

  8. VS2008通过 map 和 cod 文件定位崩溃代码行

    VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...

  9. [置顶] C++之TinyXML的使用介绍

    一.引子: 最近在做GBT28181国标平台对接的工作,涉及到一些进程间消息通讯,消息体有xml格式,之前测试的时候都是拿他们当做字符串去解析,现在正儿八经地开发的时候,就想到了用xml库去解析,由于 ...

  10. ArcGIS制图——多图层道路压盖处理

    [1]      启动ArcMap,载入各道路要素类.生成名为All-Roads的图层组,如他所看到的,符号级别绘制将对图层组内图层符号起作用: 图层组设置符号等级 [2]      在内容列表中,右 ...