JSP总结(JSP+Servlet+JavaBean)--动态网站开发编程语言

来源:互联网 发布:域名投资人 编辑:程序博客网 时间:2024/06/05 10:30
JSP总结(JSP+Servlet+JavaBean)--动态网站开发编程语言
    引言:前段时间写了Servlet的基本用法,但是如果想要真正的开发一个动态网站的话,那么Servlet远远还不够,即使真的可以开发,那也是非常非常吃力的,这个时候,jsp无非是最好的帮衬.
    
    jsp简介:
                    什么是jsp?英文名--javaServer pages,翻译过来就是java服务页面,直白的说就是用java写服务器页面。平时我们了解的用html+css+js写页面,那只能说写的都是静态的页面,留着给自己看看还可以,真正想要商业话的话,还必须要设计到Servlet和jsp这几门技术了。
                    为什么要用jsp?前面说了Servlet同样也是开发动态网站的,为什么还要出现Servlet,这个问题问得好,那么我们就要根据这两门技术的特点来看了,Servlet他是擅长于做数据加工处理,分析的,而jsp是擅长做模板美化显示的,这两门技术各有千秋,如果说结合在一起,那就有了很好的效果,所以jsp技术才会出现,你会发现写jsp会像写html一样的简单。
       
    jsp的调用过程:
                   当你访问服务器的jsp页面的时候。服务器的jsp翻译引擎会帮你把jsp页面翻译成一个Servlet文件,同时里面有一个Service方法,在这个Service方法里面,jsp页面所有输出html或者是输出结果的操作都由out这个隐式对象帮你输出。同时service()方法里面帮你定义了jsp页面的9大隐式对象,不用定义,在jsp页面中可以直接使用.
    
    jsp9大隐式对象: request response application config page pageContext out session exception这当中我们只需要说说out和pageContext这两个隐式对象,因为其他的我们在java基础或者是Servlet里面都已经详细了解过.
                             out:这个jsp里面的out就相当于request.getWriter()得到一个PrintWriter对象。然后你可以输出任意的数据,不过有一点和PrintWriter不一样,就是缓冲区,out他有一个自己的缓冲区,我数据必须先写入到out的缓冲区里面,写满了之后,才会装入request的缓冲区里面,意思是Out缓冲区比request缓冲区低一级。
                            pageContext:这个隐式对象可以说是最重要的一个,他既是javaWeb四大作用域当中的一个,也是jsp9大隐式对象的一个,更是el表达式11个内置对象当中的一个,知道了他是域,就要知道他的生命周期,作用范围,作用
                                            生命周期:pageContext可以说是代表当前的整个jsp页面,当用户访问你的jsp页面的时候,pageContext作用域产生,关闭Jsp页面的时候,pageContext域结束。
                                            作用范围:在整个jsp页面中都有效
                                            作用:  1.作为9大隐式对象的入口对象可以获取其他8大隐式对象
                                                        2.作为4大作用域当中的入口作用域可以任意操作其他作用域的属性值
                                                        3.在作用范围内共享数据
                                                        4,提供了请求包含和请求转发的快捷方式
                                                                        pageContext.include()     pageContext.forward()
jsp语法详解:
                    1.jsp模板元素---就是jsp页面当中的html元素,通过service()方法中的out.writer()输出
                     2.jsp指令:<%@ page 属性="属性值"%>一共有三个
                                         page指令:提供个jsp翻译引擎的指令,用于在翻译jsp的时候提醒引擎下面如果处理jsp页面的,有language,import,errorPage,isErrorPage,PageEncoding,contentType,session属性等等
                                        include指令:用于提供请求包含的指令
                                        taglib指令:最重要,用于el调用方法,自定义标签的导入作用
                    3jsp声明: <%!java代码%>这个声明定义的变量,方法类都会存在与和service()方法同级的位置中,很6的。
                    4.jsp脚本表达式 <%=java表达式%>这个语法会帮你自动算出等号后面的值,然后显示到页面上
                    5.jsp脚本片段 <%java代码%>里面可以嵌套任何java代码
                    6.jsp注释   <%--    --%>
                       html注释  <!--  -->
                       java注释   <%//  %>
