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 ...
随机推荐
- C# - MemoryStream
代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
- OC中多线程的一些概念
1.进程1.1>进程是指在系统中正在运行的一个应用程序(同时打开QQ和Xcode,系统会分别启动2个进程)1.2>每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内 2.线 ...
- 基于visual Studio2013解决面试题之1204大数组查找
题目
- jquery 提交数据
目录 jquery ajax的应用 1 表单提交 2 ajax的提交(ajax post get) 普通的表单提交 <%@ page language="java" impo ...
- html网页中 点击按钮页面跳转
在html页面中 实现点击按钮页面跳转.语句如下: <input type="button" value="跳转" onClick="windo ...
- Mac os 进行Android开发笔记(1)
1> MAC OS Android环境搭建: 2>MAC OS 配置 Andoid ADB: 3>MAC OS 上进行Android真机调试: Android 开发环境搭建: 点击 ...
- 美化 - DropDownList控件
地址:http://www.baidufe.com/component/dropdownlist/index.html 效果: 引用JS文件: <link href="Js/DropD ...
- Tomcat 用户配置
如果你没有改变任何配置文件,请检查文件conf / tomcat用户.xml在你安装.该文件必须包含凭证让你使用这个应用. 例如,添加一个用户名为tomcat manager gui角色s3cret密 ...
- Windows 8 动手实验系列教程 实验5:进程生命周期管理
动手实验 实验5:进程生命周期管理 2012年9月 简介 进程生命周期管理对构建Windows应用商店应用的开发者来说是需要理解的最重要的概念之一.不同于传统的Windows应用(它们即使在后台仍然继 ...
- C++中字母大写和小写转换实现的优化
C++中字母大写和小写转换实现的优化 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 在本文中所有以转换为小写为例. 从推荐复用代 ...