梦入琼楼寒有月,行过石树冻无烟

📖 earlier posts 📖

JSP 指令标记

常用的Java Server page语言指令有page 和 include指令,而JSP指令用于h转换阶段,主要提供整个JSP 页面的相关信息,影响由JSP生成的Servlet(应用连接器)整体结构。

page

page指令可以用于标记整个Java Server pages页面的一些属性,如:

1
2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
ID DA FA
language 设置当前页面开发语言 目前仅仅可以使用java
contentType 用于应用程序来打开的方式类型 contentType
text/html HTML网页形式
text/plain 普通文本
application/pdf PDF文档
application/msword Word 应用程序
application/vnd.ms-powerpowerpoint PowerPoint 应用程序
image/jpeg JPEG 图像
image/png PNG 图像
image/gif GIF 图像
pageEncoding charset 服务器发送给客户浏览器时所见到的网页内容编码 pageEncoding是指JSP文件自身存储时的所用编码
charset charset 和pageEncoding 一样,都是网页内容编码,如果pageEncoding不存在则使用charset 如果都不存在这使用默认编码ISO-8859-1

include

include指令可以用于当一个网站中有多个Java Server pages页面需要显示同样的信息时,为了减少代码量和易于阅读可以使用include指令进行处理。Inculde指令的作用就是将一个jsp文件、Html网页文件或其他文本静态嵌入到当前jsp页面之中。

NewFile.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("NewFile.jsp");
%>
<br>
<%@ include file="NewFile1.jsp"%>
</body>
</html>

NewFile1.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("Hello,world!");
%>
</body>
</html>

JSP 动作标记

JSP 指令标记和动作标记的区别主要是指令标记以<%@开始,的指令。而JSP动作标记则是由Java Server pages引起在请求阶段时处理的,而不是和指令一样在翻译为Servlet(应用连接器)阶段处理的。
在通常的情况之下,动作标记主要有 include、forward、param、useBean、getProperty、setProperty、useBean、getProperty、setProperty等

include 动作标记

include动作标记的主要作用就是将JSP文件、HTML文件或其他文本文件动态嵌入到当前的Java Server Pages页面之中

1
<jsp:include page="file"/>

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("NewFile.jsp");
%>
<hr>
<jsp:include page="NewFile1.jsp"/>
</body>
</html>

NewFile.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("NewFile.jsp");
%>
<hr>
<jsp:include page="NewFile1.jsp"/>
</body>
</html>

NewFile1.jsp

page language
1
2
3
4
5
6
7
8
9
10
11
12
13
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("Hello,world!");
%>
</body>
</html>

forward 动作标记

forward 动作标记的作用是从该标记出现出停止当前的Java server pages 页面的继续执行并转向指定的forward动作标记中page属性值的指定JSP页面。

判断数值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int min = 10;
if (min == 10) {
out.println("min = 10");
%>
// 当数字型成员变量min为10时,forward将会执行NewFile1.jsp内的内容
<jsp:forward page="NewFile1.jsp"/>
<%
} else {
out.println("min != 10");
}
%>
// 当数字型成员变量min不为10时,forward将会执行NewFile2.jsp内的内容
<jsp:forward page="NewFile2.jsp"/>
</body>
</html>

JSP 元素

在Java Server pages 语言元素之中,可一份为注释、成员变量、程序片、方法等都可以被称之为Java Server pages元素。其中成员变量的元素为“**<%! %>”,而局部变量为“<% %>”**。

Java Server pages 注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%--
创建一个字符串成类型成员变量 "content"
--%>
<%!
String content = "Hello,world!";
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
输出成员变量
--%>
<%
out.println(content);
%>
</body>
</html>

在Java Server pages语言之中,注释可以使用<%-- --%>进行注释,Jsp引擎将JSP注释当作是该语言之中真正的注释,在编译JSP页面时候将会忽略注释代码行,因此当编译后用户访问JSP页面是无法查看其JSP注释的。由于Java Server pages语言属于非脚本语言,所以Java Server pages也支持“\\”注释。

成员变量 (<%!)

创建成员变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%!
String content = "Hello,world!";
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

Java Server pages语言可以使用<%! %>来创建Jsp成员变量,凡是在标记符<%! %>中的变量都将被称之为“成员变量”,可以是Java Server pages语言当前允许的任何数据类型。

调用成员变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%--
创建一个字符串成类型成员变量 "content"
--%>
<%!
String content = "Hello,world!";
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
输出成员变量
--%>
<%
out.println(content);
%>
</body>
</html>

通过创建Java Server pages中的成员变量,然后根据使用Java Server pages 程序片(<% %>)来调用刚刚的字符串类型成员变量(content),然后我们输出成员变量:

1
2
3
<% 
out.println(content);
&>

