0
点赞
收藏
分享

微信扫一扫

JSP基础②


文章目录

  • ​​JSP脚本​​
  • ​​JSP脚本分类​​
  • ​​JSP的缺点​​
  • ​​EL表达式​​
  • ​​概述​​
  • ​​代码演示​​
  • ​​域对象​​

JSP脚本

JSP脚本用于在 JSP页面内定义 Java代码。

JSP脚本分类

JSP 脚本有如下三个分类:

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

代码演示:

在 ​​hello.jsp​​ 中书写

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

通过浏览器访问 ​​hello.jsp​​​ 后,查看转换的 ​​hello_jsp.java​​​ 文件,i 变量定义在了 ​​_jspService()​​ 方法中

JSP基础②_获取数据

在 ​​hello.jsp​​ 中书写

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

通过浏览器访问 ​​hello.jsp​​​ 后,查看转换的 ​​hello_jsp.java​​​ 文件,该脚本的内容被放在了 ​​out.print()​​ 中,作为参数

JSP基础②_开发语言_02

在 ​​hello.jsp​​ 中书写

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

通过浏览器访问 ​​hello.jsp​​​ 后,查看转换的 ​​hello_jsp.java​​ 文件,该脚本的内容被放在了成员位置

JSP基础②_html_03


我们可以用一个案例来更好地理解他们:

使用JSP脚本来做成下面的表格:

JSP基础②_开发语言_04


这里的数据库信息我们直接给出,用Brand类导入。

<%@ page import="com.itheima.pojo.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
// 查询数据库
List<Brand> brands = new ArrayList<Brand>();
brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));

%>


<!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>
<th>操作</th>
</tr>
<%
for (int i = 0; i < brands.size(); i++) {
Brand brand = brands.get(i);
%>

<tr align="center">
<td><%=brand.getId()%></td>
<td><%=brand.getBrandName()%></td>
<td><%=brand.getCompanyName()%></td>
<td><%=brand.getOrdered()%></td>
<td><%=brand.getDescription()%></td>
<td><%=brand.getStatus() == 1 ? "启用":"禁用"%></td>
<td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>

<%
}
%>
</table>
</body>
</html>

注意:java代码与html代码是严格分开的,我们可以使用即时的切断机制实现这个条件。

JSP的缺点

通过上面的案例,我们可以看到 JSP 的很多缺点。

由于 JSP页面内,既可以定义 HTML 标签,又可以定义 Java代码,造成了以下问题:

  • 书写麻烦:特别是复杂的页面
    既要写 HTML 标签,还要写 Java 代码
  • 阅读麻烦
    上面案例的代码,相信你后期再看这段代码时还需要花费很长的时间去梳理
  • 复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE…
  • 占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
  • 调试困难:出错后,需要找到自动生成的.java文件进行调试
  • 不利于团队协作:前端人员不会 Java,后端人员不精 HTML
    如果页面布局发生变化,前端工程师对静态页面进行修改,然后再交给后端工程师,由后端工程师再将该页面改为 JSP 页面

由于上述的问题, JSP 已逐渐退出历史舞台,以后开发更多的是使用 HTML + Ajax 来替代。下来对技术的发展进行简单的说明

JSP基础②_获取数据_05

  1. 第一阶段:使用​​servlet​​ 即实现逻辑代码编写,也对页面进行拼接。这种模式我们之前也接触过
  2. 第二阶段:随着技术的发展,出现了​​JSP​​ ,人们发现 ​​JSP​​ 使用起来比 ​​Servlet​​ 方便很多,但是还是要在 ​​JSP​​ 中嵌套 ​​Java​​ 代码,也不利于后期的维护
  3. 第三阶段:使用​​Servlet​​ 进行逻辑代码开发,而使用 ​​JSP​​ 进行数据展示
  4. JSP基础②_html_06

  5. 第四阶段:使用​​servlet​​ 进行后端逻辑代码开发,而使用 ​​HTML​​ 进行数据展示。而这里面就存在问题,​​HTML​​ 是静态页面,怎么进行动态数据展示呢?这就是 ​​ajax​​ 的作用了。

EL表达式

概述

​EL(全称Expression Language )表达式语言​​,用于简化 JSP 页面内的 Java 代码。

EL 表达式的主要作用是 获取数据。其实就是从域对象中获取数据,然后将数据展示在页面上。

而 EL 表达式的语法也比较简单,${expression} 。例如:${brands} 就是获取域中存储的 key 为 brands 的数据

代码演示

  • 定义servlet,在 servlet 中封装一些数据并存储到 request 域对象中并转发到​​el-demo.jsp​​ 页面。

@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 准备数据
List<Brand> brands = new ArrayList<Brand>();
brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));

//2. 存储到request域中
request.setAttribute("brands",brands);

//3. 转发到 el-demo.jsp
request.getRequestDispatcher("/el-demo.jsp").forward(request,response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}

注意: 此处需要用转发,因为转发才可以使用 request 对象作为域对象进行数据共享

  • 在​​el-demo.jsp​​ 中通过 EL表达式 获取数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${brands}
</body>
</html>

  • 在浏览器的地址栏输入​​http://localhost:8080/jsp-demo/demo1​​ ,页面效果如下:
  • JSP基础②_html_07

域对象

JavaWeb中有四大域对象,分别是:

  • page:当前页面有效
  • request:当前请求有效
  • session:当前会话有效
  • application:当前应用有效

el 表达式获取数据,会依次从这4个域中寻找,直到找到为止。而这四个域对象的作用范围如下图所示

JSP基础②_获取数据_08

例如: ${brands},el 表达式获取数据,会先从page域对象中获取数据,如果没有再到 requet 域对象中获取数据,如果再没有再到 session 域对象中获取,如果还没有才会到 application 中获取数据。


举报

相关推荐

0 条评论