10.1 JSP语言入门

1 篇文章 0 订阅

目录

JSP(JavaServer Pages) 是一种用于创建动态网页的技术,允许在HTML页面中嵌入Java代码。
以下是一个详细的JSP教程,涵盖从基础到高级的内容。

一、 基础概念

1. 什么是JSP?

  • JSP是一种服务器端技术,类似于PHP和ASP,主要用于生成动态网页内容。
  • JSP文件扩展名为.jsp,内部可以包含HTML、Java代码、以及JSP标签。

2. 工作原理

  1. 客户端请求:用户通过浏览器请求一个JSP页面。
  2. 服务器处理:服务器接收到请求,将JSP页面转换为一个Servlet(Java类),并编译。
  3. 响应生成: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. 自定义标签

  • 创建自定义标签可以提高代码的重用性和可读性。
  • 步骤
    1. 创建标签处理类,继承TagSupport或SimpleTagSupport。
    2. 定义标签库描述文件(TLD)。
    3. 在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 {
    @Override
    protected 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 {
    @Override
    protected 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>


在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ibun.song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值