JSP的学习(一)——基本语法

一、JSP基础

①简介

JSP全称Java Server Pages,Java服务器页面,是一种动态网页开发技术,由sun公司定义,现在属于Oracle公司。

JSP是基于html模板,可以在html模板中嵌入Java代码和JSP中的标签。JSP=html+Java代码+一系列JSP标签(主要用作数据的展示)。

JSP本质是Servlet,但是因为Servlet输出页面很繁琐,Servlet生成的页面没有预览工具,必须输出之后看效果,所以开发定义了JSP。

JSP是动态资源。

Servlet:运行在服务器上的java程序,适合编写Java代码,写网页很困难。

JSP:适合编写动态内容,不适合写java代码,主要用于显示页面。

JSP经过编译之后,会有一个.java和.class的文件。

JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

②JSP作用

 jsp性能好,可以在html页面中动态嵌入元素

服务器调用的是已经编译好的JSP文件

JSP基于Java Servlet Api,有很多强大企业的支持。

JSP可以与处理业务逻辑的Servlet一起使用,该模式被Java Servlet模版引擎所支持。

JSP专门负责页面展示数据,一般不要在JSP中嵌套Java代码!<%  %>

后期用EL和JSTL表达式进行改进。 

③JSP页面组成

二、JSP语法

JSP页面中可以包含任意量的Java语句、变量、方法或表达式

①JSP嵌入Java代码

ⅠJava脚本

<%  java代码  %>    在这个标签中编写的java代码  局部的JAVA代码 JSP翻译之后代码是在 service方法中

ⅡJava声明

 <%! java代码 %>    这个标签可以用来声明变量、方法、类变量、成员变量、成员方法类、成员内部类

ⅢJava表达式

<%= java代码 %>    在这个标签中写的java代码将会出现在out()中,向页面输出该标签中的代码一定不要加分号,就是指经过编译后是这样的:

②JSP的注释

html的注释:<!--html注释-->页面不显示,但是在页面查看源码可见

JSP的注释:<%-- JSP注释--%> 页面不显示,查看源码也不可见

JSP脚本注释://单行注释,/**/多行注释

③JSP指令

作用:告诉JSP引擎如何运行JSP文件中的内容

语法:<%@ 指令名称 属性名称1=“属性值1” 属性名称2=“属性值2” ......%>

Ⅰpage指令

通过设置内部的多个属性定义整个页面的属性

page指令属性:

language:JSP中可以嵌入的语言,目前只有Java

import:用来导包

pageEncoding:设置当前jsp页面的编码方式

contentType :设置浏览器查看这个页面时使用编码方式。等同于response.setContentType(“text/html”;charset=utf-8);服务器发送客户端的内容编码

pageEncoding: Jsp文件本身的编码

session:默认是true 当前jsp中能否使用session (如果为true,则在这个jsp中就已经可以使用session对象)

isELIgnored:当前页面能否使用EL表达式 默认值false

buffer:缓存区大小。JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.

autoFlush:是否自动刷新缓冲区  默认true

errorPage:指定错误页面

isErrorPage:设置为错误页面 (设置为错误页面,就有处理异常的功能),可以在JSP获取exception异常对象

不过值得注意的是,有关错误页面属性一般不用,错误处理一般是在web.xml中统一进行配置:

<error-page>
     <error-code>404</error-code>
     <location>/nofound.jsp</location>
</error-page>
<error-page>
     <error-code>500</error-code>
     <location>/error.jsp</location>
</error-page>

Ⅱinclue指令(面试中经常使用到)

 静态包含:把其它资源包含到当前页面中  <%@ include file="header.jsp" %>

 动态包含: <jsp:include page=”header.jsp"></jsp:include>

 两者的区别:  

翻译的时间段不同(可在tomcat工作目录下查看)

静态包含:在翻译时就把两个JSP文件进行合并一个JSP文件,就是把JSP内容直接合并

动态包含:翻译的时候翻译成2个JSP文件,暂时先不会合并JSP文件,当代码执行到include时,才包含另一个JSP的文件的内容包含进来!

Ⅲtaglib指令

作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>

如果内置的标签不够用,那么程序员可以自己开发标签!

④JSP动作元素

使用标签的形式表示一段Java代码

Ⅰ<jsp:forward>转发

<jsp:forward page=""></jsp:forward>  转发,相当于:<%request.getRequestDispatcher().forward();%>

Ⅱ<jsp:include>包含

<jsp:include page="" ></jsp:include>包含其他页面

Ⅲ<jsp:param>

<jsp:forward page="2.jsp">

              <jsp:param value="hello" name="name"/>

</jsp:forward>

        获取使用 request.getParameter(“name”)

Ⅳ<jsp:useBean>寻找或实例化一个JavaBean

<jsp:useBean id="" class="" scope=""></jsp:useBean>

             id      起个名字

            class    javabean的全名

            scope    存放的作用域                  

<jsp:useBean id="u" class="com.bruce.domain.User" scope="page"></jsp:useBean>       

相当于:

User u = new User();

pageContext.setAttribute("u",u);

Ⅴ<jsp:getProperty>和<jsp:setProperty>

<jsp:useBean id="u" class="com.bruceliu.bean.User" scope="page"/>
   
   <jsp:setProperty property="userName" name="u" value="德华"/>
   <jsp:setProperty property="age" name="u" value="18"/>
   
   <hr/>
   
   <jsp:getProperty property="userName" name="u"/>
   <jsp:getProperty property="age" name="u"/>
   ${u.userName }
   ${u.age }

JSP内置对象

out对象:JspWriter类型,负责页面数据输出

response对象:HttpServletResponse类型,负责响应浏览器的请求

request对象:HttpServletRequest类型,负责接收浏览器发送过来的请求参数,例如表单的信息.......

session对象:HttpSession类型,负责封装用户请求会话的相关信息,例如用户的登录状态...

application对象:ServletContext类型,负责封装WEB应用相关应用

pageContext对象:PageContext类型,封装网页属性相关信息

page对象:  Object类型,封装当前JSP页面信息

config对象:  ServletConfig类型,封装了JSP的配置

exection对象: thowable类型,封装JSP的异常信息

Ⅰout对象

是JspWriter类型  字符流

out和 response.getWriter() 不是同一个流

out流 和  response.getWriter() 都是字符流 都有缓冲区

out流的执行是 先把 缓冲区中的内容 输出到 response.getWriter()的缓冲区中,再由response.getWriter() 这个流统一输出。

ⅡpageContext对象

pageContext(父类是JspContext):JSP的上下文对象  可以用来获得其他八个内置对象

  • pageContext.getRequest();
  • pageContext.getResponse();
  • pageContext.getSession();
  • pageContext.getServletConfig();
  • pageContext.getServletContext();
  • pageContext.getOut();
  • pageContext.getException();
  • pageContext.getPage();

这些对象可以直接在JSP中获得,那么pageContext提供这些方法有什么用?

一般用于框架的编写,自定义标签的编写等。

pageContext也是一个作用域   范围就是当前页面

setAttribute("",Object);          

getAttribute("")

removeAttribute

可以操作其他三个域对象(request,session,application)的数据

Ⅲrequest对象

jspService方法的参数 HttpServletRequest类型。用法与Servlet中的request用法相同

​​​​​​​Ⅳresponse对象

jspService方法的参数 HttpServletResponse类型。用法与Servlet中的response用法相同

Ⅴ​​​​​​​session对象

HttpSession类型

Ⅵ​​​​​​​​​​​​​​application对象

ServletContext类型,用法和Servlet中的ServletContext用法相同

Ⅶ​​​​​​​config对象

ServletConfig类型,用法和Servlet中的ServletConfig用法相同

Ⅷ​​​​​​​page对象

Object类型,Object page = this;

Ⅸ​​​​​​​exception对象

Throwable类型,只有当jsp的isErrorPage="true"时,才会出现该对象

⑥JSP运行原理

  • 第一次访问JSP的时候,JSP会被翻译.java的源文件,然后再被编译.class的字节码文件,最后执行字节码文件,呈现运行结果。
  • 第二次访问该JSP的时候,先去检测这个JSP内容有没有发生改变,如果内容有改变,那么将会执行翻译→编译→执行过程。如果JSP没有发生改变,那么将直接运行字节码文件,返回结果。
  • JSP为什么第一访问比第二次访问速度慢的原因???因为你第一次执行需要翻译和编译,第二次执行不再需要

⑦JSP和Servlet的关系

  1. JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
  2. JSP编译后是"类servlet"。
  3. Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
  4. 而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
  5. JSP侧重于页面显示,Servlet主要用于控制逻辑(功能)。​​​​​​​

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/82899434