JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet。
如上图所示是jsp的翻译与编译过程:
在tomcat目录中把jsp先编译成_jsp.java类,实际上这个类是servlet类的子类,它有与servlet生命周期相同的方法,与域对象。
如上图所示是jsp与_jsp.java编译文件与原文件的对应关系。
下面介绍下:<% %>,<%=%>,<%!%>的区别
小脚本 <% java代码 %>
表达式 <%= 2+3 %> 等价于out.print(2+3);
声明 <%! %> 表示在类中定义全局成员,和静态块。
1:<%=1%> 等价与<%var a=1;out.writer(a);%>
2:<%! %> 它声明的方法或变量是类成员方法或变量
如图所示num1是类级别的变量,在_jsp.java中,它是声明在类中的,而num2是放在service方法中的,所以
num2每刷新页面一次就初始化一次,这也说明了一个问题在<%%>中是不能放置puliic method的,因为这样
编译不通过相当于
class a {
num1;
service(){
num2;
}
}
这就是上面的例子。
JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量
网页注释:<!-- 网页注释 --> 特点:不安全,费流量
pageEncoding是指导服务器端编码的方式,charset是指导客户端编码的方式。
jsp 3大指令:
page:
include:
tablib:
jsp 6个动作的原理如下,实际上都是被翻译成servlet中的java执行脚本。
<%
Student stu = new Student();
stu.setName("tom");
out.print(stu.getName());
request.getRequestDispatcher("/7.jsp").forward(request, response);
%>
<jsp:useBean id="stu1" class="com.itheima.entity.Student"></jsp:useBean>
<jsp:setProperty property="name" name="stu1" value="jerry"/>
<jsp:getProperty property="name" name="stu1"/>
<!-- http://localhost:8080/day11_02_jsp2/6.jsp?name=123 -->
<jsp:forward page="/7.jsp">
<jsp:param value="123" name="name"/>
<jsp:param value="333" name="pwd"/>
</jsp:forward>
<jsp:include/>
jsp 9大内置对象:
pageContext(重要)
1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
void setAttribute(String name,Object o);
Object getAttribute(String name);
void removeAttribute(String name);
操作其它域对象的方法
void setAttribute(String name,Object o,int Scope);
Object getAttribute(String name,int Scope);
void removeAttribute(String name,int Scope);
scpoe的值:
PageContext.PAGE_SCOPE//当前页
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。