**********************为什么有JSP***********************

servlet 输出比较麻烦 ,JSP用来简化servlet输出


**********************什么是JSP***********************

Java Server Pages 服务器端技术


jsp= html + java


******************JSP的工作原理(第一次访问JSP页面时为什么比较慢)*******************

第一次访问时

JSP引擎 编译 运行
index.jsp--------->index_jsp.java(Servlet源程序)------->indx_jsp.class---------> 遵循的是servlet的生命周期

 

第二次访问时


如果jsp 没有发生改变 直接调用servlet的service方法

如果jsp 发生了变动 从新转换


tomcat

JSP Servlet

index.jsp02 index_jsp.java01

 

jsp转换后的servlet在work文件夹中

 

*******************************JSP的五个组成部分*******************************

一.模板元素

html 和 xml


二.注释元素

1. html注释


<!-- 注释内容 显示到客户端浏览器的源代码中-->


2. JSP注释

<%-- 注释内容--%>

例如:

<%--我是JSP注释 我只会存在于JSP文件中 转换后的Servlet中不存在 --%>


3. Java注释

转换后的servlet中也存在

<%
//
/*
*/

/**
*/
%>


****************************************三.指令元素*******************************************

一. page

1 import 导入

<%@ page import="java.util.*,com.vo.Category" %>

2 errorPage 和isErrorPage

errorPage: 错误处理页面, 当前JSP页面如果发生错误,会自动跳转到errorPage指定的页面,然后由这个页面给用户响应信息


isErrorPage: 如果错误处理页面中,想使用exception这个内置对象 需要 在错误处理页面中加入isErrorPage="true"

 

3.pageEncoding 和 contentType

pageEncoding: 页面编码 要和JSP页面本身的编码方式一致才不乱码


实质是指定 JSP引擎 解码 读进来的JSP文件的解码方案

 


contentType: 会转换成servlet中的response.setContentType("text/html;charset=utf-8");


SCWCD

Sun Certified Web Component Developer

 

二. include


<%@include file="reused.jsp" %>

静态包含 相当于把reused.jsp的全部代码 拷贝到这个位置

三. taglib


****************************************四.脚本元素*******************************************


一.声明


<%!
声明变量和方法

--会转换成servlet中的成员变量或成员方法
%>

 

二. scriptlets


<%
java代码片段1

%>


<%
java代码片段2

%>


多个scriptlets代码 会合成一个 转换到 servlet中的 _jspService方法中

 

三. JSP表达式


<%="你好"%>


相当于


<%
out.println("你好");
%>


**********************五.动作元素***********************


1. 动态包含


<jsp:include page="reused.jsp"/>

 

 

**********************静态包含和动态包含的区别**************


1. 动态包含可以传参数,静态包含无法传参


2. 静态包含 父页面和被包含的页面 合成一个jsp 一起转换成 一个servlet
2个JSP页面 1个servlet

动态包含吧
2个JSP 2个servlet


3. 静态包含会 被包含页面的全部代码 都引入(包括指令元素)

动态包含 不会引入 被包含页面的指令元素

 


如何选用??

需要传参使用动态包含.
如果复用的页面经常改动,使用动态包含…


因为如果使用静态包含,需要把整个大的页面全部从新转换成servlet效率低,使用动态包含就只会从新转换被引入的页面.