javaweb - jsp
1. 基本元素
- 1.jsp注释:是对web服务器的注释
- 2.声明:(不要忘记加分好)
定义成员变量或方法
<%! ; %> <%! private String name; %>
<% String name="bob"; %> 方法级别代码
<%! //成员变量,成员方法 private String name; public void fun(){ } %> <% //局部变量 String name = "中国"; out.print(name); fun(); %>
<%=this.name%>
<%= 表达式 %>
- 3.表达式:(动态的输出信息)不要加分号
<%= %>
e.g <%= name %>
- 4.脚本元素(scriptlet)
<% Java代码 %>
e.g
<%
String name="bob";
for(int i=0;i<5;i++){
System.out.print("");
}
%>
- 5.配置欢迎界面:web.xml
<welcome-file-list>
<welcome-file>
index.jsp(添加)
</welcome-file>
</welcome-file-list>
- 6.引入tomcat服务器
new-server-add
- 7.include指令
可以在一个jsp页面中包含另一个jsp页面,而且这两个页面的代码是共有的,
因此这两个jsp页面里的脚本不能重复定变量
在开发中,如果一些jsp页面要用到一个jsp页面的功能,比较适合采用该指令
例如,系统有很多模块,每个模块又有很多jsp,每个jsp都要验证用户的权限,权限验证就可以做成一个jsp
- 8.page指令:用来定义页面的全局属性,如页面的编码方式、语言等
为页面引用额外的类包引用时
<%@ page import="java.sql.Statement" %>
此外,我们为页面指定脚本语言时,也会用到该指令,包含汉字 通常使用utf-9或GBK编码
作用域:
整个jsp页面和使用include包含进来的jsp页面---整个jsp页面和这些被包含文件被称为“平移单元”
2. 作用域,生命周期,原理
e.g
<% int a = 10; %> <%=a%> <%! private int a = 100; public void fun(){ } %> <%=this.a++ %>
不断刷新页面,发现访问的是同一个jsp对象。a被加一
当jsp内容发生变化,再次请求时,会被重新翻译成.java文件,并且编译成.class文件。下次访问的jsp[servlet]其实是同一个对象。一般情况下,第一次访问jsp文件比较慢
jsp实例化过程:
- 访问jsp文件
- 服务器将jsp翻译成.java文件
- 编译成.class文件
- 实例化对象
- 调用service方法
- 响应浏览器
servlet原理与此类似
3.jsp三大指令标签
指令标签:<%@ 指令名 prop1="" prop2="" %>
3.1 page指令
- 指定jsp页面 【后台编码】
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- 导包
<%@ page import="java.io.FileInputStream,java.util.*,.." %>
- errorPage,isErrorPage
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>Error</title> </head> <body> 这是错误信息 </body> </html>errorPage:如果页面中出现错误,则跳转【转发】到指定的错误页面
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="/error.jsp" %>
返回的状态码为500
使用web.xml配置errorPage:
<!-- 发生500错误 -->
<error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> <!--发生运行时异常,就转发到xxx--> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/error.jsp</location> </error-page>
- autoFlush : true | false 用于指定当输出流满了后,是否自动输出 【基本不用】
- buffer : 8Kb 【基本不用指定】
- extends:用于指定jsp继承的父类,【基本不用】
- isELIgnored :默认为false
- session:是否使用session
- isThreadSave:指定当前jsp是否为线程安全,默认为false【支持并发访问,基本废弃】
3.2 include指令
静态包含:相当于将file中的文件直接放在该位置,include指令告诉容器:复制被包含文件汇总的所有内容,再把它粘贴到这个文件中【注意web容器采用读取文件的访问将被include的内容读取,读取时是根据被include的文件的pageEncoding编码来读取的,然后将整个内容整合成一个java文件,因此需要在该文件中设置编码】
<body>
<%@ include file="included.jsp" %>
<div class="div1">
</div>
<%@ include file="included.jsp" %>
</body>
静态包含:jsp在被编译之前已经合并成了一个jsp,然后在被编译成一个.class文件
注意:<jsp:include page = ""> 这是动态包含
3.3 tablib:引入标签库
格式:<%@ taglib prefix="" uri="" %>
使用时要加上前缀。
URI:用于指定标签库的位置。
使用jstl:
- 导入jar包:jstl.jar,stardard.jar
-
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
end