首先谈servlet的简单定义,servlet其实就是一门web服务器端编程的技术。

  servlet它分两种,一种是servlet容器,所有的servlet对象都要放在servlet容器中才能被调用执行;

  一种是servlet接口,servlet接口是所有servlet对象的顶级父接口,所有的servlet类都要直接或间接的实现servlet接口,我们平常最常使用的便是HttpServlet类,它也实现了servlet接口;

  当客户端发送请求到服务器时,服务器通过url找到相应的servlet,此时,如果这个servlet是第一次被使用的话,那就要先将这个servlet加入内存,然后初始化它,初始化执行的便是servlet类中的init方法,加载和初始化都只会在第一次被访问时执行一次,之后便不再执行;紧接着创建两个对象,一个httpServletRequest和一个HttpServletResponse,这两个对象一个用于存放请求信息,一个用于存放响应信息,创建好这两个对象后,服务器将这两个对象传给servlet的service方法,service方法根据用户的请求方式,决定是去调用doGet方法还是doPost方法,我这里不是说service只有doGet和doPost两种选择,实际上访问方式有7种,自然service可调用的do方法也有7中,只是最常用的也就是doGet和doPost两种,通过url提交的请求默认为get方式,表单提交可以通过method改为post方式(表单提交只有get、post两种方式),其他几种请求方式没试过,感觉应该在request中设置,servlet处理完成之后再把处理结果交给服务器,由服务器发送到客户端,客户端浏览器通过html来组织显示数据。

  对于get和post的两种请求方式,最常用,有区别,区别就在于

    get方法 参数跟在地址栏后面,它也就没有请求实体这玩意儿了,都在地址栏上呢,这种方式有好处也有坏处,好处在于servlet能在访问请求行的时候就得到请求参数,快速,而坏处在于,所有参数都明文显示在地址栏上了,密码可能也明文显示了,太不安全了;并且啊,这参数跟在url后,这url能放到数据大小是有限的,貌似就几k,这大数据根本没办法用get方法,就像文件上传就必须使用post方法。

    而post方法,参数是放在参数实体里面的,按道理来说可以放无限大的数据,而且相对安全,就是比get方法慢一些。

  servlet是有生命周期的,第一次被访问时,被加载初始化,调用init函数,初始化完成调用service方法完成具体的响应处理,当服务器停止时,servlet调用destroy方法销毁。

    在servlet的应用中海油很重要的一点,就是servlet中的重要对象,这些对象在servlet的应用过程中被广泛用到。

  这些对象中个人认为最最常用的便是HttpServletRequest和HttpServletResponse两者,HttpServletRequest最常用的getParameter()、getParameterValues(...)方法来获取请求参数,setAttribute(),getAttribute()等方法来添加属性,获取属性值;而HttpServletResponse最常用的方法像getOutputStream()等,获取输出流,文件下载就要用到这个;处理这些之外呢,request的转发和response的重定向也用得相当频繁。

  其次,应用最多的对象就要数servletContext、servletConfig、HttpSession。

  刚刚说到转发和重定向,这是页面跳转的两种方式,转发和重定向的区别就好像是你遇到了问题,找老师A询问,这个时候你拨打的是老师A的电话,老师A接起了电话,听你说完,发现自己也不会,但是他旁边的老师B会,然后就把电话给了老师B并转述了你的问题,此时你依旧打的是老师A的电话,且只打了这一次电话,但是问题实际是老师B回答的你;而重定向是什么意思呢,你打电话给老师A,老师A听了说哎呀我不会,但是老师B会,我把他的电话给你,你给他打电话吧,然后你拨打了老师B的电话,老师B来解答了你的问题,整个过程中你拨打了两次电话。

  这便是转发和重定向,转发共用一个request和response,地址栏不变,客户端总共只发起一次请求,而转发是发起两次请求,地址栏变了,不同请求自然也是不同的request和response了,通常情况下,如果你只是访问本工程内的资源并且不需要request和response来携带什么参数,那么你用转发和重定向都无所谓,但是如果你需要携带参数,就只能用转发,且只能访问本工程内资源,如果你想访问工程外资源就只能用重定向。

  通常将servlet的时候就会提到jsp,我个人觉得这两者应该是一体的,确实jsp本质也就是servlet嘛,至于为什么说一样的那还有了servlet还要jsp,这肯定是相当有必要的,我们都知道servlet响应请求,要把响应的数据显示给用户看的话,最常用的方法就是response.getWriter(),获取到输出对象,然后将一个jsp或者说html也可以,将这样的一个结构通过print输出,我写过,写得相当不耐烦,这也可以看出servlet它不适合做一个页面显示,它的工作应该就逻辑处理就好,那页面显示怎么办呢?jsp就出来了嘛。

  jsp是java server page的简称,它是一种动态网页的技术,主要负责的就是动态的显示,分担servlet的工作,什么叫动态的显示呢,用户不是在动态的像服务器发送请求吗?啥时候高兴了啥时候发,服务器接到请求处理完成交还给客户端,让网页显示,这个时间点应该是由用户的请求发送时间决定的,所以是动态的。

  jsp用着很方便,第一点是它就像html一样,可以用css装饰,可以通过js交互,也有9个内置对象,这一点又偏向servlet了,觉着这就是html和servlet的混合呗,但这并不改变它还是servlet的本质啊。

  再说这jsp的九大内置对象   

    request  请求对象

    response  响应对象

    session  会话对象

    application  全局对象

    page  本页对象  可以理解为this 用得很少

    pageContext  页面上下文  作用范围只在在当前页

    config  配置对象

    out  输出对象

    exception  例外对象   这个通常在错误网页才会用到   错误网页  isErrorPage = true

    

