一,JSP
JSP(Java Server Pages)代替servlet 简化输出,实质就是servlet。 第一次运行JSP的过程:
第二次访问同一个页面index.jsp,如果没有更改index.jsp 不会再转换了 直接调用 servlet的service方法,如果更改了index.jsp 就重新转换。
二,JSP的五个组成部分
(一)模版元素2个
html 和xml XML=Extensible Markup Language 作用: 1. 当做配置文件使用 web.xml 2. 保存数据(当做数据库使用 txt xml)
(二)注释元素 3个
1.html注释
会显示在客户端源码中
2.JSP注释
<%–我是JSP注释,不会显示到浏览器的源文件中,只存在于JSP文件中,转换成的servlet中没有该注释内容–%>
3.java注释
java注释,不会显示到浏览器的源文件中,JSP中有,转换成的servlet源文件中也有
(三)指令元素 3个
1.page指令(页面指令)
< %@page %>常用的指令元素的属性 (1)import 导入 相当于java的import
(2)errorPage 和isErrorPage errorPage 表示用来处理错误的页面 处理错误的页面 如果想使用exception内置对象 必须要 加一个 isErrorPage=”true” 这时 exception内置对象才会被创建
(3) pageEncoding 和contentType contentType : 相当于 servlet中的 response.setContentType(“text/html;charset=utf-8”);
作用:
1.设置服务器输出的编码方式是utf-8(生成页面的编码) 默认是ISO-8859-1 Latin-1 西欧文字 1个字节 256
2.提示浏览器使用utf-8解码
2.include 指令(静态包含)
<%@include file="reused.jsp"%>3.taglib
<%@taglib prefix="c" uri="taglibURI" %>(四)脚本元素 3个 1.声明
<%! 成员变量或成员方法%>被转换成servlet中的成员变量和成员方法
2.JSP表达式
<%="你好,世界"%> 相当于 <% out.println("你好,世界"); %>转化成servlet中的JspWriter out;
3.scriptlets
<% int a = 10; %>多一个<% %> 会合成一个 一起转换成Servlet中的service(_jspService) 在<%%>里定义的变量是局部变量,这样同名的局部变量把实例变量隐藏了,想访问实例变量要加this.a
(五)动作元素 7个
1.动态包含
<jsp:include page="reused.jsp" flush="true"> <jsp:param name="username" value="zzy"/> </jsp:include>flush: 表示在reused页面包含进来之前,是否刷新include1.jsp页面,一定要改成true
2.传参
“` < jsp:param name=”username” value=”zzy”/>
3.转发
转发 < jsp:forward page=”msg.jsp”/> 重定向 <% response.sendRedirect(“msg.jsp”); %>
4.< jsp:useBean>、< jsp:setProperty>、< jsp:getProperty>三个
5.< jsp:plugin> 可以使用它来插入Applet或者JavaBean
转发和重定向的区别 3个
(1)转发它是服务器的内部行为 URL地址不变 一个请求一个响应 重定向服务器的外部行为,强制用户发出另一个请求,两个请求,两个响应,URL地址改变
(2)由于转发是服务器的内部行为,只能转发到本服务器上的其他资源(jsp、servlet) 不能跳到其他服务器的资源 如百度; 重定向由于是服务器的外部行为,可以跳转到其他服务器的资源。
(3)转发以后的代码不会被执行(因为转换后的servlet中有句return,表示结束该方法,所以后面都不执行了) 重定向 后的代码仍然会被执行
静态包含和动态包含的区别 3个 (1) 静态包含是将被导入页面的代码完全融入,两个页面融合成一体,转换成一个servlet 动态包含中 页面和 被导入页面 会转换成两个servlet,在servlet中使用include那句话把运行结果导入
(2)静态包含 被导入页面的指令元素也会被导入; 动态包含指令元素不会被导入
这样如果静态包含 页面 和 被导入的页面定义了不同的contentType,由于静态包含指令元素也会被导入,这样会发生contentType冲突的情况,而动态包含不会.
(3)动态包含还可以传参
