专栏首页深圳java培训深圳Java培训:Java零基础学习之掌握JSP技术
原创

深圳Java培训:Java零基础学习之掌握JSP技术

深圳Java培训:Java零基础学习之掌握JSP技术

一、Java初级开发之jsp概述

1.关于jsp

JavaServerPages简称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.jsp与servlet的选择

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,所以该属性可以省略

·pageEncoding和contentType写一个就行,建议使用pageEncoding,更加简单

·session:默认值是true,默认情况下服务器会为该页面开辟一个session空间

·import:用于导入该页面中的java类需要用到的包

·errorPage:当发生错误时跳转到的资源,注意,该地址是一个服务器地址。

·isErrorPage:默认值是false。当在web.xml中配置错误页面时,需要将该jsp页面的isErrorPage设为true.

404

/error.jsp

总结:一般情况下,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(Stringkey,Objectvalue);

getAttribute(Stringkey);

removeAttribute(Stringkey);

·向其他域对象中操作数据.

pageContext.setAttribute(Stringkey,Objectvalue,intscope);向其他域对象中存值

pageContext.getAttribute(Stringkey,intscope);向其他域对象中取值

pageContext.removeAttribute(Stringkey,intscope);向其他域对象中移除值

intscope来自于PageContext类的常量

REQUEST_SCOPE:表示request域

SESSION_SCOPE:表示session域

APPLICATION_SCOPE:表示application域

·findAttribute(Stringkey):Object:这是通过键,向所有域中搜索数据。

搜索的顺序:

pageContext->request->session->application

(2)可以通过pageContext对象来获取其他八个内置对象

通过pageContext的get*()来获得。

2)request

作用范围:一次请求

3)session

作用范围:一次会话

4)application

作用范围:当前web应用

4.九大内置对象

所谓的内置对象,即在jsp页面的脚本中能直接使用的java对象。

·out:输出流

当通过out的write()写内容时,实际是往out的缓冲区(默认大小是8kb)中去写,有两种情况导致缓冲区的内容会冲刷进底层的输出流中

1)out对象被销毁

2)out的缓冲区不够用了。其实我们可以设置out缓冲区的大小。如果缓冲区是0kb,那么out就把内容直接写到response缓冲区中。

·page:this,表示当前的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中的请求转发的效果一致。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解Java的整型类型:如何实现2+2=5?

    public static void main(String[] args) throws Exception {

    Jerry Wang
  • CentOS6下安装Java JDK8

    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151....

    yuanfan2012
  • 聊聊JavaScript和Scala的表达式 Expression

    函数f的实现,会检查这两个参数的类型,如果是函数,则执行函数调用,再打印其返回值,否则直接打印传入的表达式的值。

    Jerry Wang
  • CentOS下部署JDK+Tomcat8

    1、Tomcat需要JDK环境,参考之前的文章CentOS6下安装Java JDK8,提前安装好JDK环境

    yuanfan2012
  • Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序

    文章的标题看似自相矛盾,然而我在“正确”二字上打了引号。我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点。

    Jerry Wang
  • Elasticsearch的BootstrapCheck

    elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/bootstrap/BootstrapCh...

    codecraft
  • 使用javap分析Java的字符串操作

    ldc #16: 首先JVM底层的原生方法StringTable::intern被调用,生成String的内部存储实现char[]。然后执行ldc #16, 将...

    Jerry Wang
  • JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    设计模式(Design Pattern)中的桥接模式,有的朋友平时工作可能很少用到。桥接模式的核心在于将抽象部分和它的实现部分分离,使它们都可以独立的变化。听起...

    Jerry Wang
  • 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

    所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。

    Jerry Wang
  • 在云环境上使用SLF4J对Java程序进行日志记录

    我开发了一个Java应用,部署到云环境上之后,用postman测试发现不能按照我期望的工作,但是返回的消息对我没有任何帮助。

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券