虽然说现在大部分公司都开始使用前后端分离技术来开发自己的web系统,但是现在也不排除一些公司的老系统还是使用jsp+Servlet+html+css+JavaScript+spring+SpringMVC+mybatis等这些技术开发的,所以从今天开始来系统的记录一些jsp一些技术点和实战应用。
jsp(java Servlet pages)是由html和嵌入java代码组成的服务端动态页面编写的脚本技术。简单说就是由一个HTML页面,里面使用jsp的标签,然后在jsp标签中可以写java代码。
jsp的执行顺序
客户端向web服务器发送请求,jsp引擎将jsp页面转化成Servlet,然后有jvm编译生成.class类文件,然后把类文件放到内存中执行,最后由服务器将结果返回给客户端。
现在开始实操
所有的jsp语法都是基于maven项目构建的,部署在本地的Tomcat web服务器中运行
工程的目录结构为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<h2>Hello World!h2>
<div>
<h1>html注释h1>
div>
<%--jsp注释,该注释不会在浏览器中看到--%>
body>
html>
<%! 定义公共的变量、方法、类%>类似于java类中公共的变量和方法,在当前的jsp页面的任何地方都可以调用,声明的结尾和java一样都是使用“;”
注意:在导入<%@ taglib uri=“http://java.sun.com/jstl/core_rt” prefix=“c”%>这个的时候需要在maven工程中加入如下依赖
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.2version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
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"%>
<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>
<%=变量或者表达式%>:将动态信息显示在页面中
<%@ 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"%>
<html>
<head>
<title>jsp表达式title>
head>
<body>
<%!
int a=10;
%>
当前时间为:br>
<%=new Date()%>br>
<%="a="+a%>
body>
html>
<%@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"%>
<html>
<head>
<title>include jsptitle>
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"%>
<html>
<head>
<title>includetitle>
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"%>
<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>
jsp主要有如下10种这些动作
其中jsp:include,jsp:param、jsp:forward使用较多,下面主要介绍这3种
<%@ 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"%>
<html>
<head>
<title>jsp:includetitle>
head>
<body>
<div align="center">jsp:include指令演示div>
<%@include file="copyRight.jsp"%>
body>
html>
copyRight.jsp还是上文写过的代码
2.jsp:param
语法:
作用:用来传递参数信息,经常与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"%>
<html>
<head>
<title>jsp:paramtitle>
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>subPagetitle>
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>主页面2title>
head>
<body>
<h1>主页面2h1>
<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>subPage1title>
head>
<body>
<%
String password=request.getParameter("password");
%>
<%="password="+password%>
body>
html>
3.jsp:forward
语法:
作用:转发请求到另外一个页面,连同请求的参数数据也会一起被转发到目标页面中,目标页面通过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.jsptitle>
head>
<body>
偶数跳转界面
body>
html>