来输出content成员变量中的字符串类型成员变量

局部变量 (<%)

创建与输出局部变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
局部变量
--%>
<%
// 创建整数型变量"num",默认值为“10”
int num = 10;
// num 整数类变量+1.
num++;
out.println("num = " + num);
%>
</body>
</html>

凡是在Java Server pages内声明的变量都被Java Server pages语言的成员方法,在整个方法JSP内有效

ID DA FA
<%– 注释 注释
// 注释
<%! 成员变量 变量
<% 局部变量

JSP JDBC MySQL 数据库访问与操作

在Java Server Pages语言之中,可通过各种关系数据库Oracle、SQL Server、MySQL来与Java Server pages进行访问与操作。

什么是 JDBC

JDBC(Java DataBase Connectivity)是Java平台核心类库的一个部分,他主要由一组标准接口和类组成,通常可使用JBDC执行与指定的数据库建立连接、向以连接的数据库建立连接、处理SQL命令的返回结果,本文主要使用JDBC进行对数据库进行操作即访问。

添加数据库驱动程序

由于本书使用的是MySQL8数据库,所以需要添加相应的MySQL8数据库驱动程序,而流程就是http://www.jiangxue.org.cn/mysql-connector-java-8.0.19.jar进行下载,之后将下载后的jar文件添加到项目工程中的WEB-INF/bin目录下即可。

导入数据库驱动程序语法

1
2
3
4
5
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

连接数据库前期操作

新建数据库

在Java Server pages中,连接数据库前提是指定一个数据库进行连接,之后在进行一些相关的操作,本章我们需要新建一个testsp库,其MySQL语法为:

1
2
mysql> CREATE DATABASE testsp;
Query OK, 1 row affected (0.01 sec)

查看数据库列表

在新建完数据库后,可使用以下MySQL语法进行查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| message_tal |
| mysql |
| performance_schema |
| sys |
| testsp |
| user_zsun |
+--------------------+
7 rows in set (0.00 sec)

新建数据库表

进入数据库

1
2
mysql> use testsp
Database changed

新建数据库表

1
2
3
4
5
mysql> CREATE TABLE testuser (
-> name char(15),
-> age int(20)
-> );
Query OK, 0 rows affected, 1 warning (0.03 sec)

插入表数据

sunone

1
2
mysql> INSERT INTO testuser(name,age) VALUES('sunone',21);
Query OK, 1 row affected (0.01 sec)

kuntwo

1
2
mysql> INSERT INTO testuser(name,age) VALUES('kuntwo',22);
Query OK, 1 row affected (0.00 sec)

JSP数据库操作

在Java Server Pages之中,可通过Java Server Pages 中的指令标记(page)以及动作标记(include)或者使用局部变量(<%)进行连接,本书主要使用include动作标记进行连接即操作:

1
2
3
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/数据库?characterEncoding=utf-8"
user="数据库帐号" password="数据库密码"/>
ID DA FA
sql:DataSource 连接数据库
sql:query 执行数据库语句
forEach 定义迭代标记
out 输出数据

连接MySQL数据库

普通连接

添加外部驱动

在连接数据库之前,需要引入jstl.jar,以及mysql-connector-java-8.0.22.jar外部jar包,可通过分别访问http://www.jiangxue.org.cn/jstl-1.2.jar以及````http://www.jiangxue.org.cn/mysql-connector-java-8.0.22.jar```进行下载,后移动添加到```WEB-INF/lib```之中即可,如缺少jstl.jar包则会在运行过程中出现错误500的错误。

引入import taglib

Java Server Pages之中可通过分别引入Java 对应包以及外部驱动可进行MySQL Jsp&Java类及页面的编写,需要引入的包如下:

1
2
3
4
<%@ page import="java.io.*,java.util.*,java.sql.*" %>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

连接池链接

在所有的开发语言之中,使当前页面或程序连接数据库都是一个消耗资源的活动,需要及分钟或几秒中的时间来执行连接数据库在最后操作数据库这一时间消耗,如对一个大型的动态网站,在几百人甚至几千人、几万人频繁的分别请求或连接数据库则会导致服务器崩溃或服务器连接较慢的问题。
从上图可以看出,用户1通过请求数据库中的线程,然后在请求到连接池(也即缓冲池)来取得一个链接(首先连接池中有一定的数量连接),然后使用完毕之后将当前的连接放回到连接池之中
通常,在第一次连接池时,需要花费几秒或几分的连接时间,```导致这种问题的原因则是连接池中没有连接,而第二次连接中连接池就有了可用的连接,可直接从连接池中获得连接来访问目标数据库。

NewFile.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="conpool" class="bean.SqlLink" scope="application" />
<body bgcolor="AliceBule">
<%
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;

try {
// 使用在SqlLink中定义的构造方法getOneCon连接池中获取一个连接对象
connection = conpool.getOneCon();
if (connection == null) {
// // 如数据库连接池不足或为空则输出
out.print("No!");
return;
}
statement = connection.createStatement();
resultset = statement.executeQuery("SELECT * FROM testuser");
out.print("<table border=1>");
out.print("<tr>");
out.print("<th>name</th>");
out.print("<th>age</th>");
out.print("</tr>");
while (resultset.next()) {
out.print("<tr>");
out.print("<td>"+ resultset.getString(1) + "</td>");
out.print("<td>"+ resultset.getString(2) + "</td>");
out.print("</tr>");
}
out.print("</table>");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultset != null) {
resultset.close();
}
if (statement != null) {
statement.close();
}
if (resultset != null) {
// 通过调用releaseCon方法将连接返回至连接池中
conpool.releaseCon(connection);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
%>
</body>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package bean;
import java.sql.*;
import java.util.ArrayList;
public class SqlLink {
ArrayList<Connection> list = new ArrayList<Connection>();

//Set SqlLink 15
public SqlLink() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// Sql Link set up 15
for (int link=0;link<15;link++) {
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testsp?characterEncoding=utf-8","root","password");
list.add(connection);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// Link SQL
public synchronized Connection getOneCon() {
if (list.size() > 0) {
// 移除连接池中的一个连接
return list.remove(0);
} else {
// 如连接对象用完
return null;
}
}
// 将连接返还连接池中
public synchronized void releaseCon(Connection connection) {
list.add(connection);
}
}

数据库查询、插入、删除

数据库查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*" %>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/testsp?characterEncoding=utf-8"
user="username" password="password"/>
<sql:query var="result" dataSource="${snapshot}">SELECT * FROM testuser;</sql:query>

<table border="1" width="100%">
<tr>
<th>name</th>
<th>age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.age}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>

数据库插入

在Java Server pages之中,可使用executeUpdate(String sql)方法主要用于执行INSERT\UPDATE的操作,即插入和删除等数据库语句,本次主要使用局部语句进行编写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*" %>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection connection = null;
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testsp","root","password");

try {
Statement stringdata = connection.createStatement();
String myData = "INSERT INTO testuser(name,age) VALUES('kunkun',10)";
stringdata.executeUpdate(myData);
out.print("Yes!");
} catch(SQLException e) {
out.print("No!");
}
%>
</body>
</html>

数据库删除

于数据库插入语句一样,都是使用executeUpdate(String sql)方法来执行INSERT\UPDATE的插入和删除的数据库语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*" %>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection connection = null;
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testsp","root","password");

try {
Statement stringdata = connection.createStatement();
String myData = "DELETE FROM testuser WHERE name = 'kunkun'";
stringdata.executeUpdate(myData);
out.print("Yes!");
} catch(SQLException e) {
out.print("No!");
}
%>
</body>
</html>

JSP Servlet 文件上传

在Java Server Pages语言之中,文件上传功能主要通过ServletPart文件对象进行实现,其中在Servlet3.0之前的版本无法直接进行文件上传的支持,需要使用第三方框架。

@MultipartConfig

@MultipartConfig 主要引用与Servlet中,其可提供对文件上传的支持,该注解主要写在Servlet之上。

ID DA FA
location string 指定上传目录
maxFileSize long 对上传文件大小进行限制(默认值为-1,即没有限制)
maxRequestSize login 指定上传文件个数 (默认值为-1,即没有限制)

Part

在文件上传之中,每个文件通常使用javax.servlet.http.Part对象进行表示,当单个上传文件时会通过对象调用方法getPart(String name)来获取Part文件对象。

ID DA FA
void delete() 上出任何相关的临时文件
String getContentType() 获取客户端浏览器设置的MIME类型
String getHeader(String name) 获取指定part头的一个字符串
InputStream getInputStream() 获取一个输入流、用于读取文件内容
String getName() 获取表单文件域名称
long getSize() 获取文件大小
void write(String fileName) 将文件上传到fileName指定的目录

multipart/form-data

在Java Server Pages之中,一般常用的Servlet文件上传主要使用multipart/form-data来进行实现。而如果使用multipart/form-data实现需要使用外部扩展jar包,可通过http://www.jiangxue.org.cn/MultipartRequest.jar进行下载后放入WEB-INF/lib之中即可。

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Upfile" method="post" enctype="multipart/form-data">
File:<input type="file" name="filename"/>
<input type="submit" value="up file"/>
</form>
</body>
</html>

Upfile.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

/**
* Servlet implementation class Upfile
*/
public class Upfile extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public Upfile() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();

// Part
MultipartRequest multipartrequest = new MultipartRequest(request,"/home/sun/Downloads");
out.print("File,ok!");
}

}

web.xml

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>Upfile</servlet-name>
<servlet-class>Upfile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Upfile</servlet-name>
<url-pattern>/Upfile</url-pattern>
</servlet-mapping>
</web-app>

JSP Expression Language与Java Server Pages Standard Tag Library

介绍表达式语言(Expression Language)和JSP标准标签库(Java Sever Pages Standard Tag Libray),在Java Server Pages页面之中, 可以显示逻辑,由于一般页面之中会夹杂很多HTML与Java的代码会给开发维护人员造成困难,这时可以使用EL来访问和处理应用程序数据,减少了Java的代码块使用。

EL(Expression Language)

EL是JSP2.0规范之中的语言,基本语法和PHP代码风格相似,如:

1
${code}

EL语句中的表达式会被直接显示到浏览器中进行显示,可通过isLIgnored属性来查看是否支持EL的表达式,当返回false时即JSP可以使用EL表达式,如isELIgnored属性微true时则JSP页面不能使用EL表达式输出,但会将原有EL表达式转换为字符串字符串进行输出。

错误处理机制

Expression Language中存在一个对开发人员非常友好的错误处理机制,那就是当Java Server Pages页面中Expression Language语法是不会报错的,如果出错则在Java Server Pages中不会出现。则不会像Eclipse web内置服务器中启动时的红色状态提醒,相比只想Expression Language简直对开发人员非常友好。

EL 常量与操作符

常量

Expression Language与其他开发语言一样,常量中包含布尔、整数、浮点数、字符串以及NULL等,其在Java Server Pages页面中可以通过Expression Language语法进行定义如:

1
${"Hello,world!"}

数组

在Java Server pages中,可以使用Expression Language来去除数组中的元素,可通过:

1
${array[0]}

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page isELIgnored="false" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Expression Language</h1>
<%
String dogs[] = {"jiangxue","zhongshan","sif"};
request.setAttribute("array",dogs);
%>

${array[0]}
</body>
</html>

运算符

Expression Language与通常的开发语言一样,可通过el进行运算符进行计算:

算数运算符
ID DA FA
+ 加法 ${1+1}
- 减法 ${2-1}
× 乘法 ${1*2}
/ 除法 ${1/2}
% 求余 ${1%2}
关系运算符
ID DA FA
== 等于 eq
!= 不等于 ne
< 小于 lt
> 大于 gt
<= 小于或等于 le
>= 大于或等于 ge
逻辑运算符
ID DA FA
&& 逻辑与 and
ll 逻辑或 or
! 逻辑非 not

隐含对象

在Java Server Pages Expression Language隐含对象共有11个,而常用的隐含对象则有:```pageScope、requestScope、sessionScope、applicationScope、param和param Values。

作用范围

通常,常用的Expression Language的隐含对象分别微:pageScope、requestScope、sessionScope、applicationScope,分别可以对Java Server Pages获取内置对象pageContext、request、session、application中的数据。

param

param对象可用于获取请求参数值,本书主要分为NewFile.jsplogin.jsp,NewFile.jsp用于提交,login.jsp主要用于获取NewFile.jsp中的值。

NewFile.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page isELIgnored="false" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Expression Language NewFile</h1>
<form action="login.jsp" method="post">
<input type = "text" name = "user" id = "user">
<button type="sumbit">up</button>
</form>
</body>
</html>

login.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Expression Language login</h1>
${param.user}
</body>
</html>
pageContext

pageContext即页面上下文对象,可用于访问Java Server Pages中内置对象中的```request、response、out、session、exception、page、servletContext,获取相关的属性。

ID DA FA
pageContext.request.serverPort 当前端口 request
pageContext.response.contentType 页面编码 response
pageContext.out.bufferSize 访问out对象 out
pageContext.session.maxInactiveInterval 访问session 对象 session
pageContext.exception.message 访问exception 对象 exception
pageContext.servletContext.contextPath 当前工作目录 servletContext

JSTL (Java Server Pages Standard Tag Library)

JSTL是Sun公司进行制定的规范,由Apache Jarkarta小组进行负责并实现,JSTL由标准标签库由五个不同功能的标签库所组成。

<c:out>

<c:out>标签可以用来显示一个过大是的结果,与<%= %>作用相似。,在Java Server Pages Stajdard Tag Library<c:out>由如下属性:

ID DA FA
value 输出内容
default 默认输出值
escapeXml 是否忽略xml特殊字符

使用JSTL 输出文字

添加环境

在编写JSTL(Java Server Pages Standard Tag Library)时,可使用Tomcat或直接使用语法进行引用,本书仅使用第二种进行演示,以下语法主要插入在第二行之中:

1
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

如:

1
2
3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
value

value在Java Server Pages Standard Tag Library中可以输出指定的内容,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<c:out value="Hello">
defaultValue
</c:out>
</body>
</html>
default

在Java Server Pages Standard Tag Library中的default主要用于当value中值不存在时,就会输出default中的数据,即默认输出值:

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<c:out value="${param.data}" default="Value No data" />
</body>
</html>

<c:set> 与 <c:remove> 即赋值与删除赋值

<c:set>主要在Java Server Pages Standard Tag Library中主要用于设置作用域变量,也可设置JavaBean属性:

赋值

将value 赋值给变量Name,其主要通过<c:set>进行赋值,之后${}进行获取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<c:set value="sif" var="Name" scope="session"/>

<!-- 获取变量 -->
${Name}
</body>
</html>

其主要相当于Java中的:

1
<% session.setAttribute("Name","sif"); %>

删除赋值 (<c:remove>)

<c:remove>主要可以进行删除某个变量,可以写为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<c:set value="sif" var="Name" scope="session"/>
<!-- remove Name -->
<c:remove var="Name" scope="session"/>
${Name}
</body>
</html>

流程控制标签

<c:if> / <c:else>

在Java Server Pages Standard Tag Library中,可以使用<c:if>来实现if语句,其中条件表达式可以是EL、JSP等。如果满足则执行<c:if>中的code,如果不满足则会使用<c:esle>中的code,但这也只仅仅是给想法,<c:else> 不在JSTL中存在
如果像实现在条件成立时执行一块code,不成立时执行的code,则可以使用:<c:choose>、<c:when>以及<c:otherwise>标签,格式如下:

1
2
3
4
5
6
7
8
9
10
11
<c:choose>
<c:when test="条件1">
// code
</c:when>
<c:when test="条件2">
// code
</c:when>
<c:otherwise>
表达式不正确时,执行主体
</c:otherwise>
</c:choose>

if……if……else

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<c:set value="sun" var="user" scope="page"/>
<c:choose>
// 满足li时执行
<c:when test="${user == 'li'}">
<c:out value="li"/>
</c:when>
// 满足sun时执行
<c:when test="${user == 'sun'}">
<c:out value="sun"/>
</c:when>
// 都不满足时执行
<c:otherwise>
<c:out value="other"/>
</c:otherwise>
</c:choose>
</body>
</html>

循环标签

<c:forEach>

<c:forEach>标签可以用于在Java Server Pages Standard Tag Library中实现for循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<title>c:out</title>
</head>
<body>
<h1>Java Server Pages Standard Tag Library</h1>
<%
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
request.setAttribute("list",list);
%>
<c:forEach items="${requestScope.list}" var="keyword" varStatus="id">
${id.index } ${keyword }<br>
</c:forEach>

</body>
</html>

其他标签

<e:forTokens>

<e:forTokens>标签主要用于分割字符串,其主要可通过":"来实现字符串的分割:

1
2
3
<c:forTokens items="one:two:three" delims=":" var="name">
${name}<br>
</c:forTokens>
URL标签

在Java Server Pages Standard Tag Library中,主要提供来三种URL操作的相关标签,分别为<c:url>、<c:redirect>、<c:import>

ID DA FA
<c:url> 标签主要构建一个url地址
<c:param> 指定url地址传递参数
<c:redirect> 主要用于重定向其他url,即直接跳转:
<c:url>
ID DA FA
value 指定构造URL
var 指定报构造的url保存到范围域中的属性名称
scope 指定构造url保存到范围域中
context 指定url地址所属到同一web下
1
2
<h1>Java Server Pages Standard Tag Library</h1>
<a href="<c:url value="http://zsdk.org.cn/"/>">Up zsdk.org.cn</a>

其中,<c:url>标签主要构建一个url地址,可通过上述或以下写法进行编写:

1
2
<c:url value="http://zsdk.org.cn/" var="gourl"/>
<a href="${gourl}">up zsdk.org.cn</a>
<c:param>

<c:param>标签向指定url地址传递参数:

1
2
3
4
5
<c:url value="http://zsdk.org.cn/" var="gourl" context="/src" scope="page">
<c:param name="user" value="chenheng"/>
<c:param name="pass" value="pass"/>
</c:url>
<a href="${gourl}">go url</a>
<c:redirect>

<c:redirect>主要在Java Server Pages Standard Tag Library 主要用于重定向其他url,即直接跳转:

1
2
<c:url value="http://zsdk.org.cn/" var="gourl"/>
<c:redirect url="${gourl }"/>

JSP 基础

JSP即Java Server Pages 即“JAVA 服务器页面”,是一种动态网页技术,由Sun Microsystems公司所倡导的一种动态网页技术标准。JSP主要实在传统网页HTML文件中插入JAVA程序代码块,和JSP标记,从而形成的*.jsp文件,主要应用在跨平台,可通过各种系统中运行。

什么是JSP文件

JSP文件即Java Server Pages保存的文件格式,在一个JSP文件之中可以拥有普通的HTML标记,JSP规定的标记以及JAVA程序。其保存的扩展名也是”.jsp”,保存名称可以由字母、下划线、数字等组成。

JSP 运行原理

当WEB Server上的页面被客户端进行请求时,WEB上的JSP文件将会被JSP引擎将JSP文件转译成Java文件,并将Java文件编译成字节码文件。而字节码在服务端上创建一个Java Servlet服务连接器对象,然后执行该对象。同时发送一个HTML页面到客户端响应的请求。
当JSP页面被再次请求时,JSP引擎为每个客户端启动一个线程并将执行的对应服务连接器(Java Servlet)请求。(这也是JSP响应速度比较快的原因之一,可以理解为浏览器缓存一样的技术)

Jsp引擎处理流程

1.HTML

将JSP页面中的静态元素即HTML代码块直接发欧式那个客户端浏览器进行显示;

2.HTML -> JAVA

将JSP页面中的动态元素即Java和JSP代码块进行必要的处理,然后将需要显示的结果发送给客户端浏览器。

创建一个JSP文件

创建项目

首先启动Eclipse ,之后选择File -> New -> Other

然后选择Web -> Dynamic Web Project

填写后信息在Mawen项目构建目录中选中WebContent中右击New -> Jsp File输入名称后即可完成项目的创建。

编写的一个JSP页面

1
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

需要用上述代码块让Java Server Pages来识别该文件和代码是Jsp项目文件,否则将无法输出或输出的不是预期项目。

1
2
3
<body>
<center><p>Hello,world!</p></center>
</body>

有前端基础的读者会发现JSP还支持简单的HTML语句,在JSP之中,我们可以在<body>中加入需要的Java Server Pages代码块,也可以使用基本的Html元素。

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<center><p>Hello,world!</p></center>
</body>
</html>

以上是完整的Java Script Pages代码块实例

Java Maven

archetype

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|- archetype
| |- bin
| | |- src
| | | |- main
| | | |- resources
| | | |- archetype-resources
| | | | |- src
| | | | | |- main
| | | | | | |- java
| | | | | | |- App.class
| | | | | |- test
| | | | | |- java
| | | | | |- AppTest.class
| | | | |- pom.xml
| | | |- META-INF
| | | |- maven
| | | |- archetype.xml
| |- src
| | |- main
| | |- resources
| | |- archetype-resources
| | | |- src
| | | | |- main
| | | | |- java
| | | | |- App.java
| | | | |- test
| | | | |- java
| | | | |- AppTest.java
| | | |- pom.xml
| | |- META-INF
| | |- maven
| | |- archetype.xml
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- archetype
| | | |- archetype
| | |- pom.pro.perties
| | |- pom.xml
| |- pom.xml

Simple

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|- project
| |- ear
| | |- target
| | | |- m2e-wtp
| | | |- ear-resources
| | | |- MATE-INF
| | | |- maven
| | | |- root.project
| | | |- ear
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- ejbs
| | |- src
| | | |- main
| | | |- resources
| | | |- META-INF
| | | |- ejb-jar.xml
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- root.project
| | | |- ejbs
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- primary-source
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- root.project
| | | |- primary-source
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- projects
| | |- logging
| | | |- bin
| | | | |- target
| | | | | |- classes
| | | | | |- META-INF
| | | | | |- maven
| | | | | |- root.project.projects
| | | | | |- logging
| | | | | |- pom.properties
| | | | | |- pom.xml
| | | | |- pom.xml
| | | |- target
| | | | |- classes
| | | | | |- META-INF
| | | | | |- maven
| | | | | |- root.project.projects
| | | | | |- logging
| | | | | |- pom.properties
| | | | | |- pom.xml
| | | | |- test-classes
| | | |- pom.xml
| | |- pom.xml
| |- serviets
| | |- servlet
| | | |- src
| | | | |- main
| | | | |- webapp
| | | | |- WEB-INF
| | | | |- web.xml
| | | | |- index.jsp
| | | |- target
| | | | |- m2e-wtp
| | | | |- web-resources
| | | | |- META-INF
| | | | |- maven
| | | | |- root.project.servlets
| | | | |- servlet
| | | | |- pom.properties
| | | | |- pom.xml
| | | |- pom.xml
| | |- pom.xml
| |- src
| | |- main
| | | |- resources
| |- pom.xml

plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|- plugin
| |- src
| | |- it
| | | |- simple-it
| | | | |- pom.xml
| | | | |- verify.groovy
| | | |- settings.xml
| | |- main
| | | |- java
| | | |- plugin
| | | |- plugin
| | | |- MyMojo.java
| |- bin
| | |- src
| | | |- it
| | | | |- simple-ti
| | | | | |- pom.xml
| | | | | |- verify.groovy
| | | | |- settings.xml
| | | |- main
| | | | |- java
| | | | |- plugin
| | | | |- plugin
| | | | |- MyMojo.class
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- plugin
| | | |- plugin
| | |- pom.xml
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- plugin
| | | |- plugin
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

plugin-site

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|- plugin-site
| | - bin
| | |- src
| | | |- site
| | | |- apt
| | | | |- examples
| | | | | |- example.apt
| | | | |- index.apt
| | | | |- usage.apt
| | | |- site.xml
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- plugin-site
| | | |- plugin-site
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- src
| | |- site
| | | - apt
| | | |- examples
| | | | |- example.apt
| | | |- index.apt
| | | |- usage.apt
| | |- site.xml
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- plugin-site
| | | |- plugin-site
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

portlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|- portlet
| |- bin
| | |- src
| | | |- main
| | | |- java
| | | | |- portlet
| | | | |- portlet
| | | | | |- MyPortlet.class
| | | |- jetspeed
| | | | |- web.xml
| | | |- resources
| | | |- webapp
| | | | |- WEB-INF
| | | | | |- tld
| | | | | |- portlet.tld
| | | | |- help.jsp
| | | | |- maximized.jsp
| | | | |- normal.jsp
| | |- target
| | | |- classes
| | | |-m2e-wtp
| | | |- web-resources
| | | |- META-INF
| | | | |- maven
| | | |- portlet
| | | |- portlet
| | |- pom.xml
| |- src
| | | |- main
| | | |- java
| | | | |- portlet
| | | | |- portlet
| | | | | |- MyPortlet.class
| | | |- jetspeed
| | | | |- web.xml
| | | |- resources
| | | |- webapp
| | | | |- WEB-INF
| | | | | |- tld
| | | | | |- portlet.tld
| | | | | |- web.xml
| | | | |- help.jsp
| | | | |- maximized.jsp
| | | | |- normal.jsp
| |- target
| | |- classes
| | |- m22e-wtp
| | | |- web-resources
| | | |- META-INF
| | | |- maven
| | | |- portlet
| | | |- portlet
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

profiles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|- profiles
| |- bin
| | |- src
| | | |- main
| | | | |- java
| | | | |- profiles
| | | | |- profiles
| | | | |- App.class
| | | |- test
| | | |- java
| | | |- profiles
| | | |- profiles
| | | |- AppTest.class
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- profiles
| | | |- profiles
| | |- pom.xml
| |- src
| | |- main
| | | |- java
| | | |- profiles
| | | |- profiles
| | | |- App.java
| | |- test
| | |- java
| | |- profiles
| | |- profiles
| | |- AppTest.java
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- profiles
| | | |- profiles
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

quickstart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|- quickstart
| |-bin
| | |- src
| | | |- main
| | | | |- java
| | | | |- quickstart
| | | | |- quickstart
| | | | |- App.class
| | | |- test
| | | |- java
| | | |- quickstart
| | | |- quickstarat
| | | |- AppTest.class
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- quickstart
| | | |- quickstart
| | |- pom.xml
| |- src
| | |- main
| | | |- java
| | | |- quickstart
| | | |- quickstart
| | | |- App.java
| | |- test
| | |- java
| | |- quickstart
| | |- quickstart
| | |- AppTest.java
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- quickstart
| | | |- quickstart
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |-pom.xml

site

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|- site
| |- bin
| | |- src
| | | |- site
| | | |- apt
| | | | |- format.apt
| | | | |- index.apt
| | | |- fml
| | | | |- faq.fml
| | | |- fr
| | | | |- apt
| | | | | |- format.apt
| | | | | |- index.apt
| | | | |- fml
| | | | | |-faq.fml
| | | | |- xdoc
| | | | |- xdoc.xml
| | | |- xdoc
| | | | |- site.xml
| | | | |- site.fr.xml
| | | |- site.xml
| | | |- site_fr.xml
| | |- target
| | | |- classes
| | | |- META-INF
| | | |- maven
| | | |- site
| | | |- site
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- src
| | |- site
| | |- apt
| | | |- format.apt
| | | |- index.apt
| | |- fml
| | | |- faq.fml
| | |- fr
| | | |- apt
| | | | |- format.apt
| | | | |- index.apt
| | | |- fml
| | | | |-faq.fml
| | | |- xdoc
| | | |- xdoc.xml
| | |- xdoc
| | | |- xdox.xml
| | |- site.xml
| | |- site_fr.xml
| |- target
| | |- classes
| | | |- META-INF
| | | |- maven
| | | |- site
| | | |- site
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

Simple

1
2
3
4
5
6
|- simple
| |- src
| | |- apt
| | | |- index.apt
| | |- site.xml
| |- pom.xml

webapp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|- webapp
| |- bin
| | |- src
| | | |- resources
| | | | - webapp
| | | |- WEB-INF
| | | | |- web.xml
| | | | index.jsp
| | |- target
| | | |- classes
| | | |- m2e-wtp
| | | |- web-resources
| | | |- META-INF
| | | |- maven
| | | |- webapp
| | | |- webapp
| | | |- pom.properties
| | | |- pom.xml
| | |- pom.xml
| |- src
| | |- main
| | |- resources
| | |- webapp
| | |- WEB-INF
| | | |- web.xml
| | |- index.jsp
| |- target
| | |- classes
| | |- m2e-wtp
| | | |- web-resources
| | | |- META-INF
| | | |- maven
| | | |- webapp
| | | |-webapp
| | | |- pom.properties
| | | |- pom.xml
| | |- test-classes
| |- pom.xml

JAVA 正则表达式实例

1.手机号规则

1
2
3
4
5
6
7
8
9
10
String str = "18123739515";
// ^为正则开始,¥为表示正则结束
String reg = "^1[3|4|5|8][1-9]\\d{8}$";

// 实例化正则表达式
patter patter = Pattern.compile(reg);
Matcher matcher = pattern.matcher(str);

// 判断是否符合正则表达式要求
boolean bo = matcher.matches();

1.1 1[3|4|5|8]

​ 首先我们的手机号一般以1×× 开头,那正则表达式应为 “1[3|4|5|8]” [1|3]的意思就是1 or 3.

1.2 [0-9]

​ 然后我们手机号除去开头三位数为**8位,构造正则表达式为 [0-9]**,也就是0~8.

1.3 [\\d]

​ 之后我们要匹配任意数字自然需要使用\\d来表达匹配任意数字.

1.4 {8}

​ 然后我们还需要精准匹配前三位的开头数字需要使用 **{8}**,也就是精准匹配8前面的数字。

2.名称规则

1
2
3
4
5
6
7
8
9
String str = "a__123213_3asdas!#";
String reg = "[a-z_!@#][A-Z_!@#][A-Za-z1-9_!@#]"

// 实例化
Pattern pattern = Patterncompile(reg);
Matcher matcher = pattern.matcher(str);

// 检测是否正确
boolean bo = matcher.matches();

2.1 [a-z_!@#]

​ 首先我们可以让名称A~Z如**[a-z_!@#]**,让用户可以输入a~z和一些特殊符号_!@#。

2.2 [A-Z_!@#]

​ 当然你也可以使用大写的定义正则为**[A-Z_!@#]**,让用户可以输入A~Z的字母和特殊符号_!@#。

2.3 [A-Za-z1-9_!@#]

​ 如果还想让用户可以输入数字可以定义为**[A-Za-z1-9_!@#]**,使用户可以输出A~Z、a~z、1~9和特殊字符!@#等。

2.4 +

​ 而**+是匹配0或1个在他之钱的字符,放在最后用于匹配他之前的正则式子**

JAVA 日期时间

java.util.Date

ID DE
toString Sun Aug 02 15:57:31 CST 2020
%tc%n 周日 8月 02 16:11:04 CST 2020
%tF%n 2020-08-02
%tD%n 08/02/20
%tr%n 04:14:24 下午
%tT%n 16:14:24
%tR%n 16:14

toString

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Date;

public class Demo {
private static int Date = 0;

public static void main (String args[]) {
Date date = new Date();

while (Date < 1){
Date++;
System.out.println("" + date.toString());
}

}
}

%tN%n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Date;

public class Demo {
public static void main (String args[]) {
Date date = new Date();

// 周日 8月 02 16:14:24 CST 2020
System.out.printf("%tc%n",date);

// 2020-08-02
System.out.printf("%tF%n",date);

// 08/02/20
System.out.printf("%tD%n", date);

// 04:14:24 下午
System.out.printf("%tr%n", date);

// 16:14:24
System.out.printf("%tT%n", date);

// 16:14
System.out.printf("%tR%n", date);
}
}

JAVA Switch case

​ Switch case 语句可进行匹配,比如将char定义为10,然后根据Switch case 语句进行查询,如char = 10 的时候,如果Switch case 的值正好为 10 时,则执行case = 10 的语句.如果不是默认输出*default内的信息

1
2
3
4
5
6
7
8
9
10
11
switch (c) {
case 10:
// 10
break:
case 20:
// 20
break;

default:
// 如果都不是?
}

​ 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Demo {
public static void main (String args[]) {
char c = 10;
switch (c) {
case 10:
case 5:
System.out.println("小孩子");
break;

case 20:
case 18:
System.out.println("年轻人");
break;

default:
System.out.println("你还是个人?");
}
}
}
📖 more posts 📖