JSP基础②

网友投稿 241 2022-09-16

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()​​ 方法中

在 ​​hello.jsp​​ 中书写

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

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

在 ​​hello.jsp​​ 中书写

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

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

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

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

这里的数据库信息我们直接给出,用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 brands = new ArrayList(); brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1)); brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0)); brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));%> Title


<% for (int i = 0; i < brands.size(); i++) { Brand brand = brands.get(i); %> <% } %>
序号 品牌名称 企业名称 排序 品牌介绍 状态 操作
<%=brand.getId()%> <%=brand.getBrandName()%> <%=brand.getCompanyName()%> <%=brand.getOrdered()%> <%=brand.getDescription()%> <%=brand.getStatus() == 1 ? "启用":"禁用"%> 修改 删除

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

JSP的缺点

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

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

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

由于上述的问题, JSP 已逐渐退出历史舞台,以后开发更多的是使用 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 brands = new ArrayList(); 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" %> Title ${brands}

域对象

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JSP基础①
下一篇:北京2022年冬奥会代表团团长会开幕,蔡奇巴赫致辞!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~