servlet其工作原理和例子证明
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>
<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其工作原理和例子证明的更多相关文章
- Servlet的工作原理和生命周期
Servlet的工作原理 . Web服务器加载Servlet:Web服务器启动后,它会根据每个工程的web.xml文件去查找该工程的Servlet,并且找到这些Servlet的Class文件所在的地址 ...
- java servlet的工作原理
servlet本质上就是java类嘛.不过是有特殊规范的java类而已.下面就说一说为什么servlet要有特殊规范. 首先,考虑一下什么地方用servlet,WEB应用,而且是需要servlet容器 ...
- JSP 和 Servlet 的工作原理和生命周期
JSP的英文名叫Java Server Pages,翻译为中文是Java服务器页面的意思,其底层就是一个简化的Servlet设计,是由sum公司主导参与建立的一种动态网页技术标准.Servlet 就是 ...
- Servlet 工作原理解析
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...
- Servlet生命周期+工作原理
Servlet生命周期+工作原理 1.Servlet的生命周期: Servlet加载,加载,服务,销毁. 2.典型函数解释: Init():这个函数是用来初始化Servlet对象的.在 ...
- [转]Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet 工作原理解析--转载
原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...
- 【Java】Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Java web每天学之Servlet工作原理详情解析
上篇文章中我们介绍了Servlet的实现方式以及Servlet的生命周期,我们这篇文章就来介绍一下常用对象. 点击回顾:<Java Web每天学之Servlet的工作原理解析>:<J ...
随机推荐
- android 中webview调用js
1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true ...
- 云计算:创业的好时机——上海够快网络科技有限公司总经理蒋烁淼专访(评价阿里云的OSS的4个优点)(够快科技正式宣布已成功挂牌新三板)
云存储是云计算目前的热点之一,Dropbox.Box等产品的风靡,公司因此获得极高估值,都印证了这一点.但云存储对技术和资金要求都比较高,竞争也非常激烈,挑战巨大.国外云存储公司有亚马逊的云平台作为支 ...
- VB.net总结
.NET视频差点儿相同用时一周结束,总体感觉就是"走耳不走脑".刚開始看视频理解起来有一点困难,台湾口音以及台湾与大陆计算机术语的差异,让我把前几集相当于直接忽略过了(建议打算看这 ...
- EasyUI - ComboBox 下拉组件
效果: html代码: <input id ="comb" name ="comb"/> JS代码: $(function () { $('#com ...
- backbone入门小例子
最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...
- delphi中覆盖最大化消息(覆盖WM_GETMINMAXINFO消息)
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; ...
- ZYNQ-7000 Unable to connect to ps7_cortexa9 解决方案
图1 开发工具:Xilinx SDk 14.4(基于Eclipse,ISE suite 14.4组件之一) 开发板:Xilinx ZYNQ-7000 zc702 rev 1.0(注意:这个板子的版本说 ...
- 让程序在崩溃时体面的退出之Dump文件
在我的那篇<让程序在崩溃时体面的退出之CallStack>中提供了一个在程序崩溃时得到CallStack的方法.但是要想得到CallStack,必须有pdb文件的支持.但 ...
- 九度OJ 1065 输出梯形 (模拟)
题目1065:输出梯形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3745 解决:2043 题目描写叙述: 输入一个高度h.输出一个高为h.上底边为h的梯形. 输入: 一个整数h(1& ...
- IdHttpServer实现webservice(130篇DataSnap文章)
IdHttpServer实现webservice 朋友有个项目,通信协议使用HTTP,数据序列使用BIN(二进制).他不知道要选用何种技术方案. REST webservice是http+json ...