我有一个数据库,其中包含 blob 和该数据库内受密码保护的 zip,使用我传统上看到的标准文件对象方法
File zipFile = new File("C:\\file.zip");
net.lingala.zip4j.core.ZipFile table = new net.lingala.zip4j.core.ZipFile(zipFile);
if (table.isEncrypted())
table.setPassword(password);
net.lingala.zip4j.model.FileHeader entry = table.getFileHeader("file_inside_the_zip.txt");
return table.getInputStream(entry); //Decrypted inputsteam!
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何在不使用临时文件的情况下实现这样的东西,并且纯粹单独获取 blob 的输入流,到目前为止我有这样的东西
InputStream zipStream = getFileFromDataBase("stuff.zip");
//This point forward I have to save zipStream as a temporary file and use the traditional code above
Run Code Online (Sandbox Code Playgroud) 到目前为止,我可以通过 proguard 保留一些类和方法等,现在混淆工作完美,这是我的问题,我注意到 proguard 碰巧重新打包了一些这样的类com.a.a,com.a.b有没有一种方法可以避免留下类似的提示com.x.x并将所有一个包中的混淆类,例如a.a.**?(我见过的现实生活中的提示示例看起来像org.apache.a.x,任何反编译我的代码的人都会立即跳过该特定包,因为它散发着库 jar 的味道,我想将混淆的库和混淆的原始代码合并到一个包中)。我尝试了这个配置,但它不起作用。
-allowaccessmodification
-mergeinterfacesaggressively
-useuniqueclassmembernames
-keeppackagenames doNotKeepAThing
Run Code Online (Sandbox Code Playgroud) 下面的代码允许我创建一个嵌入式底部servlet服务器,我在设置连接器设置的'max-parameters'时遇到问题,我理解它的方式通常是通过xml文件配置的.
public static String initCustomServer_(Servlet servlet,int preferedPort,String servletName,String[] resourceList,String... domainName){
String contextURL = null;
int curPort = preferedPort==-1?9001:preferedPort;
boolean initServ = false;
System.out.println("====servlet running in local mode====");
while(!initServ) {
try{
io.undertow.servlet.api.DeploymentInfo servletBuilder = io.undertow.servlet.Servlets.deployment()
.setClassLoader(servlet.getClass().getClassLoader())
.setContextPath(domainName.length==0?"/":"/"+domainName[0])
.setDeploymentName("test.war")
.addServlets(
io.undertow.servlet.Servlets.servlet(servletName, servlet.getClass()).addMapping("/"+servletName)
)
.setResourceManager(new io.undertow.server.handlers.resource.FileResourceManager(new File("src/dss_core/HTML5/webapp"), 1));
io.undertow.servlet.api.DeploymentManager manager = io.undertow.servlet.Servlets.defaultContainer().addDeployment(servletBuilder);
manager.deploy();
io.undertow.server.HttpHandler servletHandler = manager.start();
io.undertow.server.handlers.PathHandler path = io.undertow.Handlers.path(io.undertow.Handlers.redirect(domainName.length==0?"/":"/"+domainName[0]))
.addPrefixPath(domainName.length==0?"/":"/"+domainName[0], servletHandler);
io.undertow.Undertow server = io.undertow.Undertow.builder()
.addHttpListener(curPort, "localhost")
.setHandler(path)
.build();
server.start();
initServ = true;
contextURL = "http://localhost:"+curPort+(domainName.length==0?"":"/"+domainName[0])+"/"+servletName;
} catch (Exception ex) { …Run Code Online (Sandbox Code Playgroud) 我有两个jetty嵌入式服务器,localhost:9001/WebApp1和localhost:9002/WebApp2,你可以看到它们在不同的端口上.我希望他们在创建服务器期间共享相同的端口是否可能?(顺便说一下,它们也是两个独立的jar文件).所以我可以做这样的事情而不是localhost:9001/WebApp1和localhost:9001/WebApp2
或者我坚持制作战争文件,然后将它们包含在tomcat/glassfish服务器中
在创建服务器期间我经常看到这个
ContextHandler context = new ContextHandler();
context.setContextPath("/WebApp1");
context.setHandler(new WebApp1());
Server server = new Server(9001);
server.setHandler(context);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
在第二个应用程序,我想有一些看起来像这样的东西
ContextHandler context = new ContextHandler();
context.setContextPath("/WebApp2");
context.setHandler(new WebApp2());
Server server = getExistingServer(9001);
server.addHandler(context);
Run Code Online (Sandbox Code Playgroud)
我看到有这样的方法server.getHandlers(); 返回一个处理程序数组如何向现有列表添加新处理程序,或者在端口9001上运行现有的jetty服务器