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 请求给服务 ...
随机推荐
- iOS 支付宝第三方使用步骤
使用支付宝进行一个完整的支付功能,大致有以下步骤: 1 与支付宝进行签约,获得商户ID(partner)和账号ID(seller) 2 下载相应的公钥私钥文件(加密签名用) 3 下载支付宝SDK 4 ...
- K2新网站(官网和BPM社区)正式上线了
K2新网站(官网和BPM社区)正式上线了 K2新网站(官网和BPM社区)正式上线了 K2新网站(官网和BPM社区)正式上线了 通常重要的事情要讲三遍, 官网:www.k2software.cn 社区: ...
- LightOJ 1104
题意: 给你一年有n天,求至少有m人使得至少有两个人在同一天生日的概率不少于0.5. 分析: 任意两个人不在同一天生日的概率为C(n,m)*m!/n^m,它的对立事件A为至少有两个人在同一天生日, 则 ...
- python常用的内置库
标准库: import os os.getcwd() //返回当前工作路径 os.chdir('/server/accesslogs') # Change current working dir ...
- 一般处理程序获取WEB窗体创建的验证码需要实现session相关接口
如下: using System.Web.SessionState; using ASPNETAJAXWeb.ValidateCode.Page; public class CheckLogin : ...
- js 控制表单提交
<form id="form2"> <input type="text" name="text" value=" ...
- range()和xrange()
range(): range([start,] stop[, step]) 如: range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] range()默认起始点为0 且ra ...
- sql server数据库连接问题处理
下面请一字一句地看,一遍就设置成功,比你设置几十遍失败,费时会少得多. 首先,在连接数据库之前必须保证SQL Server 2012是采用SQL Server身份验证方式而不是windows身份验证方 ...
- 添加网络打印机的步骤(xp和win2008)
1.如题,设置好打印机去的ip地址和子网掩码等信息. 2 .xp不像其他新的系统那么好用那么智能...只能慢慢来 如果是xp,注意,请添加网络打印机的时候选 :添加本地打印机,,记得哦 然后如图 然 ...
- html input节点很多 json字符串提交解决方法
遇到一个页面,38个input节点,页面前端写好的,不太容易改成 js框架 容易操作的样式,只能自己想办法一个一个id获取然后 setvalue getvalue(miniui): 38个一个一个写太 ...