JSP

1、JSP简介

Servlet的缺点

  1. 生成网页的时候,开发不方便
  2. 不利于页面的调试和维护
  3. 无法使用开发工具对页面代码进行调试

JSP : Java Server Page

  1. Sun公司参考ASP推出的开发语言
  2. 和Servlet一样,都是动态网页开发技术
  3. JSP在运行时,必须翻译成Servlet,然后才能运行
  • JSP页面的书写基本和HTML页面的书写一样

  • 可以在其中通过<%%>嵌入Java代码

Servlet : 嵌入HTML的Java文件

JSP : 嵌入Java的HTML文件

2、JSP运行原理  

171144_eHae_3669094.png

  • JSP翻译成Servlet时有固定的包名: org.apache.jsp

  • JSP翻译成Servlet时生成的文件名固定的格式 : 文件名_jsp.java, 例如hello.jsp生成的Servlet名字是hello_jsp.java

  • 什么时候使用JSP什么时候使用Servlet

    • Java代码多时使用Servlet

    • HTML代码多时使用JSP

  • JSP效率会很低吗?

    • 只有第一次访问JSP时会被翻译,以后访问如果没有更改过JSP的代码,是不会被再次翻译的 

3、JSP的脚本

 

声明

  • 代码 : <%! %>
  • 作用 : 声明的内容会被翻译成Servlet的成员变量, 成员方法和内部类
  • 翻译规则 : 原样翻译到Servlet文件顶部,成为成员变量,成员方法和内部类
  • 示例代码 :
    <%!
    // 声明一个成员变量
    int i = 0;
    // 声明一个内部类
    class InnerClass {
    }
    // 声明一个成员方法
    public void innerMethod() {
    }
    %>

     

输出表达式

  • 代码 : <%= %>
  • 作用 : 用于向页面输出内容,等价于out.print(). 不能在内容后面添加";"分号
  • 翻译规则 : 内容会被翻译到_jspService方法中,通过out.print()方法输出到页面

示例代码 :

<!-- 正确写法 -->
<%="hello" %>
<!-- 错误写法 -->
<%="hello"; %>

代码块

  • 代码 : <% %>
  • 作用 : 在其中书写任意Java代码.代码块可以和html嵌套使用
  • 翻译规则 : 原样翻译到Servlet文件的_jspService方法中
  • 示例代码 :
<!-- 用Java代码完成for循环 -->
<%
	for (int i = 0; i < 10; i++) {
		out.print("<h1>hello</h1>");
	}
%>
<!-- Java代码和HTML标签嵌套使用完成for循环 -->
<%
	for (int i = 0; i < 10; i++) {
%>
<h1>hello</h1>
<%
	}
%>

4、JSP的注释

 

语法格式 JSP源文件中是否存在    Servlet源文件中是否存在HTML源文件中是否存在

JSP注释 

 <%-- --%>                       

Java注释

文档注释 : /** */

多行注释 : /* */

单行注释 : //

HTML注释

<!-- -->

5、JSP的指令

作用 : 声明当前页面的一些属性和行为的

格式 : <%@指令名称 属性=值 属性=值%>

注意 : 指令可以出现多次.指令的位置随意,一般放在jsp最上面

分类 :

  • page : 声明当前页面的一些属性和行为

  • include : 包含(静态包含)

  • taglib : 导入标签库

page指令的属性:

import : 完成 JSP翻译后 Servlet 导包

  • jsp在翻译为Servlet 默认导入以下四个包

    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    jre默认导入 java.lang 

    在jsp中如果使用的类不属于以上四个包,需要导包

pageEncoding : JSP文件源代码在硬盘上的编码集

contentType : 在Servlet生成HTML传递给浏览器时采用的编码</font>

pageEncoding 和 contentType 的关系

  • 两个属性如果都指定了,就各自使用各自的值

  • 两个属性如果都不指定,就是用ISO-8859-1

  • 如果只指定一个,两个属性都使用指定的这个值

language : 只能为java

