jsp学习笔记01
虽然说现在大部分公司都开始使用前后端分离技术来开发自己的web系统,但是现在也不排除一些公司的老系统还是使用jsp+Servlet+html+css+JavaScript+spring+SpringMVC+mybatis等这些技术开发的,所以从今天开始来系统的记录一些jsp一些技术点和实战应用。
1、jsp是什么
jsp(java Servlet pages)是由html和嵌入java代码组成的服务端动态页面编写的脚本技术。简单说就是由一个HTML页面,里面使用jsp的标签,然后在jsp标签中可以写java代码。
jsp的执行顺序
客户端向web服务器发送请求,jsp引擎将jsp页面转化成Servlet,然后有jvm编译生成.class类文件,然后把类文件放到内存中执行,最后由服务器将结果返回给客户端。
现在开始实操
所有的jsp语法都是基于maven项目构建的,部署在本地的Tomcat web服务器中运行
工程的目录结构为:
2、jsp语法
2.1 jsp注释
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<h2>Hello World!</h2>
<div>
<!--html注释,可以在浏览器中看到-->
<h1>html注释</h1>
</div>
<%--jsp注释,该注释不会在浏览器中看到--%>
</body>
</html>
2.2 jsp声明
<%! 定义公共的变量、方法、类%>类似于java类中公共的变量和方法,在当前的jsp页面的任何地方都可以调用,声明的结尾和java一样都是使用“;”
注意:在导入<%@ taglib uri=“http://java.sun.com/jstl/core_rt” prefix=“c”%>这个的时候需要在maven工程中加入如下依赖
<!--j2ee相关包 servlet、jsp、jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: 23746
Date: 2021/1/7
Time: 16:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp声明变量</title>
</head>
<body>
<%!
int a=1;
int b=3;
String name="jsp";
Date date=new Date();
%>
<%!
int add(int a,int b){
int rest=0;
rest=a+b;
return rest;
};
%>
<div>
<%
out.println("a="+a);
out.println("b="+b);
out.println("name="+name);
out.println(add(10,20));
%>
</div>
</body>
</html>
2.3 jsp表达式
<%=变量或者表达式%>:将动态信息显示在页面中
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp表达式</title>
</head>
<body>
<%!
int a=10;
%>
当前时间为:</br>
<%=new Date()%></br>
<%="a="+a%>
</body>
</html>
2.4 jsp指令
<%@page attribute1=“value1” […attribute2=“value n”]%>:page指令用来设置jsp页面的属性和相关功能。
page指令常用属性:language、import、pageEncoding,
其中在每个jsp页面中都要设置language,一般都是java,简单说就是在jsp页面加上==<%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“utf-8”%>==就行了。import声明需要导入的包
其它不常用的指令如下:
<%@include file=“URL”%>:在标签插入的位置插入静态文件:可以是html、jsp、js等文件,然后与当前的jsp页面组合成新的jsp页面。好处:页面代码复用、维护方便。
include.jsp
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>include jsp</title>
</head>
<body>
<div align="center">jsp include指令演示</div>
<%@include file="copyRight.jsp"%>
</body>
</html>
copyRight.jsp
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>include</title>
</head>
<body>
<%
Date date=new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(date);
%>
<%="wen @copyRight "+format %>
</body>
</html>
<%@ taglib uri=“自定义标签库存放的位置” prefix=“区分不同标签库的标签名,在页面中引用的标签也是以prefix开头的”%>
例如:在jsp页面中引入JSTL标签库<%@ taglib uri=“http://java.sun.com/jstl/core_rt” prefix=“c”%>
注意:如果要在jsp页面中写EL表达式,需要在web.xml的<jsp-property-group>中可以控制一组JSP是否使用EL,在每个JSP中也可以指定是否该JSP使用EL。格式为:
<%@ page isELIgnored="true|false"%>
如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式<p>${2000 % 20}</p>
在isELIgnored="true"时输出为${2000 % 20}
,而isELIgnored="false"时输出为100。Web容器默认isELIgnored="false"。
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ page isELIgnored="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp taglib标签</title>
</head>
<body>
<table>
<tr>
<td>输出值</td>
</tr>
<c:forEach begin="1" end="10" var="num">
<tr>
<td>
<c:out value="${num}"></c:out>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
2.5 jsp动作
jsp主要有如下10种这些动作
其中jsp:include,jsp:param、jsp:forward使用较多,下面主要介绍这3种
- jsp:include
语法:<jsp:include page=“relative URL” flush=“true”>。flush属性用于指定输出缓存是否转移到被导入文件中,true则包含在被导入文件中,false则包含在源文件中。说白了该jsp标签与include标签类似都是引入文件到该jsp页面,不同的是在include指令中,导入文件和当前页面一块编译成一个Servlet类文件,而jsp:include动作包含的文件和当前jsp页面会被编译成2个Servlet文件,jsp:include在效率上要稍微慢一些。
<%@ page import="java.util.*" isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp:include</title>
</head>
<body>
<div align="center">jsp:include指令演示</div>
<%@include file="copyRight.jsp"%>
</body>
</html>
copyRight.jsp还是上文写过的代码
2.jsp:param
语法:<jsp:param name=“参数名称” value=“参数值”>
作用:用来传递参数信息,经常与jsp:forword、jsp:include结合一起使用,传递主页面的参数值到目标页面。
jsp:param结合jsp:include使用
<%@ page import="java.util.*" isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%--设定页面传递参数的编码格式,所有页面的编码格式要统一--%>
<%request.setCharacterEncoding("utf-8");%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jsp:param</title>
</head>
<body>
<h1>主页面</h1>
<jsp:include page="subPage.jsp">
<jsp:param name="username" value="aaaa"></jsp:param>
</jsp:include>
</body>
</html>
subPage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>subPage</title>
</head>
<body>
<%
String username=request.getParameter("username");
%>
<%="username="+username%>
</body>
</html>
jsp:param结合jsp:forward使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页面2</title>
</head>
<body>
<h1>主页面2</h1>
<jsp:forward page="subPage1.jsp">
<jsp:param name="password" value="1111"></jsp:param>
</jsp:forward>
</body>
</html>
subPage1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>subPage1</title>
</head>
<body>
<%
String password=request.getParameter("password");
%>
<%="password="+password%>
</body>
</html>
3.jsp:forward
语法:<jsp:forward page=“relative URL”>
作用:转发请求到另外一个页面,连同请求的参数数据也会一起被转发到目标页面中,目标页面通过request.getParameter方法获得参数值
注意:进行页面跳转时请求的地址不会发送改变,动作中的url页面只能是该Web应用中的文件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp:forward动作</title>
</head>
<body>
<%
String url="";
int random=(int)(Math.random()*10);
int m=random%2;
switch (m){
case 0:
url="event.jsp";
break;
case 1:
url="old.jsp";
break;
}
%>
<jsp:forward page="<%=url%>"></jsp:forward>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>奇数jsp页面</title>
</head>
<body>
奇数跳转页面
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>event.jsp</title>
</head>
<body>
偶数跳转界面
</body>
</html>