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. WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)

    原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...

  2. android studio 报错,google后无果

    你可能在环境变量中配置了adk的环境变量,同时eclipse可studio公用一个avd,在两个之间切换时过出错

  3. could not create the java virtual machine(转)

    打开不了myeclipse,报错“could not create the java virtual machine”,解决问题过程如下: 1.在D:\MyEclipse\eclipse有个eclip ...

  4. DOM API

    documentObject.documentElement 返回文档的根节点 document.documentElement; //返回<HTML><HTML>

  5. 禁止页面复制功能 js禁止复制 禁用页面右键菜单

    <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: <script  t ...

  6. poj3278Catch That Cow(BFS)

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 37094   Accepted: 11466 ...

  7. Servlet的学习(二)

    本篇接上一篇<Servlet的学习(一)>,讲述如何利用MyEclipse来创建web工程, 同时讲述如何在MyEclipse中配置Tomcat服务器. 在MyEclipse中,新建“We ...

  8. (WinForm)文件夹状态监控,最小化到托盘,开机自启动

    原文 (WinForm)文件夹状态监控,最小化到托盘,开机自启动 . 文件夾監控(監測文件夾中的文件動態): //MSDN上的例子 public class Watcher { public stat ...

  9. Hive HA使用说明

    hive让大数据飞了起来,不再需要专人写MR.平常我们都可以用基于thrift的任意语言来调用hive. 不过爱恨各半,hive的thrift不稳定也是出了名的.很容易就出问题,让人无计可施.唯一的办 ...

  10. 《C++语言基础》实践參考——数组作数据成员

    返回:贺老师课程教学链接 [项目5 - 数组作数据成员]阅读教材P255例8.4.注意到类中的数据成员能够是数组.设计一个工资类(Salary),当中类的数据成员例如以下: class Salary ...