servlet/jsp详解
首先谈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详解的更多相关文章
- Jsp详解
1Jsp基础 1.1 Jsp引入 Servlet的作用: 用java语言开发动态资源的技术!!! Jsp的作用:用java语言(+html语言)开发动态资源的技术!!! Jsp就是servlet!!! ...
- Java Web(五) JSP详解(四大作用域九大内置对象等)
前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...
- web开发(五) JSP详解(四大作用域九大内置对象等)
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6427759.html>,在此仅供学习参考之用. 一.JS ...
- jsp详解(3个指令、6个动作、9个内置对象、11个隐式对象)
jsp概述SP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet. jsp=html+jav ...
- JavaWeb学习篇之----Jsp详解
今天我们来看一下Jsp的相关知识,首先来看看一下Jsp的相关定义: 简介: JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术 ...
- Tomcat7配置及其servlet调用详解
Tomcat 1 Tomcat简介 Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成 ...
- 【转载】JSP详解(四大作用域九大内置对象等)
前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...
- gradle管理的Springboot使用JSP详解
大家知道现在的springboot默认经不支持jsp了,但是还是可以用的,需要加一些配置. 我使用的springboot是用gradle构造的,现在跟着我一步步来吧! 一,新建一个springBoot ...
- java 之 jsp详解
jsp所需环境 eclipse JSP/Servlet 环境 jsp处理 以下步骤表明了 Web 服务器是如何使用JSP来创建网页的: 就像其他普通的网页一样,您的浏览器发送一个 HTTP 请求给服务 ...
随机推荐
- TCP/IP 七层协议
- Fragment的startActivityForResult和Activity的startActivityForResult的区别
2016-08-30 18:22:33 前提:我们的APP要兼容Api level 11以前的,所以必须用FragmentActivity 1.对于Fragment的,我们很多时候都会在Activit ...
- Visor 隐藏应用之一 CSS3 生成器
Visor 有很多隐藏功能,这些功能并不是系统的核心功能,只是为了测试一些技术,做了些对初学前端的工程师还算有用的功能.今天就介绍一下CSS3 生成器. 先介绍一下Note 组件: Note是基本图形 ...
- 事件问题 Event
Event事件可以理解为在异步过程中实现同步的操作.但是要注意不要过分的使用Event,否则异步就失去了意义. 直接通过代码来说明: #include
- Y+的一些讨论
一.关于 fluent计算时壁面函数法和网格的关系,还有一个小问题 1:各位用 fluent的同仁和高手们,我想要比较好的使用 fluent软件,最重要的就是要学好理 论,在这里我想请教各位一个问题, ...
- 关于<form>标签
<form>用于为用户输入创建HTML表单,表单用于向服务器传输数据 form是块级元素,其前后会产生折行 <form>包含: 1.input元素:(根据不同的type属性,输 ...
- win7配上的网关会自动消失?解决
前几天遇见一台计算机,发现手动设置的ip和网关等...在使用了一会就变成,网关丢失,其他不变...奇怪啊...第一次遇见.后来找了一下.有答案了. 先将客户端卸载掉,再打开网络和共享中心-->本 ...
- iOS之数据安全
一.数据安全 术语----- 密钥:密钥是一种参数, 它是在明文转换为密文, 或将密文转换为明文的算法中输入的参数. 密钥分为对称密钥和非对称密钥(也可以根据用途来分为加密密钥和解密密钥) 明文:没有 ...
- 利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体、图片之类二进制文件的简单方法!
实际上利用certutil.exe 把二进制文件(包括各种文件,exe可执行程序,图片,声音,mp3) 经过base64编码为文本,可以实现把这些文件嵌入到批处理代码中. 有什么用?: 举个例子,批处 ...
- Android日志猫的使用
Android日志猫的使用 Android给我们提供了一个Log类,这个类有一些方法,比如 我们可以在我们的代码中添加这些方法进行测试 package com.example.test; import ...