jsp零散的知识:
                1.其实jsp页面也可以像Servlet一样在web.xml里面写虚拟路径
                2.jsp最佳实践:一开始我们就说了jsp技术出现的原因,这里我们在强调一下,因为Servlet和jsp都是用作开发动态Web网站的,但是Servlet更倾向于数据加工处理,而jsp更倾向于模板美化显示,如果你在Servlet或者是jsp里面同时做数据加工处理或者是模板美化显示的话,那么这个对于程序的可读性和维护性都不太好,所以sun公司成员建议我们在
Servlet里面做数据加工的处理,然后通过转发技术带到jsp页面做美化显示.这样才是jsp的最佳实践.                    
                3.域的总结
                            我们知道javaWeb有四大作用域,从小到大是pageContext request   session application
                            那我们分别什么时候用哪个呢?
                            pageContext----当你的数据只在当前jsp页面混的时候,你可以只用pageContext这个页面
                            request ---当你的数据在一个Servlet里面使用,等一会你要带到另外一个Servlet的话,那就用request域吧
                            session--当你的数据现在要用,过一会你还要用,你可以用session域了.
                            application--当数据你现在要用,过一会别人也要调用,就必须用最大的域,application.




                                            
  *****会话管理:说jsp的同时,插入一个相关的技术,就是会化管理。
           什么是会化管理?举一个例子,当你因为某一个需求,通过打开浏览器,点击多个超链接,达到需求,然后关闭浏览器的这一个过程中。这个过程就叫做会化管理,有多个请求会多个连接。
            会化管理的技术(Cookie和Session):你想买一双鞋子,你访问了淘宝的商品Servlet,点击了一双鞋子,然后你点击付账的Servlet访问第二个jsp,那我问你,凭什么我第二个付钱的页面知道,你在前一个页面要买的是鞋子,而不是一台冰箱呢。所以这个时候,我们就要察觉,在这整个会话过程中我们要保存数据,引出了我们的Cookie和Session技术.
            
        Cookie(客户端保存数据的技术):
                        原理:当浏览器第一次访问服务器的时候,服务器会发送一个Set-Cookie信息给浏览器,通知浏览器保存当前访问的数据信息,以便下次访问的时候带着这个Cookie信息来访问,我服务器能记得你。
                        优点:我在客户端可以保存任意的时间值
                        缺点:浏览器最多能保存200多个cookie信息,服务器最多保存20多个cookie信息,多余的会被覆盖,而且cookie信息是客户端技术,懂技术的人可以随时随地的窃取你的信息,删除你的信息,所以不稳定,不靠谱。


    Session(服务器端保存数据的技术,同时也是一个作用域)
                    生命周期+原理:当你客户端第一次调用request.getSession()的时候,说明客户端浏览器需要用到Session,这个时候服务器就去看看内存空间有没有这个浏览器对应的session空间,如果有,就调用,如果没有,这个时候我的服务器会为你的浏览器创建一个对应的内存空间,同时做上JSESSION标记,并发送一个Set-Cookie信息给浏览器。第二次访问的时候,浏览器会带着Cookie信息来访问,这个时候服务器会帮你找到对应的浏览器的session空间。而这个session什么时候挂掉了,他一共有三种死法,第一种,当你的浏览器半个小时之内不访问我服务器的话,会自动销毁这个对应的session,第二个就是浏览器调用session.invalidate()方法,第三个就是服务器不正常关闭。
                    作用范围:在整个会话过程中
                    作用:在作用范围内共享数据
                    优点 :数据保存在服务器端,安全可靠
                    缺点:数据保存的时间是根据服务器的判断来定的,不能长久保存。 






jsp标签技术:我们知道在jsp页面中最好不要嵌套Java代码,只做美化显示就可以了,java代码放到Servlet里面就可以了,但是假如我们不得不用java代码,这个时候就要用标签来代替java代码了
                1.jsp标签--sun公司提供的原生标签,可以直接使用
                            <jsp:include>实现请求包含
                            <jsp:forward>实现请求转发
                            <jsp:param>请求转发和请求包含时需要带的参数 
                2.EL表达式  ${}
                       (1)获取数据
                            作用1:获取常量
                            作用2:获取变量
                            作用3:获取数组
                            作用4:获取集合
                            作用5:获取javaBean
                        (2)运算数据
                                    算术运算
                                    逻辑运算
                                    比较运算
                                    三元运算
                                    empty运算---判断变量字符串集合数组对象是否为空,或者里面有没有值,两者有一个不符合就返回true
                        (3)获取常用开发对象
                                el表达式的11个内置对象
                                    pageContext---代表当前的jsp页面
                                    pageScope--page域中所有属性的集合
                                    requestScope--request域中所有属性的集合
                                    sessionScope--session域中所有属性的集合
                                    applicationScope--application域中所有属性的集合
                                    param---所有请求参数组成的map
                                    paramValues---所有请求参数组成的map,键是数组
                                    header--所有请求头组成的map
                                    headerValues--所有请求头组成的map,键是数组
                                    cookie--所有cookie信息组成的map
                                     initParam--所有web应用初始化参数组成的map
                       (4)el表达式调用java方法(不需要知道过程,只要会用taglib指令导入就行了)
                                      ***写一个类,里面定义一个静态的方法
                                      ***在WEB-INF中除classes和lib目录中定义一个tld描述文件描述这个类
                                      ***在jsp页面用taglib导入tld文件,就可以使用了
                3.jstl标签库(和el表达式结合使用)
                            核心标签库(core)重点
                            cset   可以设置或修改变量,map,javaBean的值
                            cout    输出常量,变量,默认值,转义字符
                            cremove  移除任意作用域的值
                            ccatch   捕获当前页面的异常
                            cif    模拟if--then
                            cchoose/cwhen/c   模拟Java开关语句
                            cforeach       for循环
                            cfortakens       字符串切割
                            cimport           请求包含
                            credirec            请求重定向
                            cparam
                           sql标签库    xml标签库----都不用掌握
                           国际化标签库
                           jstl函数直接调用就行了
                4.自定义标签----我们知道,工作的时候,各式各样的需求都有,所以我们很有可能对系统提供的标签库没有满意,所以这个时候要自己定义标签,一共有三步
                        传统标签:
                            *****写一个类实现Tag
                            *****tld描述文件描述
                            *****jsp页面导入文件,然后使用
                            过程:当jsp页面找到自定义传统标签时候,会去找对应的类,并创建相应的类对象,这个对象会一直驻留在空间中,供当前的访问或者后续的访问服务,一开始调用的是setPageContext(PageContext pc)方法,如果这个标签有父类标签就会调用setParent(Tag t)方法,然后当Jsp发现开始标签时候,调用setStartTag方法 ,这个方法里面可以做处理的操作,也要注意里面的返回值,Eval_body_include表示标签体执行,skip_body表示不执行。然后发现结束标签调用setEndTag()方法,里面的Eval_page返回值表示页面内容执行,Skip_page表示页面内容不执行,最后调用release()方法,整个过程就此结束
                    注意:不过我们现在很少使用传统标签了,因为比较麻烦,我们需要自己判断开始标签和结束标签的标签体是否执行,需要自己通过返回值来判断程序的执行。现在用的都是简单标签了
                       简单标签:也有三步
                                  **写一个类实现SimpleTag接口或者继承SimpleTagSupport类。
                                  **tld文件描述这个类
                                  **jsp页面导入文件,然后使用
                       过程:当jsp页面找到自定义简单标签的时候,会去找对应的类,并创建相应的类对象,这个对象会一直驻留在空间中,供当前的访问湖综合后续的访问服务,一开始调用setJspContext(JspContext jsp)方法,如果这个标签有父类标签的话,就调用setParent(JspTag j)方法,然后调用setJspBody(JspFragment fragment)这里面是标签体的内容,可以获取,然后可以调用doTag()方法做一些操作,当你的自定义简单标签使用完毕的时候,服务器会帮你销毁他。整个过程完毕。累死我了
 


至此,整个jsp的基本内容已经完毕,足足花了我将近3个小时的时间,希望可以造福需要的人。 
     
0 0