extends : JSP翻译后Servlet后要继承的父类,这个属性一般不设置,如果非要设置,继承类必须是Servlet的实现类

session : 定义JSP中是否可以直接使用Session隐含对象

  • 如果属性设置为true在JSP翻译Servlet时生成以下两句代码:

    HttpSession session = null;
    session = pageContext.getSession();

     

  • 如果jsp中想使用HttpSession对象,session属性默认值必须为true

buffer : 设置缓冲区大小

autoFlush : 设置当缓冲区满后,是否自动刷出

isELIgnored : 设置JSP是否执行EL表达式

  • isELIgnored="false" 不忽略---执行解析

  • isELIgnored="true" 忽略 ---- 不解析

  • 一般就是默认值false

errorPage : 当前页面发生错误时转发到哪个页面

  • IE 浏览器有一个默认的错误友好页面 ,如果想看到自己编写的友好页面,必须关闭IE默认友好页面 : IE 工具栏 --- Internet选项 ----- 高级 -----显示友好HTTP错误信息,将勾去掉

isErrorPage : 设置该属性后,可以使用exception内置对象,获取错误相关信息

 

include指令

  • 用于静态包含页面.可以将页面公共部分提取出来,通过include完成页面布局

  • 语法:<%@ include file="文件路径" %>

  • include指令会将整个目标页面包含进来.所以被包含页面,不需要是一个完整HTML,只要编写HTML片段就可以了

  • 如果被包含页面存在错误,只要包含后的Servlet没有错误,就可以执行

6、JSP的九大内置对象

内置对象类型作用
requestHttpServletRequest请求对象
response   HttpServletResponse响应对象
sessionHttpSession会话对象
applicationServletContextweb应用全局唯一对象
configServletConfig初始化数据
pageObject当前JSP
pageContextPageContext当前JSP的上下文
exceptionThrowable当页面是一个错误页面,用exception获得异常信息 
out    JspWriter向输出流输出内容

 

7、JSP的四个域对象

数据域     作用范围操作数据时使用的对象
page    当前页面pageContext
request当前请求request
session当前会话session
applicationHttpSession   application

 

8、pageContex对象简介

代表当前页面上下文

作用

  • 操作其他三个域对象中的数据

    • API : pageContex.xxxAttribute(String name, Object value, int scope)

  • 可以获得其它八个隐含对象

    • 例如pageContext.getRequest()可以获取内置的Request对象.

  • 快速获取四个数据域中的数据

    • findAttribute方法会依次在page 、request 、session 、 application 四个数据范围进行数据查找.如果找到了就不会往下查找

    • 如果在EL表达式中直接使用 ${name}会调用findAttribute方法在四个范围中依次查找数据

9、JSP_动作标签

JSP指令和JSP标签区分?

  • JSP 指令 Directive
  • JSP 标签 Action

JSP中六个动作标签

  • <jsp:useBean>

  • <jsp:setProperty>

  • <jsp:getProperty>

  • <jsp:include>

  • <jsp:forward>

  • <jsp:param >

  • <jsp:include> 等价于 request.getRequestDispatcher().include

  • <jsp:forward> 等价于 request.getRequestDispatcher().forward

  • <jsp:include>标签

    • 功能上等价于<%@ include %>

    • 语法:<jsp:include page="文件路径" />

    • 被包含页面不需要完整html,只需要编写html片段

    • jsp:include和@include的区别

      • @include是JSP指令,属于静态包含.在jsp翻译为Servlet时完成包含动作,包含的内容是目标页面翻译为Servlet时的源代码,最终只会生成一个Servlet

      • jsp:include是JSP标签,属于动态包含.在servlet执行时完成包含动作,包含的内容是目标jsp翻译为Servlet生成的HTML页面,每个被包含的JSP都会生成一个单独的Servlet,所以最终会生成多个Servlet

  • <jsp:forward >标签

    • 功能上等价于 request.getRequestDispatcher("").forward(request,response);

 

转载于:https://my.oschina.net/px828261/blog/1538455

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值