首先谈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. Coding源码学习第一部分(AppDelegate.m)

    前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...

  2. Android Fragment的使用

    定义 Fragment可以理解成一个迷你型的活动,同样可以包含布局,同样有自己的生命周期.比Activity要轻量级,在程序内部做界面跳转要比Activity快的多. 静态添加 Fragment可以静 ...

  3. html图片预览

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系

    前言:    在嵌入式开发中,如uboot的移植,kernel的移植都需要对Flash 有基本的了解.下面细说一下标题中的中Flash中的关系 一,Flash的内存存储结构    flash按照内部存 ...

  5. SAE使用心得1

    最近准备在新浪云端SAE上挂点自己的小网站,这样自己开发个什么东西别人能用.但是第一次接触SAE,遇到一些问题,记下来给大家看. 1.安装的svn版本不能高于 1.8,否则无法向SAE提交代码. 2. ...

  6. app启动时间命令

    app启动: 冷启动和热启动 冷启动方式: adb shell am start -W -n package/activity 停止app命令: adb shell am force-stop pac ...

  7. 界面绚丽的SharePoint仪表盘控件Nevron Gauge for SharePoint 控件详细介绍

    Nevron .NET Vision 是一款用于创建独特的.强大的数据表示应用程序的最终控件,它具有超强的数据可视化性能. 整合了Nevron Chart for .NET, Nevron Diagr ...

  8. H5的FormData对象完成ajax上传文件multiFile

    最近工作中需要完成,ajax上传图片,可是input file +ajax是无法完成的: 于是寻找了许久,发现了H5 的一个对象FormData 使用方法如下: HTML: <form id=& ...

  9. matlab初学之textread

    文章出处:http://blog.sina.com.cn/s/blog_9e67285801010bju.html 基本语法是: [A,B,C,-] = textread(filename,forma ...

  10. 火狐浏览器不能获取 event,解决js报错问题

    //←的keyCode等于:37 //→的keyCode等于:39 //↑的keyCode等于:38 //↓的keyCode等于:40 function keystoke(obj){ //var e ...