servlet/jsp详解的更多相关文章

  1. Jsp详解

    1Jsp基础 1.1 Jsp引入 Servlet的作用: 用java语言开发动态资源的技术!!! Jsp的作用:用java语言(+html语言)开发动态资源的技术!!! Jsp就是servlet!!! ...

  2. Java Web(五) JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

  3. web开发(五) JSP详解(四大作用域九大内置对象等)

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6427759.html>,在此仅供学习参考之用. 一.JS ...

  4. jsp详解(3个指令、6个动作、9个内置对象、11个隐式对象)

    jsp概述SP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet.    jsp=html+jav ...

  5. JavaWeb学习篇之----Jsp详解

    今天我们来看一下Jsp的相关知识,首先来看看一下Jsp的相关定义: 简介: JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术 ...

  6. Tomcat7配置及其servlet调用详解

    Tomcat 1 Tomcat简介 Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成 ...

  7. 【转载】JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

  8. gradle管理的Springboot使用JSP详解

    大家知道现在的springboot默认经不支持jsp了,但是还是可以用的,需要加一些配置. 我使用的springboot是用gradle构造的,现在跟着我一步步来吧! 一,新建一个springBoot ...

  9. java 之 jsp详解

    jsp所需环境 eclipse JSP/Servlet 环境 jsp处理 以下步骤表明了 Web 服务器是如何使用JSP来创建网页的: 就像其他普通的网页一样,您的浏览器发送一个 HTTP 请求给服务 ...

随机推荐

  1. 给vs2010换皮肤

    http://www.cnblogs.com/aolinwxfx/articles/2379252.html O(∩_∩)O哈哈~,很不错哦

  2. Emoji表情符号录入MySQL数据库失败解决

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...

  3. Git版本库

    创建版本库:git init db 只要用git init db 就可以很容易创建一个空的Git版本库. Git版本库创建好之后,在版本库的目录下有一个.git的子目录中有几项内容,其中注意三项: 1 ...

  4. 2016-02-03 xss漏洞

    应用上出现了xss漏洞.是由一个get请求的ajax接口返回的一个字段中有xss漏洞引起的.该字段本来是要展示出来的,但是补丁版的时候去掉了这块的展示,接口还是返回的.现在引发了xss漏洞,有些同事是 ...

  5. 【zz】matlab 均值方差

    转自:http://blog.sina.com.cn/s/blog_4936c31d01011v8j.html 1. 均值 Matlab函数:mean >>X=[1,2,3] >&g ...

  6. Beta版

    Beta版使用说明 各文件介绍:本软件是基于visual studio 2010 平台,使用C#语言开发的windows窗体游戏.该游戏共有七个界面,分别是开始界面,游戏说明界面,模式选择界面,经典模 ...

  7. 统计字符串”aaaabbbccccddfgh”中字母个数以及统计最多字母数

    function count(){ var str="shhkfahkahsadhadskhdskdha"; var obj={}; for(var i=0;i<str.le ...

  8. GitHub 上一份很受欢迎的前端代码优化指南

    http://segmentfault.com/a/1190000002587334?utm_source=weekly&utm_medium=email&utm_campaign=e ...

  9. 接口或者http请求测试工具--chrome plug

    Postman : With Postman, you can construct simple as well as complex requests quickly, save them for ...

  10. 浅谈javascript中事件冒泡与事件捕获

    事件冒泡:一个事件会顺着他的层级一直往上传,一直传到document上为止,即从盒模型上看是从内到外的过程. 例: <!DOCTYPE html><html lang="e ...