Jsp应用

简介: Jsp应用


一、foreach标签应用

1.1 tag类

package com.xqx.tag;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
 * @author W许潜行
 *
 */
public class ForeachTag extends BodyTagSupport{
  //封装数据源,遍历数据
  private List<Object> items = new ArrayList<>();
  //封装对象指针:指向数据源中的对象
  private String var;
  public ForeachTag() {
    // TODO Auto-generated constructor stub
  }
  public List<Object> getItems() {
    return items;
  }
  public void setItems(List<Object> items) {
    this.items = items;
  }
  public String getVar() {
    return var;
  }
  public void setVar(String var) {
    this.var = var;
  }
  @Override
  public int doAfterBody() throws JspException {
    //获取迭代器
    Iterator<Object> it = (Iterator<Object>) pageContext.getAttribute("it");
    if(it.hasNext()) {
      //得到第一个迭代器对象保存到对象指针中
      pageContext.setAttribute(var, it.next());
      //保存迭代后的迭代器对象
      pageContext.setAttribute("it", it);
      return EVAL_BODY_AGAIN;
    }
    return SKIP_BODY;
  }
  @Override
  public int doStartTag() throws JspException {
    if(items==null||items.size()==0)
      return SKIP_BODY;
    //得到第一个迭代器对象
    Iterator<Object> it = items.iterator();
    //得到第一个迭代器对象保存到对象指针中
    pageContext.setAttribute(var, it.next());
    //保存迭代后的迭代器对象
    pageContext.setAttribute("it", it);
    return EVAL_BODY_INCLUDE;
  }
}

这个标签有三个属性:

“items”:需要遍历的集合对象。

“var”:迭代器指针指向的集合元素赋值变量名。

“body”:标签定义的标签体,其中可放置要循环执行的 JSP 代码块。

在 doStartTag() 方法中,首先判断集合对象是否为空,如果是则返回SKIP_BODY值,表示跳过标签体。如果非空,则获取迭代器对象,并将第一个迭代器对象赋值给对象指针,并将迭代器保存到 JSP 页面的 Attribute中,使其能够在后续方法中再次访问。

在 doAfterBody() 方法中,我们通过获取 Attribute中保存的迭代器对象,反复判断是否还有下一个元素。如果有,则将下一个元素赋值给对象指针,并将迭代器保存到 JSP 页面的 Attribute

中,以便在下一次迭代中使用。如果没有了,则返回 SKIP_BODY 值,表示跳过标签体。

1.2 tid

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
  <description>JSTL 1.1 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>http://jsp.xqx.cn</uri>
  <tag>
    <name>foreach</name>
    <tag-class>com.xqx.tag.ForeachTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>items</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <name>var</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <name>Goods</name>
    <tag-class>com.xqx.tag.GoodsTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>var</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
  <tag>
    <name>select</name>
    <tag-class>com.xqx.tag.SelectTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>items</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <name>optionVal</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
        <name>optionText</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
</taglib>

在这个标签库描述文件中,定义了对应标签的名称、实现类和属性。其中, 元素用于定义标签属性,包括名称、是否必需、是否支持表达式等。 元素用于指定标签体中可放置的内容类型。

1.3 jsp

<%@page import="com.xqx.tag.Goods"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri = "http://jsp.xqx.cn" prefix = "x" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%   
  List<Goods> list = new ArrayList();
  list.add(new Goods(1,"汽车"));
  list.add(new Goods(2,"飞机"));
  list.add(new Goods(3,"轮船"));
  request.setAttribute("list", list);
%>
<p>这是c标签的foreach
<c:forEach items = "${list }" var = "l">
    ${l.id }:${l.type } <hr/>
</c:forEach>
<h1>这是自定义标签的foreach</h1>
<x:foreach items="${list }" var="l">
    ${l.id }:${l.type } <hr/>
</x:foreach>
<x:Goods var="goods">
</x:Goods>
交通商品1:${goods }
</body>
</html>

首先在 JSP 页面中定义了一个商品列表集合对象,然后将其保存到请求属性中。

之后使用了两个循环遍历集合对象并将其中的元素逐个显示出来

其中一个是使用 JSTL 标签库中的 <c:forEach>

标签,另一个则是使用自定义标签库中的 <x:foreach> 标签。

二、数据标签

2.1tag类

package com.xqx.tag;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
 * @author W许潜行
 *
 */
public class GoodsTag extends BodyTagSupport{
  //封装一个保存数据的变量
  private String var;
  public String getVar() {
    return var;
  }
  public void setVar(String var) {
    this.var = var;
  }
  @Override
  public int doStartTag() throws JspException {
    //模拟数据库传来的数据
    List<Goods> list = new ArrayList<>();
    list.add(new Goods(1,"汽车"));
    list.add(new Goods(2,"飞机"));
    list.add(new Goods(3,"轮船"));
    //将数据保存到封装的变量中
    pageContext.setAttribute(var, list);
    return SKIP_BODY;
  }
}

定义了一个变量var,用于保存商品列表,并提供了对该变量的getter和setter方法。

在doStartTag方法中,模拟了一个数据库返回商品列表的场景,并将该列表保存在了封装变量var中。在JSP页面中,通过调用该标签即可获取到商品列表,方便进行商品展示。

2.2jsp页面的调用

<x:Goods var="goods">
</x:Goods>
交通商品1:${goods }
</body>
</html>

其他页面也可以调用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri = "http://jsp.xqx.cn" prefix = "x" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<x:Goods var="goods">
</x:Goods>
交通商品2:${goods }
</body>
</html>
目录
相关文章
|
前端开发 JavaScript Java
JSP应用实践总结
JSP应用实践总结
77 0
|
6月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
137 10
|
6月前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
89 7
|
6月前
|
前端开发 小程序 Java
深入解析Java Servlet与JSP:构建高效服务器端应用
【6月更文挑战第23天】Java Servlet和JSP是Web开发的关键技术,用于构建高效服务器端应用。Servlet处理HTTP请求,执行业务逻辑,而JSP专注于动态HTML生成。两者结合,借助MVC架构,实现逻辑与视图分离,提高代码可读性和性能。尽管有新框架出现,Servlet和JSP仍是许多项目的基础。
130 7
|
7月前
|
前端开发 Java 数据库
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
|
7月前
|
SQL 前端开发 Java
JSP技术详解及其在Web开发中的应用
【1月更文挑战第2天】本文将对JSP(Java Server Pages)技术进行详细的介绍和分析。JSP是一种基于Java的服务器端编程技术,它允许开发者在HTML或XML等文档中直接嵌入Java代码片段,从而动态地生成Web页面内容。本文将首先阐述JSP的基本原理和工作机制,然后讨论其在Web开发中的各种应用场景,包括表单处理、数据库访问、会话管理等,并通过实例代码展示JSP的实际应用。最后,本文将对JSP的优缺点进行评述,并对未来的发展趋势进行展望。
770 10
|
Java 数据安全/隐私保护
Shiro - JSP页面标签应用
Shiro - JSP页面标签应用
52 0
|
Java 物联网 Shell
Jsp Webshell在物联网的应用
Jsp Webshell在物联网的应用
|
Java 应用服务中间件 程序员
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
1371 0
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
|
Java 应用服务中间件 数据库连接
JSP的基础使用及应用案例
JSP的基础使用及应用案例
153 0