JSP(Java服务端页面)

本文介绍了JSP的基础知识,包括它如何结合HTML、JavaScript和CSS,并避免在servlet中直接输出HTML。JSP的本质是一个servlet,编译后生成的.java文件包含了自动化的输出方法。文章展示了如何使用JSP进行动态内容渲染,以及EL表达式和JSTL标签库简化代码的方式,强调了它们在数据获取和逻辑处理中的作用。最后,通过一个用户管理的例子,演示了如何在servlet中处理逻辑并转发给JSP进行展示,以及JSTL在分页和条件判断中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jsp=java+html可写html、js、css和java代码

避免了在servlet中直接输出html标签,如write.write("<h1>hello</h1>")

jsp本质是一个servlet。

快速入门

依赖
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
            <!--编译和测试有效,运行环境无效。因为打包发布到的tomcat中也有servlet的jar包,运行会jar包冲突-->
        </dependency>
webapp目录下new一个jsp/jspx文件jsp/Hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>hello jsp~</h1>
    <% System.out.printf("jsp java代码...");%>
</body>
</html>

运行后生成的编译文件hello_jsp.java其实是一个servlet,里面自动生成了out = pageContext.out;out.write("<h1>hello jsp~/h1>")或pot.print()这两个输出方法到网页上。

<%...%>:内容放到_jspService方法中

<%=...%>:内容放到out.print()中,作为out.print()参数

<%!...%>:内容放到_jspService()方法之外,被类直接包含

Demo

<%@ page import="java.util.ArrayList" %>
<%@ page import="com.kdy.pojo.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello</title>
</head>
<body>
<%
    List<User> users = new ArrayList<User>();
    Date birthday = new Date(2021, 02, 23);
    users.add(new User(1, "zhangsan1", "zhangsan123111", "zhangsan@163.com111", birthday, "1", "englishTeacher1", 1));
    users.add(new User(2, "zhangsan2", "zhangsan123222", "zhangsan@163.com222", birthday, "2", "englishTeacher1", 0));
    users.add(new User(3, "zhangsan3", "zhangsan123333", "zhangsan@163.com333", birthday, "3", "englishTeacher1", 1));
%>
<table border="1px">
    <tr align="center">
        <td>ID</td>
        <td>name</td>
        <td>密码></td>
        <td>email</td>
        <td>生日</td>
        <td>infoId></td>
        <td>englishTeacher</td>
        <td>status</td>
        <td>操作</td>
    </tr>
    <%
        for (int i = 0; i < users.size(); i++) {
            User user = users.get(i);
    %>
    <tr align="center">
        <td><%=user.getId()%>
        </td>
        <td><%=user.getName()%>
        </td>
        <td><%=user.getPassword()%>
        </td>
        <td><%=user.getEmail()%>
        </td>
        <td><%=user.getBirthday()%>
        </td>
        <td><%=user.getInfoId()%>
        </td>
        <td><%=user.getEnglishTeacher()%>
        </td>
        <%
            if (user.getStatus() == 1) {
        %>
        <td><%="启用"%>
        </td>
        <%
        } else {
        %>
        <td><%="禁用"%>
        </td>
        <%
            }
        %>
        <td><a href="#">修改</a><a href="#">删除</a></td>
    </tr>
<%
    }
%>
</table>
</body>
</html>

鉴于jsp的复杂度高、阅读麻烦,现一般在servlet写处理逻辑的java代码并转发给jsp展示。

EL表达式

获取数据,简化JSP的展示数据的代码

${expression}:EL会按照page->request->session->applicaiton四个域对象去找expression.

el表达式获取page域的虚拟目录代码如下:
<form action="${pageContext.request.contextPath}/user/quick" method="post"></form>

JSTL

使用标签代替JSP中的Java代码。

常用<c:if test="${user.status==1}">开启</c:if>

<c:forEach items="${users}" var="user"></c:forEach>

需要引入jstl和standard依赖,并在jsp中引入jstl标签库uri

date格式化标签库:<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

input的date类型回显date格式化举例:<input name="birthday" type="date" value="<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>" required="required">

练习使用EL和JSTL

JSTL坐标
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
servlet
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<User> users = new ArrayList<User>();
        Date birthday = new Date(2021, 02, 23);
        users.add(new User(1, "zhangsan1", "zhangsan123111", "zhangsan@163.com111", birthday, "1", "englishTeacher1", 1));
        users.add(new User(2, "zhangsan2", "zhangsan123222", "zhangsan@163.com222", birthday, "2", "englishTeacher1", 0));
        users.add(new User(3, "zhangsan3", "zhangsan123333", "zhangsan@163.com333", birthday, "3", "englishTeacher1", 1));
        req.setAttribute("users",users);
        req.getRequestDispatcher("/jsp/User.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
webapp目录下创建jsp/Useer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!--引入jstl标签库URI-->
<html>
<head>
    <title>User</title>
</head>
<body>
<table border="1px">
    <tr align="center">
        <td>jstl序号</td>
        <td>ID</td>
        <td>name</td>
        <td>密码></td>
        <td>email</td>
        <td>生日</td>
        <td>infoId</td>
        <td>englishTeacher</td>
        <td>status</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${users}" var="user" varStatus="order">
        <tr align="center">
            <td>${order.index}</td>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.password}</td>
            <td>${user.email}</td>
            <td>${user.birthday}</td>
            <td>${user.infoId}</td>
            <td>${user.englishTeacher}</td>
            <c:if test="${user.status ==1}">
                <td>启用</td>
            </c:if>
            <c:if test="${user.status ==0}">
                <td>禁用</td>
            </c:if>
            <td><a href="#">修改</a>&amp;<a href="#">删除</a></td>
        </tr>
    </c:forEach>
</table>
<h3>分页</h3>
<c:forEach begin="1" end="10" step="1" var="i">
    <a href="#">${i}</a>
</c:forEach>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值