最原始的东西实际上是servlet。实际上二者的作用是相同。再使用servlet的时候,利用动态输出流产生html代码。而这样就导致了java和html语言的混杂。jsp将他们分开了一点,改为了在html语言中插入java的内容。静态部分无需java控制,可以交给html工程师。
实际上,jsp是servlet的一种简化。jsp也会由系统自动编译为servlet。
实例一
我们先来看一个基本的jsp页面的代码。首先,我们看到jsp是和html混在一起的。
现在浏览器都有浏览元代码的功能,然而,在源代码里,我们是找不到和jsp相关的代码的,而只能找到和html相关的代码。
<%@ page language="java" import="java.util.*"%>
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<%!Date date = new Date(); %>>
<%=date.toString() %>
</body>
</html>
首先解释下整个的执行过程
(1)你的浏览器发送一个http请求给服务器。
(2)web服务器(tomcat)识别除了这个请求,并将这个请求传递给jsp引擎。
(3)jsp引擎读取jsp文件,将他们转化为servlet。将所有jsp元素转化为java代码。然后将servlet编译成可以执行的类,并将原始请求发送给servlet引擎。
(4)web服务器调用servlet引擎,并执行servelet类。在执行中产生html网页,并将其上交给web服务器。
(5)web服务器将静态网页返回。
整个过程可以简化为如下图
实例二
然后我们来看下面的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
System.out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>
(1)注意到两种println并不相同,一个是打印在网页里,一个是打印在命令行里。另外一种输出到网页里的方式是采用<%= %>
(2)page指令使用来对当前页面进行说明的。有若干可选属性,说明如下
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用
除此之外还有include指令,使用的方法如下
<%@ include file=”文件相对 url 地址” %>
这些统称为指令元素,指令元素在编译阶段起作用。
实例三
再看下面这一段代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h2>Jsp 使用 JavaBean 实例</h2>
<jsp:useBean id="test" class="s1.TestBean" />
<jsp:setProperty name="test"
property="message"
value="菜鸟教程..." />
<p>输出信息....</p>
<jsp:getProperty name="test" property="message" />
</body>
</html>
主要讲解jsp的动作元素和如何使用javabean对应的javabean代码如下
package s1;
public class TestBean {
private String message = "菜鸟教程";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
有如下常见的java动作元素
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板
区别于指令元素,动作元素在执行阶段起作用。