小编Bru*_*ine的帖子

用于提供静态内容的Servlet

我在两个不同的容器(Tomcat和Jetty)上部署了一个webapp,但是他们用于提供静态内容的默认servlet有一种不同的方式来处理我想要使用的URL结构(详细信息).

因此,我希望在webapp中包含一个小servlet来提供自己的静态内容(图像,CSS等).servlet应具有以下属性:

这样的servlet可以在某处使用吗?我能找到的最接近的是servlet书中的例子4-10.

更新:我想使用的URL结构 - 万一你想知道 - 只是:

    <servlet-mapping>
            <servlet-name>main</servlet-name>
            <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/static/*</url-pattern>
    </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

所以所有请求都应该传递给主servlet,除非它们是static路径.问题是Tomcat的默认servlet不考虑ServletPath(因此它在主文件夹中查找静态文件),而Jetty则这样(因此它在static文件夹中查找).

java jsp servlets java-ee

143
推荐指数
9
解决办法
16万
查看次数

更智能的Vim恢复?

当之前的Vim会话崩溃时,您会看到"交换文件......已经存在!" 对于在上一个会话中打开的每个文件.

你能让这个Vim恢复提示更聪明吗?(没有关闭恢复!)具体来说,我在考虑:

  • 如果交换版本不包含未保存的更改且编辑过程不再运行,您是否可以让Vim自动删除交换文件?
  • 您是否可以自动执行以新名称保存恢复文件的建议过程,将其与磁盘上的文件合并,然后删除旧的交换文件,以便最小化交互?特别是当交换版本和磁盘版本相同时,一切都应该是自动的.

我发现了SwapExists自动命令,但我不知道它是否可以帮助完成这些任务.

vim recovery

47
推荐指数
3
解决办法
1万
查看次数

Subversion:防止对一个文件的本地修改被提交?

我有一个Subversion工作副本,我对一个文件进行了一些本地修改.修改只与我有关,我不想提交它们.(存储库中的版本包含一些适合其他用户的默认值,但不适合我,这就是我想在本地覆盖它们的原因.)

请注意,虽然我不想提交更改,但我确实希望在我这样做时收到存储库中所做的任何更新svn update.此外,只有在我的工作副本中,我不想将更改提交到该文件,其他用户不应受到影响.所以svn:ignore或者提交钩子不符合我的目的.

目前,我只是这样做:

svn commit file1 file2...
Run Code Online (Sandbox Code Playgroud)

我明确指定了包含我不想提交的特定文件的更改的文件.

然而,在我工作的时候,我养成了简单写作的习惯:

svn commit -m "Log of what I just did"
Run Code Online (Sandbox Code Playgroud)

而且我担心在我不专心的时候,我会无意中使用上面的命令提交"禁止"文件.

简而言之,我正在寻找的只是一种在工作副本中"标记"文件的方法,该方法可以防止Subversion提交该文件中的更改(即使我刚刚得到一个,也不必自动排除当我尝试提交所有文件时出错,很好).有点像标记处于"冲突"状态的文件......

这样的事情存在吗?

更新:akent,谢谢你指出这个非常相似的问题.

svn

36
推荐指数
5
解决办法
2万
查看次数

如何使用HttpURLConnection处理HTTP身份验证?

我正在编写一个Java客户端,该客户端POST到需要身份验证的HTTP服务器.
我必须至少支持以下三种身份验证方法:Basic,Digest或Negotiate.此外,POST可能非常大(超过2MB),因此我需要使用流式传输.正如HttpURLConnection所记录的那样

启用输出流时,无法自动处理身份验证和重定向.如果需要身份验证或重定向,则在读取响应时将抛出HttpRetryException.

所以,我需要自己处理身份验证.我搜索并再次搜索了一种使用已经编码的类的方法 - 但是没有办法......

我可以从这里获取所需的源(因为它们是带有Classpath异常的GPLv2).这是正确的方法吗?

谢谢.

java authentication httpurlconnection

33
推荐指数
1
解决办法
8万
查看次数

发送者和接收者根据请求通过ssh传输文件?

我创建了一个程序,它遍历一堆文件并调用其中一些文件:

scp <file> user@host:<remotefile>
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,可能有数千个需要传输的小文件,并且scp正在为每个文件打开一个新的ssh连接,这有很多开销.

我想知道是否没有解决方案,我保持一个进程运行,维护连接,我可以发送它"请求"复制单个文件.

理想情况下,我正在寻找一些发送器和接收器程序的组合,这样我就可以在开始时启动一个进程(1):

ssh user@host receiverprogram
Run Code Online (Sandbox Code Playgroud)

对于每个文件,我调用一个命令(2):

senderprogram <file> <remotefile>
Run Code Online (Sandbox Code Playgroud)

并将(2)的输出传递给(1)的输入,这将导致文件被传输.最后,我可以发送进程(1)一些信号终止.

优选地,发送器和接收器程序是用于Unix的开源C程序.他们可以使用套接字而不是管道或任何其他创造性解决方案进行通信.

但是,在迭代它时,每个文件都被传输是一个重要的约束:收集文件列表然后调用一个实例scp在结束时一次传输所有文件是不可接受的.此外,我只有简单的shell访问接收主机.

更新:我找到了使用ssh的多路复用功能解决连接开销问题的解决方案,请参阅下面的答案.然而,我正在开始赏金,因为我很想知道是否存在我在这里描述的发送者/接收者程序.似乎应该存在可以使用的东西,例如xmodem/ymodem/zmodem?

unix sysadmin ssh shell file-transfer

10
推荐指数
2
解决办法
4169
查看次数

支持具有全局数据的插件DLL的多个实例

上下文:我将旧版独立引擎转换为组合工具的插件组件.从技术上讲,这意味着我将引擎代码库编译为C DLL,我使用P/Invoke从.NET包装器调用它; 包装器实现由组合工具定义的接口.这非常有效,但现在我收到了为不同项目加载多个引擎实例的请求.由于引擎将项目数据保存在一组全局变量中,并且由于具有引擎代码库的DLL仅加载一次,因此加载多个项目意味着项目数据被覆盖.

我可以看到许多解决方案,但它们都有一些缺点:

  1. 您可以使用相同的代码创建多个DLL,这些代码被Windows视为不同的DLL,因此不会共享其代码.如果你有不同名称的引擎DLL的多个副本,这可能已经有效.但是,使用DllImport属性从包装器调用引擎,我认为在编译包装器时需要知道引擎DLL的名称.显然,如果我必须为每个项目编译不同版本的包装器,这非常麻烦.

  2. 引擎可以作为单独的进程运行.这意味着包装器在加载项目时会为引擎启动一个单独的进程,并且它将使用某种形式的IPC与此进程进行通信.虽然这是一个相对干净的解决方案,但它需要一些努力才能开始工作,我现在不知道哪种IPC技术最适合建立这种结构.通信也可能存在很大的开销:引擎需要经常交换浮点数组.

  3. 该引擎可以适应多个项目.这意味着全局变量应该放入项目结构中,并且对全局变量的每个引用都应该转换为相对于特定项目的相应引用.大约有20-30个全局变量,但是可以想象,这些全局变量是从整个代码库引用的,因此需要以某种自动方式完成此转换.一个相关的问题是你应该能够在所有地方引用"当前"项目结构,但是在每个函数签名中作为额外参数传递它也很麻烦.是否存在一种技术(在C中)来考虑当前的调用堆栈并在那里找到最近的相关数据值的封闭实例?

stackoverflow社区可以就这些(或其他)解决方案提供一些建议吗?

c windows dll pinvoke ipc

6
推荐指数
2
解决办法
2702
查看次数

MSVC函数与const枚举值0匹配

我被MSVC无意识的C++函数匹配所困扰.我可以将它减少到以下测试用例:

#include <iostream>

enum Code { aaa, bbb };

struct MyVal {
    Code c;
    MyVal(Code c): c(c) { }
};

void test(int i, MyVal val) {
    std::cout << "case " << i << ": value " << val.c << std::endl;
}

void test(int i, double* f) {
    std::cout << "case " << i << ": WRONG" << std::endl;
}

const Code v1 = aaa;
      Code v2 = aaa;
const Code v3 = bbb;

int main() {
    const Code w1 = …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

6
推荐指数
1
解决办法
100
查看次数

何时检查C++模板实例化类型?

在编译C++时,gcc和clang似乎推迟了模板实例化的类型检查,直到处理完所有程序声明之后.这种语言有保证吗?

为了详细说明,我可以在定义模板或需要模板实例化的位置保持类型不完整,只要我在程序的后面某处完成类型:

class A;
class B;

extern A* pa;

// 1. template definition
template<typename T>
T* f() { return static_cast<T*>(pa); }

// 2. template instantiation
B* test() { return f<B>(); }

// 3. completing types
class A { };
class B : public A { };
Run Code Online (Sandbox Code Playgroud)

请注意,A和B的定义需要键入检查模板实例化(以使static_cast有效).如果省略步骤3,则不再编译第2步.

在我的标题组织中,我可以依赖任何标准C++编译器接受此顺序吗?

c++ templates

5
推荐指数
1
解决办法
182
查看次数

指针引用初始化的Visual C++语法错误

为什么Visual C++ 2008为以下代码提供语法错误?

int* x;
int*& xalias(x); //error C2061: syntax error : identifier 'x'
Run Code Online (Sandbox Code Playgroud)

这只是一个错误吗?(gcc和clang接受这个...)

Visual Studio的更高版本是否可以修复此问题,或者我应该如下所述解决此问题?

int*& xalias = x;
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

2
推荐指数
1
解决办法
210
查看次数