java 替换war中的文件(class、xml......)

原文替换方法连接:https://blog.csdn.net/dataiyangu/article/details/84283680

这几天因为在改项目中的bug时 由于前面的人改了一个bug没有提交到svn导致我在改另一个问题时,覆盖了原来修复的问题,由于他本地也没保存源码 导致我我的重新排查修改  但是这是一个特定版本  我这里没有这个版本的环境  无法排查 只能光看代码 但最后还是没有解决  最后想了一个办法替换原来war中我修改的那部分的class文件 问题最后解决了  具体操作如下(如何替换来源于这篇博客:https://blog.csdn.net/dataiyangu/article/details/84283680):

1.如果要替换的文件直接在war包的根目录(一级目录)下,直接使用jar uvf命令替换即可

如:替换a.war中b.xml文件

jar uvf a.war b.xml

标题2.如果要替换的文件在war包的二级及以下目录下,则需要以下步骤:

(1)使用jar tvf war名称 | grep 目标文件名 查询出目标文件在war包中的目录【这个是linux中的命令 你自己知道需要替换那个文件,其实不需要这个命令

(2)使用jar xvf war名称 目标文件名(copy上面查出的全路径) 将目标文件及所在war包中的目录解压到当前路径

(3)修改目标文件的内容,或者将要新的目标文件替换掉提取出来的目标文件

(4)使用jar uvf war名称 目标文件名(和步骤(2)中的目标文件名相同) 将新目标文件替换到war包中

举例:替换opp.war包中的opp.class文件【找个干净的文件夹,把你的war放在这个文件夹下】

1、jar -xvf opp.war WEB-INF/classes/opp.class【解压命令】

2、然后将你的文件把这个class文件替换掉【替换文件,如果替换的是class文件需要将opp$1.class,和opp.class 都要替换  而不是只替换oppp.class】

3、jar -uvf opp.war WEB-INF/classes/opp.class【将这个替换的文件归档到opp.war】

这个样就完成了war包文件替换

附:jar的用法:

用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files …
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 ‘/’ (绝对路径) 和 “…” (父目录) 组件
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 ‘m’, ‘f’ 和 ‘e’ 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 ‘mymanifest’ 并
将 foo/ 目录中的所有文件归档到 ‘classes.jar’ 中:
jar cvfm classes.jar mymanifest -C foo/ .

注:jar后面使用选项时,可以带-也可以不带-,作用是一样的。

Java,Servlet是一种服务器端的Java组件,它允许Web应用处理客户端请求并返回响应。为了在网页上显示图像,我们可以创建一个简单的Servlet来读取图片文件,并将其作为HTTP响应发送给浏览器。以下是基本步骤: 1. **创建Servlet**: 首先,在`webapp`目录下的`WEB-INF`目录下创建一个新的`servlet.xml`文件,声明Servlet。例如: ```xml <web-app> <servlet> <servlet-name>ImageServlet</servlet-name> <servlet-class>com.example.ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <url-pattern>/display-image</url-pattern> </ servlet-mapping> </web-app> ``` 2. **编写Servlet类**: 创建名为`ImageServlet.java`的文件,实现`javax.servlet.http.HttpServlet`或其子类: ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ImageServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imageUrl = "path/to/your/image.jpg"; // 替换为实际图片路径 try (InputStream input = new FileInputStream(imageUrl)) { byte[] imageData = IoUtils.toByteArray(input); // 使用工具库如Apache Commons IO读取内容 response.setContentType("image/jpeg"); // 设置响应类型 response.getOutputStream().write(imageData); } } } ``` 3. **部署应用**: 将上述代码打war文件,然后将war文件部署到支持Servlet的Web服务器(如Tomcat、Jetty等)。 4. **访问图像**: 访问URL `http://your-server-url/display-image`,Servlet将处理请求,从指定路径读取图片并返回给浏览器显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值