博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP
阅读量:7089 次
发布时间:2019-06-28

本文共 3961 字,大约阅读时间需要 13 分钟。

hot3.png

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方法中
  • 示例代码 :
<% for (int i = 0; i < 10; i++) { out.print("

hello

"); }%>
<% for (int i = 0; i < 10; i++) {%>

hello

<% }%>

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的九大内置对象

内置对象 类型 作用
request HttpServletRequest 请求对象
response    HttpServletResponse 响应对象
session HttpSession 会话对象
application ServletContext web应用全局唯一对象
config ServletConfig 初始化数据
page Object 当前JSP
pageContext PageContext 当前JSP的上下文
exception Throwable 当页面是一个错误页面,用exception获得异常信息 
out     JspWriter 向输出流输出内容

 

7、JSP的四个域对象

数据域      作用范围 操作数据时使用的对象
page     当前页面 pageContext
request 当前请求 request
session 当前会话 session
application HttpSession    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

你可能感兴趣的文章
AOJ 739 First Blood
查看>>
java 自带的工具
查看>>
10-08C#基础--进制转换
查看>>
[C++基础]007_char、wchar_t、wcout、setlocale()
查看>>
Java纯POJO类反射到Redis,反射到MySQL
查看>>
Localization native development region 设置属性(转)
查看>>
10.25作业
查看>>
Content is not allowed in prolog错误
查看>>
383. 装最多水的容器
查看>>
MVC3.0----整理之一
查看>>
linux中磁盘分区以及如何将磁盘挂载到系统中
查看>>
装饰器
查看>>
iOS开发-UI基础Demo
查看>>
wcf微软列子
查看>>
Oracle 相关概念
查看>>
Oracle中函数/过程返回结果集的几种方式
查看>>
PowerDesigner连接Oracle并导出表结构
查看>>
重建二叉树
查看>>
Winform 显示远程图片
查看>>
MS14-025引起的问题 - 2
查看>>