前提
安装jdk参考
下载tomcat解压,运行tomcat不报错即可
第一个jsp程序
切换到webapps下ROOT文件夹下,将除了WEB-INF文件外的全部内容删除,新建index.jsp
index.jsp内容如下
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
访问localhost:8080
jsp注释
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!--该jsp注释可以在浏览器中查看-->
<%--该jsp注释不可以在浏览器中查看--%>
<h1>hello world</h1>
<%
//这是脚本中java注释
/*
* 这也是脚本中java注释
*
* */
%>
</body>
</html>
jsp声明
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<%!
int x,y=60,z;
String name ="John";
Date date = new Date();
%>
<%!
int add(int m,int n){
int result =0;
result = m+n;
return result;
}
%>
<%!
int chengji(int m,int n){
return m*n;
}
%>
<%!
class Circle{
double r;
Circle(double r){
super();
this.r = r;
}
double area(){
return Math.floor(Math.PI*r*r);
}
}
%>
<%
out.println("我的名字:"+name);
out.println("<br/>");
out.println("x的值为"+x);
out.println("y的值为:"+y);
out.println("<br/>");
out.println("现在时间:"+date);
out.println("10+20="+add(10,20));
out.println("<br/>");
out.println("10*20="+chengji(10,20));
%>
<br>
<br>
<%
Circle c = new Circle(5);
out.println("半径为5的圆面积为:"+c.area());
%>
</body>
</html>
jsp表达式
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>现在时间是<%=new Date()%></h1>
</body>
</html>
jsp指令
与页面相关的jsp指令
属性和属性值 | 说明 |
---|---|
session="true | false" |
autoFlush="true | false" |
info=“text” | 描述该jsp页面的相关信息 |
errorPage=“URL” | 当页面产生异常时跳转的路径 |
isErrorPage="true | flase" |
isThreadSafe="true | false" |
buffer=“8kb” | 输出流是否有缓冲区,默认8kb |
contenrType=“text/html;chartset=UTF-8” | 设置mime类型和编码属性,编码属性一般设置为utf-8,mime类型有很多,比如application/vnd.ms-excel表示excel文件,image/gif标识gif图像等 |
extends=“class” | 指明由jsp页面产生的servlet所继承的父类 |
include指令
include指令是在JSP页面生成Servlet时引入需要包含的页文件,既可以是HTML文件,也可
以是JSP文件,还可以是其他文件(例如.js文件)。include指令的作用是在标签插入的位置插入静态的文件内容,使其与JSP文件组合成新的JSP页面,然后由JSP引擎翻译成Servlet文件,这样做有如下两个好处:
- 页面的代码可以复用,因为被引入的文件是静态文件,所以在其他的JSP页面中也可以导入。
- JSP页面的代码结构清晰易懂,维护也比较简单。
include指令如下
<%@include file="URL"%>
file属性指向要包含的文件,一定要注意引入的路径是否正确,一旦路径出错,在编译的时候将不能通过。
include指令经常用来包含网站中经常出现的相同页面。例如,一般情况下,网站为每个页面都设置导航栏,把它放在页面的顶端或者左边,这部分代码在每个页面都重复,可以用include来解决,为开发者省去重复动作。
john.jsp
<%@page language="java" pageEncoding="utf-8" %>
<h1>John的个人简介</h1>
<table>
<tr>
<td>姓名</td>
<td>john</td>
</tr>
<tr>
<td>年龄</td>
<td>20</td>
</tr>
</table>
新建copyright.jsp
<%@page language="java"
import="java.util.*,java.text.SimpleDateFormat" pageEncoding="utf-8" %>
<h1>版权信息</h1>
<%!
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year =sdf.format(d);
%>
<p>john公司版权所有2001-<%=year%></p>
index.jsp
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>jsp include指令</h1>
<%@include file="john.jsp"%>
<hr>
<%@include file="copyright.jsp"%>
</body>
</html>
taglib指令
taglib指令(又名标签指令) 是JSP新增的一个指令, 用户可以自定义新的标签在页面中执行。taglib指令的语法如下:
<%@taglib uri="taglib url"prefix="tagPre"%>
其中uri属性用来表示自定义标签库的存放位置。prefix属性是为了区分不同标签库的标签名,在页面中引用标签也是以prefix开头的。
安装对应jar包,修改pom.xml
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
index.jsp
<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table>
<tr>
<td>输出值</td>
</tr>
<c:forEach begin="1" end="10" var="i">
<tr>
<td>
<c:out value="${i}"></c:out>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
从上述代码可以看出, JSTL标签使得JSP页面十分简洁, 它不需要定义或初始化对象、方法。但凡事都不能只看表面,应该注重本质,标签的定制在页面显示时是如此简单,但在编制时却是一个复杂的过程, 它通过一定的编程步骤将JSP代码和Java代码联系起来。标签定制的最大好处就是使得开发者的职责分工更加明细:标签定制者无须关注业务逻辑的实现,页面编程人员直接使用标签即可。这样两者就不会冲突,分工明确。下面简单介绍定制标签的过程。
jsp动作
<jsp:include>动作
<jsp:includepage="relativeURL"flush="true"/>
与include指令十分相似都是引入文件到目标页面
但是,jsp:include动作与include指令还是有些不同的:首先,jsp:include动作是在页面被访问时导入的, 而include指令是由JSP引擎在编译时导入的; 其次, 在include指令中, 被包含的文件会同主页面一块被编译为一个Servlet类文件, 而jsp:include动作包含的文件跟主页面会是相对独立的两个文件, 在编译时会被编译成两个Servlet类文件, 因此jsp:include在效率上稍微慢些。
news1.html
<h1>news01</h1>
news2.html
<h1>news02</h1>
index.jsp
<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>最近新闻</p>
<ul>
<li>
<jsp:include page="news1.html"/>
</li>
<li>
<jsp:include page="news2.html"/>
</li>
</ul>
</body>
</html>
<jsp:forword>动作
<jsp:forward>动作的作用是转发请求到另外一个页面中, 在请求过程中会连同请求的参数数据一起被转发到目标页面中, 目标页面通过request.getParameter方法获得参数值进行进一步处理。<jsp:forward>的基本语法如下:
<jsp:forwardpage="relativeURL">
如果随机数能被2整除,则跳转even.jsp,如果不能则跳转odd.jsp
even.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>偶数页</h1>
odd.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>奇数页</h1>
index.jsp
<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<%
String url="";
int random = (int)(Math.random()*10);
int m = random%2;
switch (m){
case 0:
url="even.jsp";
break;
case 1:
url="odd.jsp";
break;
}
%>
<jsp:forward page="<%=url%>"></jsp:forward>
</body>
</html>
注意页面链接没有变化
<jsp:param>
<jsp:param>用来传递参数信息, 它经常与其他动作一起使用, 例如与<jsp:forward>、<jsp:include>等结合使用, 用于传递主页面的参数到目标页面。其基本语法如下:
<jsp:param name="参数名称" value="参数值">
param和include结合使用
安装对应版本的tomcat包
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.74</version>
</dependency>
index.jsp
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%request.setCharacterEncoding("utf-8");%>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>父页面</h1>
<jsp:include page="subPage.jsp">
<jsp:param name="userName" value="约翰"/>
<jsp:param name="passwd" value="123456"/>
<jsp:param name="address" value="中国北京"/>
</jsp:include>
</body>
</html>
subPage.jsp
<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>子页面</title>
</head>
<body>
<%
String userName = request.getParameter("userName");
String passwd = request.getParameter("passwd");
String address = request.getParameter("address");
%>
<p>子页面</p>
<table>
<tr>
<td>用户名:<%=userName%></td>
</tr>
<tr>
<td>密码:<%=passwd%></td>
</tr>
<tr>
<td>用户地址:<%=address%></td>
</tr>
</table>
</body>
</html>
forward和param
修改上面例子中index.jsp的include为forward
<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%request.setCharacterEncoding("utf-8");%>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>父页面</h1>
<jsp:forward page="subPage.jsp">
<jsp:param name="userName" value="约翰"/>
<jsp:param name="passwd" value="123456"/>
<jsp:param name="address" value="中国北京"/>
</jsp:forward>
</body>
</html>