请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[JavaEE] Java零基础学习之掌握JSP技术

[复制链接]
沫沫老师 发表于 2018-12-12 16:15:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、Java初级开发之jsp概述
    1.关于jsp
    JavaServer Pages简称jsp,从“server”这个词可以看出,这其实也是一门java服务端技术,其实可以简单的把jsp认为是servlet,一点错也没有。Jsp的实质,就是客户端需要的资源是通过jsp技术动态生成的。
    2.jsp的技术原理
  1)当客户端在访问一个jsp资源时,服务器上有相应的servlet来负责jsp资源,那么该servlet将会把jsp页面翻译成一个servlet,然后执行该servlet的service方法。
    2)服务器将jsp翻译成java程序(就是一个Servlet),然后执行该Servlet的service方法,在方法内部动态地向客户端写html代码。因此jsp就是一个servlet,也就是jsp页面将被翻译成servlet
    3)jspservlet的选择
    jsp就是servlet,那么如果碰到需要写繁多的html代码,建议使用jsp,如果需要写繁多的java代码,建议使用servlet。
二、JSP技术详解
    1.JSP脚本
    就是怎样在jsp页面中使用java代码,使用了脚本的地方,就不会作为输出流的内容,而是作为java代码来执行。使用方式有三种:
    1) <% java代码 %>,jav代码会被作为程序的一部分来执行,而不会被翻译成out.write(),这是常用的。
    2) <% java代码 %>,会被翻译成 out.print(java代码)
    3) <% java代码 %>,声明成员变量。
    4)jsp的注释方式
    html的注释:用户看得到,程序员也看得到
    java的注释:// 单行注释 /多行注释/,用户看不到,但是会被翻译
    jsp的注释:用户看不到,不会被翻译,只有程序员在写jsp页面时才看得到。
    2.三大指令
    1)page指令。page指令是用于告诉服务器该如何翻译此jsp页面。通过page指令的属性来指明翻译的效果。language,指的是jsp页面支持哪种语言,只支持java,所以该属性可以省略。pageEncodingcontentType写一个就行,建议使用pageEncoding,更加简单。session,默认值是true,默认情况下服务器会为该页面开辟一个session空间。import,用于导入该页面中的java类需要用到的包装。errorPage,当发生错误时跳转到的资源,注意,该地址是一个服务器地址。isErrorPage,默认值是false。当在web.xml中配置错误页面时,需要将该jsp页面的isErrorPage设为true。总之,一般情况下,page指令就这么写即可。
    2)include指令:静态包含,file属性使用的是服务器地址。include指令是用于在一个jsp页面中包含另一个jsp页面,两个页面组合成一个页面发送给客户端。所谓的静态包含,在翻译时是把被包含的jsp页面写给客户端。那么此时客户端拿到的是两套html标签。
    3)taglib指令:标签,taglib指令用于引入第三方标签库,通过taglib指令中的prefix指明前缀,通过前缀来使用第三方标签库中的标签。
    3.四大域对象 (jsp有四个,servlet有三个(request,session,servletContext))
    1) pageContext
    (1)pageContext作为域对象。描述当前page的上下文。那么pageContext对象是一个域对象,所谓域对象,就是提供了一个区域,用来存储数据。因此当前的page就能向pageContext对象中存储数据。
    pageContext域对象的作用范围:当前page(页面)
    setAttribute(String key,Object value);
    getAttribute(String key);
    removeAttribute(String key);
    向其他域对象中操作数据。pageContext.setAttribute(String key,Object value, int scope);向其他域对象中存值。
    pageContext.getAttribute(String key, int scope);向其他域对象中取值。
    pageContext.removeAttribute(String key, int scope);向其他域对象中移除值。
    int scope来自于PageContext类的常量。
    REQUEST_SCOPE: 表示request域。
    SESSION_SCOPE: 表示session域。
    APPLICATION_SCOPE: 表示application域。
    findAttribute(String key):Object :这是通过键,向所有域中搜索数据。
    搜索的顺序:
    pageContext->request->session->application
    (2)可以通过pageContext对象来获取其他八个内置对象。通过pageContextget*()来获得。
    2)request。作用范围:一次请求。
    3)session作用范围:一次会话。
    4)application。作用范围:当前web应用
    4.九大内置对象
    所谓的内置对象,即在jsp页面的脚本中能直接使用的java对象。out,输出流。当通过outwrite()写内容时,实际是往out的缓冲区(默认大小是8kb)中去写,有两种情况导致缓冲区的内容会冲刷进底层的输出流中。
    1)out对象被销毁
    2)out的缓冲区不够用了。其实我们可以设置out缓冲区的大小。如果缓冲区是0kb,那么out就把内容直接写到response缓冲区中。
    pagethis,表示当前的Servlet对象。
    pageContext:重点,表示当前page的上下文对象,也是一个域对象。
    session:当jsp页面的page指令的session属性为true时,才会有session对象。
    request
    response
    exception jsp页面的page指令的isErrorPage属性为true时,才会有exception对象。
    application实际就是ServletContext对象。
    config:实际就是ServletConfig对象。
    5.Jsp标签
    1) jsp:include。动态包含:在一个页面中包含另一个页面的内容。它和静态的区别在于静态包含会在翻译的过程中直接翻译被包含的页面,被包含的页面不会产生java文件。而动态包含会在翻译的过程中只翻译自己页面的内容,被包含的页面的翻译交给相应的类来完成,被包含的页面会产生java文件,实际开发中更加常用动态包含。
    2)jsp:forward。请求转发,与servlet中的请求转发的效果一致。

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们
好程序员
千锋好程序员

北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商场4层

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启