jsp底层原理

来源:互联网 发布:联想超级相机软件 编辑:程序博客网 时间:2024/06/14 10:16

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注释:<%-- 被注释的内容 --%> 特点:安全,省流量

网页注释:<!-- 网页注释 -->    特点:不安全,费流量

 


如上图所示是jsp页面中的两种注意的解读过程,可以发现html的注意显示了,而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依次查找,找到了就取值,结束查找。


原创粉丝点击