JSP简介
- JSP全名为Java Server Pages(Java服务器端页面),其根本是一个简化的servlet设计,他实现了在Java当中使用HTML标签。JSP是一种动态的网页技术标准也是JavaEE的标准。JSP和Servlet一样,也是在服务器端运行的。
JSP页面元素构成
一、指令
- page指令,一个jsp页面可以有多个page指令,他有3个最重要的属性
- 语法 <%@ page 属性1=”属性值1,属性值2” 属性n=”属性值n”%>
- language 指定JSP页面使用的脚本语言 java
- import 导入类文件 默认为无
- contentType 指定JSP页面所采用的编码方式
- include指令,将一个外部文件嵌入到当前JSP页面中,同时解析这个页面中的JSP语句,在
- taglib指令,启用标签指令,在使用JSTL时会使用
二、注释
- html注释
- JSP注释 <%– 客户端不可见 %–>
- JSP脚本注释 //客户端不可见 /* 客户端不可见 */
三、声明
- 在JSP页面中定义变量或者方法
- 语法 <%! java代码 %>
<%!
String s = "张三";
int add(int x, int y){
return x + y;
}
%>
四、小脚本
- 在JSP页面中可执行的java代码
语法<% java代码 %>
<% out.println("大家好,欢迎大家学习JavaEE开发"); %>
五、静态资源
六、表达式
- 在JSP页面中执行的表达式
- 语法 <%= 表达式 %> 注意表达式不加分号
你好,<%= s%>
x + y = <%= add(10,20) %>
JSP的生命周期
JSP生命周期就是从创建到销毁的整个过程,类似于servlet 生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet
一、编译阶段
- 当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:
- 解析JSP文件。
- 将JSP文件转为servlet
- 编译servlet。
- 所以我们说jsp的本质上就是servlet,将JSP文件转换为servlet的文件存放在C:\Users\PRO\Desktop\Code.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\jsp_objects\org\apache\jsp,其中C:\Users\PRO\Desktop\Code\是你的工作空间,jsp_objects是你的项目名。
- 如果用Servlet来生成网页中的动态内容无疑是非常繁琐的工作,另一方面,所有的文本和HTML标签都是硬编码,即使做出微小的修改,都需要进行重新编译。JSP解决了Servlet的这些问题,它是Servlet很好的补充,可以专门用作为用户呈现视图(View),而Servlet作为控制器(Controller)专门负责处理用户请求并转发或重定向到某个页面。
二、初始化阶段,调用_jspInit()方法,只执行一次
三、JSP执行,调用_jspServiece(httpServletRequest request, httpServletResponse response)方法,可执行多次
四、JSP清理阶段,调用jspDestroy()方法
实例:分别使用表达式和脚本打印九九乘法表
- 使用表达式调用方法打印
<!-- 先定义一个方法 -->
<%!
String printMultiTabal1(){
String str = "";
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++){
str += i + "*" + j + "=" + i*j + " ";
}
str += "<br>";
}
return str;
}
%>
<h1>九九乘法表</h1>
<!-- 表达式调用方法 -->
<%=printMultiTabal1() %>
- 使用脚本方式打印
// 使用JspWriter对象来打印乘法表 脚本方式
void printMultiTabal2(JspWriter out) throws Exception {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++){
out.print(i + "*" + j + "=" + i*j + " ");
}
out.print("<br>");
}
}
<!-- 脚本执行代码 -->
<% printMultiTabal2(out); %>