1.概念
1.概念:Java Server Pages,是一种`动态网页开发技术`
动态网页开发技术:jsp,servlet,php,asp
与html的区别:
html是静态(数据)网页开发技术
jsp是`(数据)动态`网页开发技术
jsp页面允许我们在html代码中嵌入java代码
简单理解:`jsp=html+java`
jsp可写内容:
html,css,js,image,java,EL表达式,第三方标签库(jstl,spring...)
注意:jsp可以一行java代码都不写,也可以一行html代码不写
问题:
Eclipse中创建的.jsp文件默认不是UTF-8的编码格式,解决办法?
在webapp文件夹下面新建JSP File时,输入jsp文件的名称下一步时,在底下有蓝色的字体JSP Templates点击之后在左面有一个JSP Files点击,之后找Encoding,选上UTF-8就好了,以后创建jsp文件就都是utf-8格式
jsp文件放在src/main/webapp
/hello.jsp下
新建一个hello.jsp文件
hello.jsp中的内容,发布到tomcat中,访问之后
问题:
hello.jsp是怎样变成hello_jsp.java的?
在tomcat的安装路径下面的work
文件夹下,找到项目名
,进入到里面找到对应的Java文件:hello_jsp.java
会看到hello_jsp extends HttpJspBase extends HttpServlet
2.jsp与servlet的关系
2.jsp与servlet的关系
简单理解:一个jsp页面就是一个servlet
原因:jsp页面被第一次访问的时候,被web容器(也就是tomcat服务器)编译成一个java类,
这个类`继承了HttpJspBase类`(`HttpJspBase类是HttpServlet的子类`),
所以说jsp是HttpServlet子类的子类,这个java类在tomcat的安装路径下面的`work`文件夹下,
`找到项目名`,进入到里面找到对应的Java文件:`hello_jsp.java`
hello_jsp extends HttpJspBase extends HttpServlet
3.jsp的运行方式
3.jsp的运行方式
jsp运行在(拥有`jsp引擎`:在tomcat的安装路径里面的lib下`jasper.jar`作用)web容器内,例如tomcat服务器
jsp页面运行在服务器端,运行完后,`会把动态生成的html通过IO流写回浏览器,从而呈现效果`
4.jsp的生命周期
4.jsp的生命周期
编译阶段
jsp页面被访问时
hello.jsp--翻译阶段-->hello_jsp.java--编译阶段-->hello_jsp.class
初始化阶段
jsp页面被访问时,创建一个servlet对象(一个jsp页面就是一个servlet),调用init()初始化
运行阶段
调用_jspService(),通过IO流把html标签写回浏览器,如果是java代码正常运行
销毁阶段
tomcat正常关闭时,对象销毁,destory()
5.JSP核心————三大元素
jsp案例代码:
<!-- 导入ArrayList包 -->
<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- taglib引入jstl标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello Word</h1>
<!-- 声明成员属性 -->
<%! private int number; %>
<!-- 声明成员方法 -->
<%!
public void method() {
System.out.print("这是声明的一个方法");
}
%>
<!-- 表达式 -->
<%= 10 %> <br>
<%= 2*2 %>
<!-- 脚本 -->
<%
int a=0;
System.out.println("a的值是:"+a);
System.out.println("这是脚本的输出语句");
method();
ArrayList<String> list=null;
%>
<!-- 指令标签静态导入,将其他页面导入到当前页面 -->
<%@ include file="" %>
<!-- 动作元素 -->
<jsp:fallback>网络延迟过高</jsp:fallback>
<jsp:forward page="login.jsp?username=tom">
page内容:jsp,servlet,html
</jsp:forward>
<jsp:forward page="login.jsp">
<jsp:param value="tom" name="username"/>
</jsp:forward>
<jsp:include page="">
动态导入,在当前jsp页面运行阶段发生
</jsp:include>
<jsp:param value="tom" name="username"/>
</body>
</html>
浏览器结果:
java后台结果:
jsp的所有动作元素
6.动态导入和静态导入的比较:
静态导入 | 动态导入 | |
---|---|---|
元素 | 指令元素 | 动作元素 |
语法 | <%@ include file="" %> | <jsp:include page=""></jsp:include> |
发生 | 翻译阶段 | 运行阶段 |
效率 | 高 | 低 |