jsp的本质就是servlet,因此只要是可以在servlet中实现的功能都可以放在jsp中实现,但是这种开发方式是不推荐使用的。在日常的开发中我们一般把jsp作为视图层,只负责渲染数据展示给用户。一个jsp页面除了包含html代码外还有指令元素、动作元素和脚本元素。接下我就来介绍一下如何在jsp页面中使用这些元素。
一、jsp脚本
定义:脚本程序,就是为了在HTML中穿插java代码,可以包含任意语法真确的java语句,变量,方法或表达式。生成servlet源码时该处的代码被放到_jspService()方法中。关于脚本如果大家做过php web开发的话应该比较的熟系,这里和使用原生php开发有点类似。
语法:<% 代码片段 %> 这里需要注意的是在<% %> 区域内只能写java代码,不能写html标签等元素。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!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; utf-8"> <title>Insert title here</title> </head> <body> <h3>index.jsp</h3> <% int sum = 0; //这里必须赋值 for(int i=1;i<=100;i++){ sum =sum+i; } out.print("1~100的和为"+sum); %> </body> </html>
输出:1~100的和为5050
在jsp中除了可以写java脚本外还可以写jsp表达式,关于jsp表达式,平时开发中使用的不多,我们只需要了解即可。语法:<%= 表达式 %>,这里的表达式相当于out.write,例如:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!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; utf-8"> <title>Insert title here</title> </head> <body> <h3>index.jsp</h3> <% int a=10,b=10; %> <%=(a+b) %> </body> </html>
输出:20
二、三大编译指令
定义:JSP编译指令用来设置与整个JSP页面相关的属性。三个编译指令分别是:page,include,taglib。
1.page指令
语法:<%@ page attribute="value" %> page指令主要用于定义jsp页面的使用说明以及一些依赖的信息,例如:页面的编码,是否启用session和导入一些java类等。实例代码:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.Date" %> <%@ page import="java.text.SimpleDateFormat" %> <!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; utf-8"> <title>Insert title here</title> </head> <body> <h3>index.jsp</h3> <% Date now = new Date(); String nowStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); %> <%=nowStr %> </body> </html>
输出:2019-09-16 16:04:54
2.include指令
语法:<%@ include file="url" %>
作用:在进行web开发时,一般的网页的head和foot是固定的,所以我们一般会把这部分代码提取出来供所有的页面引用。在jsp中可以通过include指令来包含其他文件。这里需要我们注意的是使用include指令引入的页面叫做静态包含,引入的文件内容会被翻译到源文件中去合成一个java文件然后编译,这种引入方式叫做静态包含。代码实例:1.创建一个jsp页面 2.在index.jsp页面引入新创建的jsp页面。
<%@ page language="java" pageEncoding="utf-8"%> <h3>我是引入的页面</h3>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!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; utf-8"> <title>Insert title here</title> </head> <body> <h3>index.jsp</h3> <%@ include file="/index_include.jsp" %> </body> </html>
浏览器输出:
3.taglib指令
语法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
作用:taglib指令主要用于导入用户自定义的标签库。关于如何定义标签库我以后在来介绍,所以这里我们只需要知道有这样的一个指令即可。
三、动作指令
动作指令指的是jsp运行时的动作,在jsp中有七大动作指令但是我只介绍最常用的forward动作指令和include动作指令。
1.include动作指令
语法:<jsp:include page="URL"/>
作用:include动作指令用户动态的引入jsp页面。注意这里和上面介绍的静态包含是有区别的,动态包含是在请求到达时如果发现还包含另一个jsp,那么被包含页面会再生成另一个servlet。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.Date" %> <%@ page import="java.text.SimpleDateFormat" %> <!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; utf-8"> <title>Insert title here</title> </head> <body> <h3>index.jsp</h3> <%-- <%@ include file="/index_include.jsp" %> --%> <jsp:include page="/index_include.jsp"/> </body> </html>
动态包含下的class文件:
静态包含下的class文件:
2.forward指令
作用:forward动作把请求转到另外的页面,类似于getRequestDispatcher("/GetData").forward(request, response)。
语法:<jsp:forward page="URL"/>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!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>login</title> </head> <body> 这里是login.jsp </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.Date" %> <%@ page import="java.text.SimpleDateFormat" %> <!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; utf-8"> <title>Insert title here</title> </head> <body> <jsp:forward page="login.jsp"/> </body> </html>
访问index.jsp,浏览器输出: