JSP语言入门
- 目录
- 一、 基础概念
- 1. 什么是JSP?
- 2. 工作原理
- 3. 基本语法
- 二、 表达式语言(EL)
- 1. 简介
- 2. 语法
- 三、 JSTL(JSP Standard Tag Library)
- 1. 简介
- 2. 核心标签库
- 3. 常用标签
- 四、 高级话题
- 1. 会话管理
- 2. 自定义标签
- 3. MVC模式
- 五、 实践项目
- 1. 项目描述
- 2. 项目结构
目录
JSP(JavaServer Pages) 是一种用于创建动态网页的技术,允许在HTML页面中嵌入Java代码。
以下是一个详细的JSP教程,涵盖从基础到高级的内容。
一、 基础概念
1. 什么是JSP?
- JSP是一种服务器端技术,类似于PHP和ASP,主要用于生成动态网页内容。
- JSP文件扩展名为.jsp,内部可以包含HTML、Java代码、以及JSP标签。
2. 工作原理
- 客户端请求:用户通过浏览器请求一个JSP页面。
- 服务器处理:服务器接收到请求,将JSP页面转换为一个Servlet(Java类),并编译。
- 响应生成:Servlet处理请求,生成HTML内容返回给客户端。
3. 基本语法
脚本元素:用来嵌入Java代码。
<% code %>:脚本片段
<%= expression %>:表达式
<%! declaration %>:声明
指令元素:用来设置JSP页面的全局属性。
<%@ page %>:定义页面依赖,比如编码格式、导入包等。
<%@ include %>:引入文件。
<%@ taglib %>:引入标签库。
动作元素:用来执行特定任务。
jsp:forward:请求转发。
jsp:include:包含其他资源。
代码示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JSP示例</title>
</head>
<body><% String message = "Hello, JSP!";%><h1><%= message %></h1>
</body>
</html>
二、 表达式语言(EL)
1. 简介
EL(Expression Language) 是一种简洁的语法,用于访问Java对象的属性,调用方法等。EL使得在JSP中嵌入Java代码更加简单和直观。
2. 语法
- ${expression}:表达式语法,用于输出值。
- 支持基本运算、关系运算、逻辑运算 等。
示例代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>EL示例</title>
</head>
<body><c:set var="name" value="John Doe" /><h1>Hello, ${name}!</h1>
</body>
</html>
三、 JSTL(JSP Standard Tag Library)
1. 简介
JSTL 是一个标准标签库,为JSP提供了一组常用功能,如条件判断、循环、国际化等。
2. 核心标签库
导入核心标签库:<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
3. 常用标签
- 条件判断:<c:if>,<c:choose>,<c:when>,<c:otherwise>
- 循环:<c:forEach>,<c:forTokens>
- 设置/移除变量:<c:set>,<c:remove>
- 输出:<c:out>
代码示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>JSTL示例</title>
</head>
<body><c:forEach var="i" begin="1" end="5"><p>Number: ${i}</p></c:forEach>
</body>
</html>
四、 高级话题
1. 会话管理
Session:用于在客户端和服务器之间保存用户数据。
代码示例
<%HttpSession session = request.getSession();session.setAttribute("username", "John Doe");
%>
<p>Username: <%= session.getAttribute("username") %></p>
2. 自定义标签
- 创建自定义标签可以提高代码的重用性和可读性。
- 步骤:
- 创建标签处理类,继承TagSupport或SimpleTagSupport。
- 定义标签库描述文件(TLD)。
- 在JSP页面中导入并使用自定义标签。
3. MVC模式
- 将JSP与Servlet结合使用,实现MVC(Model-View-Controller)设计模式。
- Model:JavaBeans或其他Java类,负责业务逻辑和数据。
- View:JSP页面,负责显示数据。
- Controller:Servlet,负责处理请求和响应。
五、 实践项目
1. 项目描述
创建一个简单的用户登录系统,包括用户注册、登录、注销功能。
2. 项目结构
- WebContent- index.jsp- login.jsp- register.jsp- welcome.jsp- WEB-INF- web.xml- lib- jstl.jar- standard.jar
- src- com.example- LoginServlet.java- RegisterServlet.java- User.java
示例代码
index.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>首页</title>
</head>
<body><h1>欢迎</h1><a href="login.jsp">登录</a> | <a href="register.jsp">注册</a>
</body>
</html>
login.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>登录</title>
</head>
<body><h1>登录</h1><form action="LoginServlet" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><button type="submit">登录</button></form>
</body>
</html>
register.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>注册</title>
</head>
<body><h1>注册</h1><form action="RegisterServlet" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><button type="submit">注册</button></form>
</body>
</html>
welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%HttpSession session = request.getSession();String username = (String) session.getAttribute("username");if (username == null) {response.sendRedirect("login.jsp");}
%>
<html>
<head><title>欢迎</title>
</head>
<body><h1>欢迎, <%= username %>!</h1><a href="LogoutServlet">注销</a>
</body>
</html>
LoginServlet.java
package com.example;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");if ("admin".equals(username) && "password".equals(password)) {HttpSession session = request.getSession();session.setAttribute("username", username);response.sendRedirect("welcome.jsp");} else {response.sendRedirect("login.jsp");}}
}
RegisterServlet.java
package com.example;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class RegisterServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 简单模拟注册逻辑if (username != null && password != null) {HttpSession session = request.getSession();session.setAttribute("username", username);response.sendRedirect("welcome.jsp");} else {response.sendRedirect("register.jsp");}}
}
web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1"><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.example.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.example.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet</url-pattern></servlet-mapping>
</web-app>