首先谈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. k8s volume

        只有nfs和rbd的,本人翻译确实很渣         在容器中磁盘文件寿命是短暂的,当在容器中运行一些重要程序时,这会产生一些问题. 首先,当一个容器崩溃后,kubelet将重新启动该容器, ...

  2. 《Pro Express.js》学习笔记——Express框架常用设置项

    Express 设置 系统设置 1.       无须再定义,大部分有默认值,可不设置 2.       常用设置 env view cache view engine views trust pro ...

  3. 支付宝APP支付后台参数生成Java版(一)

    一.支付参数组装: String[] parameters={ "service=\"mobile.securitypay.pay\"",//固定值 " ...

  4. 提高开发效率的十五个Visual Studio 2010使用技巧

    相信做开发的没有不重视效率的.开发C#,VB的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个IDE确实有它的独特之处.无容置疑,VS是一个非常强大的IDE,它支持多 ...

  5. No module named * 但是已经安装了找不到解决办法

    错误现象,把\Lib\site-packages下的安装包挪动位置到新的位置后(多个Python.exe运行位置)引起这类错误 No module named * 但是已经安装了 解决过程,先试图卸载 ...

  6. oracle_空值判断

    Oracle空值测试 比较项目 is null is not null nvl 说明 NULL true false true   null true false true   'NULL' fals ...

  7. NoClassDefFoundError

    //Java对象转化json格式 public static void toJsonByJettisonMappedXmlDriver(){ try { User user = getUser(); ...

  8. 常用CSS样式

    1.line-height:行高.默认normal normal:允许内容顶开或溢出制定的容器边界; length:15px,可以为负数; ... 2.overflow:滚动条设置 overflow- ...

  9. Extjs tree 更改图标

    去掉 树的叶子图标 .x-tree-node-icon { display: none; //不显示图标 } 更改图标  在后台返回的json中 有  添加  iconCls 属性 如    icon ...

  10. CSS之立体球体

    <!DOCTYPE html><html><head> <title>球体</title> <meta charset="u ...