JSP概述
* JSP不需要web.xml配置
** JSP是一种servlet
JSP和HttpServlet都是servlet,但是通常说的Servlet都默认是HttpServle
HttpServlet是先编译为class文件,再部署在服务器
JSP先部署上去,后在服务器内编译。(第一次请求的时候编译出来,往后直接使用该编译出来的class文件)
JSP生命周期
和servlet一样,有初始化和销毁,此外调用方法也可以有_jspInit()和_jspDestroy()
JSP语法
JSP语法,分为HTML和Java两部分
JSP元素和模板数据
JSP脚本必须要使用<% %>括起来,否则被视为模板数据;中间部分必须遵循Java语法,否则发生编译错误。
JSP输出
JSP注释
java:// and /* */ JSP: <%-- --%>
JSP方法和声明
<%! %> 中声明变量和方法,注意叹号!
JSP中的if语句
JSP中的for/while语句
JSP中的return/break
带参数param=return时,程序会执行return语句,因此其后的html都不会显示出来。
break和return差不多,但是return是直接返回,break是跳出一个代码块(for,while或switch)
JSP指令
用<%@ directive %>来包含,directive位置可以取值为page、taglib、include
page指令
无论在哪个page指令里的属性,任何page允许的属性都只能出现一次(import除外),否则会编译错误
import、autoFlush、session、errorPage、info、contenType、trimDirectiveWhitespaces等都很常用
trimDirectiveWhitespaces="false"能够让输出有空白格,可是对html来说都是一样的。
include
include指令实现
<%@ include file="head.jsp" %>
include行为实现
<jsp:include page="foot.jsp"></jsp:include>
taglib指令
JSP行为
“包含”行为
<jsp:include flush="true" page="/head.jsp"></jsp:include>
<!-- page属性:是必须的,被包含的文件所在路径 -->
<!-- flush属性:读入被保存文件内容前,是否清空缓存 -->
需要区别的是,include指令和include行为执行的时刻,前者是编译时包含的,包含的是源代码;后者是运行时才包含的,而且只包含运行结果。
* 采用forward来包含的:request.getRequestDispatcher("relativeURI").forward(request,response);
“使用bean”行为
public class Person{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
id:java bean的名称(可以和类名不同),class:java bean的类名(URI),scope:java bean的可用范围
合理地使用作用域(page、request、session、application),可以很轻松实现丰富的效果。
”转向“行为
<jsp:forward page="/somepage.jsp">
<jsp:param name="param1" value="value1"/>
<jsp:param name="param2" value="value2"/>
</jsp:forward>
相当于是把dispatcher的forward方法封装了,只需要jsp标签就可以实现跳转页面的功能。还能捎带指定参数。
”JSP指令“行为
JSP隐藏对象
记住了,out\request\response\config\session\application\page\pageContext\exception
out输出流
request请求对象
ServletRequest直接可以拿来用
response相应对象
Config配置对象
Session会话对象
Session再服务端保存用户数据,Cookie在客户端保存用户信息
application应用程序对象
关于web应用程序的所有信息,因此在context上下文中取得
page页面对象
this,即当前jsp页面
pageContext页面上下文对象
context代表一些全局的属性,代表jsp编译后的内容,能够获取很多页面内部的属性和之前提到的隐藏对象
exception异常对象
就是用来处理异常的机制。但实际上经常失效。
JSP配置
虽然JSP文件不必像Servlet一样在web.xml中配置,但是要配置也是可以的。
<jsp-file>标签
和servlet基本一样,把servlet-class换成jsp-file即可。如果有init-param,在JSP中使用隐藏对象config的getInitParameter(String name)获取
<jsp-config>标签
EL表达式
用${}括起来的,只能出现在html代码中。
* 目的是为了简化短的JSP脚本(scriptlet)<% %>代码的书写
<jsp:useBean id="person" class="Person"></jsp:useBean> <!-- 先用useBean行为将Person对象放到request(如request没有,session找)中,再用EL表达式读取该对象 -->
Welcome, ${person}. <!-- 相当于request.getAttribute("person"); -->
Your name is ${person.name},
your age is ${person.age} <!-- 相当于person.getAge(); 或者 <jsp:getProperty name="person" property="age"/> -->
EL读隐藏对象
用EL表达式可以像访问Bean一样访问隐藏对象的各种参数
标识符(前缀)表明了EL表达式读取对象的范围。不带前缀的查找会先在request中查找,再到session中查找。
EL表达式的运算
基本的运算符,除法div、取余mod比较特别
注意英文缩写也能成立,gt/lt/eq/ne/ge/le
一些并列运算的连接符,字符比较时,EL表达式会调用int compare(char ss)来判断
可以对数组取值,以及一个新的方法empty来判断"is empty?"
小结
JSP是简化的Servlet,最总也会被编译成servlet。JSP中java代码和html代码放在一起,能够方便地输出html。
JSP中能生面个变量和方法,初始化时调用_jspInit(),销毁时调用_jspDestroy()。JSP种内置out、request、response、session等常用隐藏对象。
JSP=>html,Servlet=>java
JSP=>显示结果,Servlet=>处理业务逻辑