目录
jsp(1)
1.基本概念
JSP全称Java Server Pages,是一种动态网页开发技术。其实就是servlet,所以jsp的运行必须交给tomcat服务器!jsp页面既可以写html代码,也可以写java代码。
它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。
tomcat的work目录:存放jsp运行时的临时文件
1 .1Jsp的执行过程
在MyEclipse的xioahua项目的webroot目录下,新建一个jsp文件:01.hello.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>The first jsp by xiao hua</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
第一个jsp文件 by xioa hua <br>
</body>
</html>
浏览器访问http://localhost:8080/xiaohua/01.hello.jsp
1)访问到01.hello.jsp页面,tomcat扫描到jsp文件,在%tomcat%/work把jsp文件翻译成java源文件
(01.hello.jsp -> _01_hello_jsp.java) (翻译)
2)tomcat服务器把java源文件编译成class字节码文件
(_01_hello_jsp.java -> _01_hello_jsp.class)(编译)
3)tomcat服务器构造_01_hello_jsp类对象 (实例化)
4)tomcat服务器调用_01_hello_jsp类里面方法,返回内容显示到浏览器。
注:①第一次访问jsp:走(1(2(3(4),第n次访问jsp:只走(4)。
②jsp文件修改了或jsp的临时文件被删除了,要重新走走(1(2(3(4)的过程。
1.2 JSP与servlet
jsp翻译成的java文件:
public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {
而HttpJspBase类(在tomcat 的lib目录下的jar包中):
public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {
即Jsp就是一个servlet程序!servlet的技术可以用在jsp程序中。jsp的技术并不是全部适用于servlet程序!
Servlet的生命周期:
1)构造方法(第1次访问)
2)init方法(第1次访问)
3)service方法
4)destroy方法
Jsp的生命周期
1)翻译: jsp->java文件
2)编译: java文件->class文件(servlet程序)
3)构造方法(第1次访问)
4)init方法(第1次访问):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
2 JSP语法
2.1 Jsp模板
JSP页面中的HTML内容称之为JSP模版元素。 JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
2.2 Jsp表达式
语法:<%= 变量或表达式 %>
作用: 向浏览器输出变量的值或表达式计算的结果。
注:表达式会被翻译成 out.print(变量或表达式 ); 并放到_JspServicer()方法中。
2.3 Jsp脚本
语法:<% 多行java代码 %>
作用: 执行java代码
注:脚本中的java代码会被放在_jspService()方法中执行。
在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如:
2.4 Jsp声明
语法:<%! 多行java代码 %>
Jsp声明中的java代码被翻译到_jspService方法的外面,即实例变量。所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法。 多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。 例:
2.5 Jsp注释
语法: <%-- jsp注释 --%>
注:在jsp页面的html注释会被翻译和执行。而jsp的注释不能被翻译和执行。
例:
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>jsp语法</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%-- jsp表达式 --%>
今天是:<%= new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()) %><br/>
求和:<%= 3+5 %><br/>
<%-- jsp脚本--%>
<%
for(int i=1;i<5;i++){
%>
<H1>xiaohua</H1>
<%
}
%>
<%--jsp声明 --%>
<%!
String name="xiaohua";
%>
打印输出:<%= name %><br/>
</body>
</html>
打开浏览器,查看: