一文带你吃透JSP,增删改查实战案例详细解读(一)

简介: 一文带你吃透JSP,增删改查实战案例详细解读(一)

前言


不得不说,JSP 现在已经是一门十分老旧的技术了,学习编程时,不仅要学习优秀的前言技术,还要对基础有一定的把握,所以学习 JSP 时,我们只做了解,不用刨根问底花费大量的时间,得不偿失。

我们主要从以下几个方面学习 JSP 技术:

  • 理解 JSP 及其原理
  • 学会使用 EL 表达式和 JSTL 标签
  • 理解 MVC 模式和三层架构(重点)


学习 JSP 到什么程度呢?我们只需要能够使用 JSP 相关技术能够实现简单数据的增删改查即可。

JSP 概述


JSP,Java Server Pages,指的是 Java 服务端页面,是一种动态的网页技术,其中既可以定义 HTML,CSS,JavaScript 静态内容,也可以使用 Java 代码定义动态内容。通俗的说,JSP = HTML + Java 。下面就是一个最简单的 JSP 代码:

<html>
  <head>
      <title>title</title>
  </head>
  <body>
  <h1>HelloWorld</h1>
  <%
        System.out.println("HelloWorld!");
  %>
  </body>
</html>


上面的例子中,html 里面的内容会在浏览器渲染,而 Java 代码的输出语句会打印在 idea 控制台。

那么 JSP 到底是用来做什么的?我们如何实现不同用户登录网页显示不同的信息呢?例如,在页面上显示登录的用户名:

1.1.png

在 Servlet 中,我们使用 write 对象向浏览器写数据,html 标签可以作为字符串传入 write() 方法中。但是,当向页面写出大量数据时,代码显得十分的混乱不堪,并且后期后期维护成本极大。而 JSP 就结局了这个问题,在 JSP 代码中可以直接使用 html 标签,动态数据也可以使用 Java 代码展示,大大的简化了开发,避免了在 Servlet 中直接输出 html 标签。

JSP快速入门


搭建环境


在 idea 中创建一个 Maven Web 项目,项目结构如下:

1.2.png

在 pom.xml 添加 Servlet 的依赖坐标和 TomCat 插件坐标,如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.chengzi</groupId>
  <artifactId>jsp-demo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>jsp-demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
    <finalName>jsp-demo</finalName>
  </build>
</project>


导入JSP依赖


在 pom.xml 中添加 JSP 的依赖坐标,如下:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>


创建 JSP 页面


在项目的 webapps 文件目录下创建 jsp 页面,如图:

1.3.png

通过上面的操作创建一个名为 hello.jsp 的页面。

编写代码


在 hello.jsp 中书写 HTML 标签和 Java 代码,如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <h1>HelloWorld</h1>
<%
    System.out.println("helloWorld!");
%>
</body>
</html>


测试


启动 Tomcat 服务器,在浏览器访问 http://localhost:8080/jsp-demo/hello.jsp,结果如下:

1.4.png

JSP原理


之前,我们在 jsp 中不仅编写了 html 标签,还编写了 Java 代码,为什么呢?其实,JSP 本质上就是一个 Servlet。要弄明白这个问题,我们就要研究 jsp 的执行流程。

1.5.png

在上面的例子中,浏览器第一次访问 heelo.jsp 页面时,Tomcat 会将 hello.jsp 装换为名为 hello_jsp.java 的一个Servlet, 然后 这个 Servlet 会被 TomCat 编译为字节码文件 hello_jsp.class 。TomCat 会执行该字节码文件向外提供服务。

此时在项目磁盘目录下找到 target\tomcat\work\Tomcat\localhost\jsp-demo\org\apache\jsp ,在这个文件目录下就可以看到装换后的 Servlet 和编译后的 .class 文件。如图:

1.6.png

打开 hello_jsp.java 文件查看源码,如图:

1.7.png

可以发现转换后的 hello_jsp 类继承自 HttpJspBase ,其实 HttpJspBase 类是继承自 HttpServlet 的,我们可以查看 TomCat 源码,所以 hello_jsp 类间接继承了 HttpServlet ,也就是说,JSP 容器将 JSP 文件装换成了一个 Servlet。

在 hello_jsp 类中还有一个 _jspService() 方法,该方法和 Servlet 中的 service 方法类似,在每次访问警示牌 jsp 时自动执行。如图:

1.8.png

在 _jspService() 方法中可以看到完浏览器中写的标签和 Java 代码,如下:

1.9.png

不难看出,在 <%...%> 中的 Java 代码被放到了 _jspService() 方法中,这段 Java 代码被称为 JSP 脚本。

JSP 脚本


JSP 脚本用于在 JSP 页面内定义 Java 代码,之前案例中使用到的 Java 代码就是定义在 JSP 脚本中的,JSP 脚本一共分为 3 类:

  • <%…%> 内容会直接放到 _jspService() 方法中
  • <%=…%> 内容或被放到 out.print() 中,作为该的方法的参数
  • <%!..%> 内容会被放到 _jspService() 方法之外,被类直接包括

代码演示:

第一步:在 hello.jsp 中编写代码:

<%
    System.out.println("hello");
    int i = 3;
%>


通过浏览器访问该资源,查看转换后的 hello_jsp.java 源代码,不难发现 i 变量被定义在 _jspService() 方法中,如图:

1.10.png

第二步:在 hello.jsp 中编写代码:

<%="hello"%>
<%=i%>


通过浏览器访问该资源,查看转换后的 hello_jsp.java 源代码,不难发现 i 变量成为了 out.print() 方法的参数,并且这两个数据被发送到了浏览器展示给用户,如图:

1.11.png

第三步:在 hello.jsp 中编写代码:

<%!
    void  show(){}
  String name = "zhangsan";
%>


通过浏览器访问该资源,查看转换后的 hello_jsp.java 源代码,不难发现该部分被放到了类的成员部分,如图:

1.12.png

实战案例


使用 JSP 在浏览器以表格的形式展示学生信息的数据,这里的数据应该使用 MyBatis 在数据库中查找,但是这里只是简单的演示 JSP 的使用,所以我们省略了对数据库的操作,直接将数据封装到 Student 对象中并存放在集合中。

首先我们在 org.chengzi.pojo 包下创建一个实体类 Student 。在 Java 文件目录右击 new / Java class ,创建包和类。如下:

public class Student {
    private int id;
    private String name;
    private String gender;
    private  int scoreEnglish;
    private int scoreMath;
    //省略了getter和setter方法以及重写的Object类的toString方法
}


在项目 webapps 目录下创建 student.jsp,在此文件中写 html 标签和 Java 代码,我们可以先将数据写死,方便展示在浏览器。如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>性別</th>
        <th>英语成绩</th>
        <th>数学成绩</th>
        <th>操作</th>
    </tr>
    <tr align="center">
        <td>1</td>
        <td>张三</td>
        <td>男</td>
        <td>100</td>
        <td>100</td>
        <td><a href="#">修改</a> <a href="#">删除</a></td>
    </tr>
    <tr align="center">
        <td>2</td>
        <td>李四</td>
        <td>男</td>
        <td>100</td>
        <td>100</td>
        <td><a href="#">修改</a> <a href="#">删除</a></td>
    </tr>
    <tr align="center">
        <td>3</td>
        <td>王五</td>
        <td>女</td>
        <td>100</td>
        <td>100</td>
        <td><a href="#">修改</a> <a href="#">删除</a></td>
    </tr>
</table>
</body>
</html>

在浏览器访问该资源,效果如下:

1.13.png

准备需要动态展示到浏览器的数据,这里省略了从数据库查询数据,我们直接将数据封装在 Student 对象中,并将所有对象放在集合中。例如:

<%
    // 查询数据库
    List<Student> brands = new ArrayList<Student>();
    brands.add(new Student(1,小张,女,85,89));
    brands.add(new Student(2,小樊,女,98,87));
    brands.add(new Student(3,小李,男,100,99));
%>


上面我们使用固定的数据发送到浏览器展示,为了动态的展示数据,我们要使用 Java 代码来动态的获取数据,而在 JSP 页面中,Java 代码要写在 JSP 脚本中,如下:

<%@ page import="org.chengzi.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // 查询数据库
    List<Student> students = new ArrayList<Student>();
    students.add(new Student(1, "小张", "男", 80, 85));
    students.add(new Student(2, "小李", "女", 98, 87));
    students.add(new Student(3, "小樊", "女", 98, 100));
%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>性別</th>
        <th>英语成绩</th>
        <th>数学成绩</th>
        <th>操作</th>
    </tr>
    <%
        for (int i = 0; i < students.size(); i++) {
            //获取集合中的 每一个 Brand 对象
            Student student = students.get(i);
    %>
    <tr align="center">
        <td><%=student.getId()%>
        </td>
        <td><%=student.getName()%>
        </td>
        <td><%=student.getGender()%>
        </td>
        <td><%=student.getScoreEnglish()%>
        </td>
        <td><%=student.getScoreMath()%>
        </td>
        <td><a href="#">修改</a> <a href="#">删除</a></td>
    </tr>
    <%
        }
    %>
</table>
</body>
</html>


此时,数据就会被动态的展示到浏览器页面,不难看出,其实 JSP 脚本标签就是在分割 Java 代码,在标签内是 Java 代码,在标签外则是 html 语句,如图:


1.14.png

目录
相关文章
|
2月前
ssm使用全注解实现增删改查案例——showEmp.jsp
ssm使用全注解实现增删改查案例——showEmp.jsp
|
2月前
ssm使用全注解实现增删改查案例——showDept.jsp
ssm使用全注解实现增删改查案例——showDept.jsp
|
2月前
|
JavaScript 前端开发 Java
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
|
2月前
ssm使用全注解实现增删改查案例——updateEmp.jsp
ssm使用全注解实现增删改查案例——updateDept.jsp
|
2月前
ssm使用全注解实现增删改查案例——saveEmp.jsp
ssm使用全注解实现增删改查案例——saveEmp.jsp
|
10天前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
12 0
|
16天前
|
Java 关系型数据库 MySQL
servlet+jsp+jdbc 实现增删改查 的同学录
servlet+jsp+jdbc 实现增删改查 的同学录
|
2月前
使用ueditor实现多图片上传案例——前台数据层(Index.jsp)
使用ueditor实现多图片上传案例——前台数据层(Index.jsp)
|
2月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
107 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
7天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。