Struts Sitemesh应用实例

基于单片机红外线遥控Proteus仿真电路发射接收 *单片机设计介绍,基于单片机红外线遥控Proteus仿真电路发射接收。 阅读详情

一、sitemesh功能简介

Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。
它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。


二、应用实例

以struts-2.3.18.1为例:

1、Eclipse中新建一个Dynamic Web Project,命名为StrutsDemo。

2、将Struts中相关的包放入项目的WebContent\WEB-INF\lib目录(依赖包如下图所示),或者在构建路径中进行相关配置 。


3、在web.xml配置struts和sitemesh过滤器,代码如下所示:

 

  <!-- sitemesh配置 -->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>
             com.opensymphony.module.sitemesh.filter.PageFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  
  <!-- Struts 配置-->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern><!--拦截所有的请求,也可以选择以下两个url匹配规则-->
    <url-pattern>*.action</url-pattern><!--拦截action后缀请求-->
    <url-pattern>*.do</url-pattern><!--拦截do后缀请求-->
  </filter-mapping>

4、配置struts配置文件struts.xml(本项目路径:resource\struts.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />
	<!--
	<constant name="struts.action.extension" value="action" />
	<constant name="struts.action.extension" value="do" />
	 -->
	<constant name="struts.action.extension" value="action,do" /><!-- 同时支持*.do, *.action两种后缀名的请求 -->

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
        <action name="*" class="demo.presentation.action.BaseAction">
        	<result>/{1}.jsp</result>
        </action>
    </package>

    <!--如果有其他配置,可在include节点配置
    <include file="example.xml"/>
    -->
    <!-- Add packages here -->

</struts>

example.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="example" namespace="/example" extends="default">

        <action name="HelloWorld" class="demo.presentation.action.HelloWorldAction">
            <result>/example/HelloWorld.jsp</result>
        </action>

        <action name="Login_*" method="{1}" class="demo.presentation.action.LoginAction">
            <result name="input">/example/Login.jsp</result>
            <result type="redirectAction">Menu</result>
            <result name="success" type="dispatcher">/example/main.jsp</result>
        </action>

        <action name="*Test" method="{1}" class="demo.presentation.action.TestAction">
            <result>/example/{1}Test.jsp</result>
        </action>
        
        <!--以下为找不到对应的action时,调用默认的action,如访问 http://localhost:8080/StrutsDemo/example/Person.action -->
        <action name="*" class="demo.presentation.action.BaseAction">
            <result>/example/{1}.jsp</result>
        </action>
        <!-- Add actions here -->
    </package>
</struts>
BaseAction.java

package demo.presentation.action;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.opensymphony.xwork2.ActionSupport;

public class BaseAction extends ActionSupport {
	private static final long serialVersionUID = 1864699266509075017L;
	
	public static final Log log = LogFactory.getLog(BaseAction.class);
	
}


5、从struts官方软件包struts-2.3.28.1-all.zip中,将struts2-showcase.war包中WEB-INF下的sitemesh.xml解压出来,放至StrutsDemo下的WebContent\WEB-INF文件夹下。

(sitemesh.xml在struts-2.3.28.1-all.zip中路径:struts-2.3.28.1-all.zip\struts-2.3.28.1\apps\struts2-showcase.war\WEB-INF\sitemesh.xml)

在sitemesh.xml中已经指定了装饰器的配置文件路径

	<!-- decorators-file指定了decorators.xml在的位置 -->
    <property name="decorators-file" value="/WEB-INF/decorators.xml"/>

6、建立自己的decorators.xml文件,放入WEB-INF文件夹(也可以修改sitemesh.xml文件中的decorators-file节点的值来另外指定位置)下。以下为一示例

<?xml version="1.0" encoding="utf-8"?>

<!-- decorators结点的defaultdir属性指定了模板文件存放的目录 -->
<decorators defaultdir="/decorators">

    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <!-- excludes结点则指定了哪些路径的请求不使用任何模板  -->
    <excludes>
    	<!--如下, index.jsp、以/login/开头、以/decorators/开头的请求路径不使用模板  -->
        <pattern>/index.jsp*</pattern>

        <pattern>/login/*</pattern>

        <pattern>/decorators/*</pattern>
    </excludes>

    <!-- decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板 --> 
    <decorator name="main" page="main.jsp">
        <pattern>/*</pattern>
    </decorator>
</decorators>
7、建立模板文件main.jsp,存放入项目WebContent\decorators目录下。内容如下所示:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>
        	<decorator:title default="默认HTML页面标题" />
        </title>
        <!-- decorator:head节点中的内容由引用本模板的页面的<head></head>中的内容来替换 -->
        <decorator:head />
    </head>
    <body>
    	<!-- decorator:body节点的内容将由引用本模板的页面的<body></body>中的内容来替换-->
	<decorator:body />
    </body>
</html>


8、新建一个JSP文件,如test.jsp,内容如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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>Test SiteMeshMe</title>
<style type="text/css">
	h1{
		font-family: 微软雅黑;
		font-size:36px;
	}
</style>
</head>
<body>
	<!-- body start -->
	<h1>Test SiteMesh!</h1>
	<!-- body end -->
</body>
</html>


9、右键点击StrutsDemo项目,通过Run As\Run On Server启动web服务器。


10、访问http://localhost:8080/StrutsDemo/test.jsp观察页面的变化情况。页面代码变化如下:



三、深入应用——模板页面嵌套使用

1、在decorators目录下加入panel.jsp文件

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<p>
  <table width=250 border=0 cellpadding=0 cellspacing=0>
    <tr>
      <th class="panelTitle">
        <!-- 导入被装饰页面的title部分 -->
        <decorator:title default="小面板页面"/>
      </th>
    </tr>
    <tr>
      <td class="panelBody">
        <!-- 导入被装饰页面的body部分 -->
        <decorator:body/>
      </td>
    </tr>
  </table>
</p>

2、修改decorators\main.jsp文件

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>
        	<decorator:title default="默认HTML页面标题" />
        </title>
        <!-- decorator:head节点中的内容由引用本模板的页面的<head></head>中的内容来替换 -->
        <decorator:head />
    </head>
    <body>
    	<!-- 页面中嵌套包含使用其他装饰页面 -->
    	<page:applyDecorator page="/decorators/header.jsp" name="panel"/>
    	
        <!-- decorator:body节点的内容将由引用本模板的页面的<body></body>中的内容来替换-->
	<decorator:body />
		
    	<!-- 页面中嵌套包含使用其他装饰页面 -->
    	<page:applyDecorator page="/decorators/footer.jsp" name="panel"/>
    </body>
</html>

3、修改decorators.xml文件

<?xml version="1.0" encoding="utf-8"?>

<!-- decorators结点的defaultdir属性指定了模板文件存放的目录 -->
<decorators defaultdir="/decorators">

    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <!-- excludes结点则指定了哪些路径的请求不使用任何模板  -->
    <excludes>
    	<!--如下, /index.jsp和凡是以/login/开头的请求路径一律不使用模板;  -->
        <pattern>/index.jsp*</pattern>
        <pattern>/login/*</pattern>
        <pattern>/decorators/*</pattern>
    </excludes>
    
    <!-- decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板  -->
    <decorator name="main" page="main.jsp">
        <pattern>/*</pattern>
    </decorator>
    
    <!-- 定义一个装饰器,但该装饰器默认不装饰任何页面 -->
    <decorator name="panel" page="panel.jsp"/>
</decorators>



4、添加decorators\header.jsp文件

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>header file
        </title>
    </head>
    <body id="page-home">
    	<h1>Header</h1>
    	<hr>
    </body>
</html>


5、添加decorators\footer.jsp文件

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>footer file
        </title>
    </head>
    <body id="page-home">
    	<hr>
    	<h1>footer</h1>
    </body>
</html>


6、执行http://localhost:8080/StrutsDemo/test.action(本文struts.xml配置环境下,test.action或者test.jsp都能正确访问到页面/test.jsp)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>
        	Test SiteMeshMe
        </title>
        <!-- decorator:head节点中的内容由引用本模板的页面的<head></head>中的内容来替换 -->
        
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	
	<style type="text/css">
		h1{font-family: 微软雅黑;font-size:36px;}
	</style>

    </head>
    <body>
    	<!-- 页面中嵌套包含使用其他装饰页面 -->
    	

<p>
  <table width=250 border=0 cellpadding=0 cellspacing=0>
    <tr>
      <th class="panelTitle">
        <!-- 导入被装饰页面的title部分 -->
        header file
        
      </th>
    </tr>
    <tr>
      <td class="panelBody">
        <!-- 导入被装饰页面的body部分 -->
        
    	<h1>Header</h1>
    	<hr>
    
      </td>
    </tr>
  </table>
</p>
    	
    	<!-- decorator:body节点的内容将由引用本模板的页面的<body></body>中的内容来替换-->
		
	<!-- body start -->
	<h1>Test SiteMesh!</h1>
	<!-- body end -->

		
    	<!-- 页面中嵌套包含使用其他装饰页面 -->
    	

<p>
  <table width=250 border=0 cellpadding=0 cellspacing=0>
    <tr>
      <th class="panelTitle">
        <!-- 导入被装饰页面的title部分 -->
        footer file
        
      </th>
    </tr>
    <tr>
      <td class="panelBody">
        <!-- 导入被装饰页面的body部分 -->
        
    	<hr>
    	<h1>footer</h1>
    
      </td>
    </tr>
  </table>
</p>
    </body>
</html>



7、最终效果




LLM的MCP协议:初识MCP,搭建第一个MCP Server MCP(Model Context Protocol),是一个开发的协议,标准化了应用程序如何为大模型提供上下文。MCP提供了一个标准的为LLM提供数据、工具的方式,使用MCP会更容易的构建Agent或者是基于LLM的复杂工作流。 阅读详情

相关推荐

Aspose Java 25.10 版本深度破解:基于字节码修改的实战指南

本文提供了Aspose Java 25.10版本基于字节码修改的实战指南。详细介绍了如何通过Javassist工具逆向分析并修改Aspose Cells、Words、Slides及PDF组件的许可证验证逻辑,从而实现绕过限制,并完成最终的打包与功能验证。

stone的博客 1358

struts2之整合sitemesh(简介)

struts2之整合sitemesh(简介)

fhd001的专栏 934

FastAdmin框架Token验证实战:从登录到API调用的完整流程

本文详细解析了在FastAdmin框架中实现Token验证的完整流程,从数据表设计、登录接口签发Token,到核心验证中间件的编写与路由配置,并探讨了在业务API中的调用与安全实践。内容涵盖Token生成策略、有效期管理及安全增强措施,为开发者提供了一套可落地的API身份验证解决方案。

nnn11的博客 917

Struts2整合SiteMesh

1.导入Struts2的jar 和 sitemesh.jar 和 Struts2-sitemesh-plugin.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar javassist-3.1

路虽远行则将至,事虽难做则必成 722

VS2017中调用gdal(C#版)的方法二(含gdal下载地址,配置过程,代码测试,超详细!!)

VS2017中gdal(C#)版的配置与测试 上次记录了直接在VS2017中下载并应用gdal的方法,这次来记录一下网上下载的安装包配置与测试的方法。 一、环境、版本及下载地址 win10,vs2017社区版,gdal2.4.4 还是像之前在Unity中应用gdal一样,最好是下载已经编译好的C#版的gdal,不然自己配置真的很容易出错,我就是这样的,下面提供不同版本的gdal下载地址: 1.GDAL2.4.4(C#版、64位): https://download.csdn.net/download/che

chengbaola的博客 1365

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3391

struts2.3和sitemesh3整合

因为现在网上的没有找到相关的文档,自己整理

salonzhou的专栏 4088

ESXI 7 :创建统信V20_1050d服务器系统虚拟机

记录一下在 X86 架构创建统信V20_1050d 虚拟机遇到的问题。已遇到的问题有①:常规服务器环境下网络连接失败重点:按照桌面版本,有问题处理简单。

guyuelin123的博客 1967

Struts和Sitemesh整合,实现多个装饰器

Struts和Sitemesh整合 web.xml配置 struts-prepare org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter sitemesh com.opensymphony.sitemesh.webapp.SiteMeshFilter struts-execute org.apac

github yx9o Apache RocketMQ & ShardingSphere Committer 2547

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5382

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 343

在Struts2中使用SiteMesh插件

     最近在读《Struts2权威指南》(李刚著),这本书写得非常好,对我学习Struts2帮助很大。在学习这本书的过程中,我自己做了些笔记和例子,下面是关于在Struts2中如何使用SiteMesh插件:    通过使用SiteMesh插件,就可以在Struts2应用中使用SiteMesh装饰器页面来统一应用程序所有页面的显示风格。实际上,在Struts2中使用SiteMesh非常简单,

naubie的专栏 6175

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 388

spring+struts2+dwr 5

[code="java"] ...

let_wind 182

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Struts2 使用SiteMesh做网页布局

简单来讲SiteMesh就是用来做网页母版 Layout分层的。   SiteMesh官方网站给出的最新版本是SiteMesh Version 2.4.1,但是下载不下来!!下载页面NOT FOUND!很囧有木有!无奈只能在findjar.com下载2.4.1的jar包。 或者使用Struts2的sitemesh包2.4.2,这个包是插件struts2-sitemesh-plugi

我的博客 4366

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

struts2之整合sitemesh(sitemesh配置)

struts2之整合sitemesh(sitemesh配置)

fhd001的专栏 2211

谈谈struts2对SiteMesh的扩展,以及龌龊的ActionContextCleanUp命名

        早听所struts2.0对SiteMesh进行了扩展,增加了FreeMarker模板的支持,今晚有空特意去找了一些相关的资料来,希望以后在项目中可以派上用途。总结起来,它做了3个方面的扩展1、可以在SiteMesh模板中使用struts标签,这个是招牌,当然要对其扩展。2、增加了FreeMarker模板,这个是我们所迫切需要的。将com.opensymphony.module.si

品品观 8898

Struts2, Spring MVC, Sitemesh, Tiles 性能比较

(本文出自 http://blog.csdn.net/AlexLynn ,转载时请注明出处)一、概述:Struts2出来之后,有很多人开始尝试使用,很多概念与Struts1已经有了很大变化。关于Struts2与Spring MVC之间的功能差异评述,网络上已经有很多,每个人都有自己的喜好和选择,这里就不再重复。本篇只对Struts2与Spring MVC之间的运行速度做个比较,另外也对

Alex Lin的专栏 5488

在struts2中加入装饰器sitemesh

装饰器可以统一设置页面的版式,统一引入需要使用的JS,CSS等等作用。1. 导入sitemesh-xxx.jar包2. 在web.xml中进行配置    struts-cleanup     org.apache.struts2.dispatcher.ActionContextCleanUp      struts-cleanup  /*       注意ActionCon

tanwen1234的专栏 658

Struts2、Sitemesh、FreeMarker 最新版本整合配置

 由于新版本的Struts2改进了国际化的性能,所以进行了Jar包的升级,同时再升级了Sitemesh和FreeMarker的版本。但是突然发现,原先的整合方案下,FTL文件无法获得request、response、action等Freemarker内置的对象,经过追踪与查找,终于找到了新的整合方案。web.xml 的配置:  struts-prepare org.

阿影的黄金时代 4081

struts2之整合sitemesh(使用sitemesh插件)

struts2之整合sitemesh(使用sitemesh插件)

fhd001的专栏 1423

Sitemesh入门

一、SiteMesh项目简介       OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。        Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大 量页

zh_fn的专栏 633

Struts2、Hibernate3、Spring2、Sitemesh、FreeMarker整合

1.SitemeshSiteMesh是一个网页的外观,布局,导航框架,它能够将网页中的静态内容与动态内容进行分离,使整个网站拥有同一的外观,统一的装饰,并且易于今后更改外观样式设计。2.FreeMarkerFreeMarker 我认为要比老掉牙的Velocity要强大得多,FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写

阿布客栈 6568

在struts2中整合sitemesh

解决了。   总结一下   我的版本是struts2 2.1.8   1、struts2 中使用sitemesh一定要用struts2 的插件 struts2-sitemesh-plugin-****.jar 否则是没有效果的   2、在web.xml中的filter顺序   &lt;filter&gt; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;

pengjj2的博客 92

Struts使用Sitemesh框架

Struts使用Sitemesh框架       一 安装Sitemesh框架     下载最新版本的sitemesh     1 sitemesh-2.3.jar是Sitemesh的支持包 请复制该文件到\demo\WebRoot\WEB-INF\lib目录下     2 sitemesh-decorator.tld sitemesh

flyinglzd2013的专栏 864

sitemesh struts2

一.需要包(两个),我用的是struts-2.1.8.1,注意版本 struts2-sitemesh-plugin-2.1.8.1.jar sitemesh-2.4.2.jar 二.创建decorators.xml Xml代码 <?xmlversion="1.0"encoding="utf-8"?><decoratorsdefaultdir="/deco...

weixin_30325971的博客 108
上一篇: JavaEE 中JSTL EL的应用
下一篇: VC6插件开发应用实例
ltbook
博客等级 码龄24年 30粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值