问题列表 - 第171511页

Tomcat 8中的getServletContext().getRealPath()返回错误的路径

我试图在Tomcat 8下运行一个传统上在WebSphere下运行的Java Web项目.一个servlet进行以下调用:

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl");
Run Code Online (Sandbox Code Playgroud)

config是ServletConfig的一个实例.

xsl位于项目内部并部署为C:\ myproject\build\web\xsl.当servlet尝试引用位​​于xslFilePath中的文件时,我得到一个异常,指示Tomcat实际上在C:\ Program Files\Apache Software Foundation\Apache Tomcat 8.0.3\bin \null中查找xsl文件.显然这是错误的位置,没有找到任何东西.

不幸的是我无法更改代码,因为我无法访问源代码.所以我想知道这是否是Tomcat的预期行为?是否有任何Tomcat配置可以确保路径被引用到部署目录而不是Tomcat bin目录?选择其他servlet容器会更好吗?任何意见,将不胜感激.

java tomcat servlets servletconfig

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

构造函数中的自引用是否算作"转义"?

阅读有关JSR-133的这篇文章,它说:

所有对最终字段的写入(以及通过这些最终字段间接到达的变量)都会变为"冻结",......

如果在构造期间不允许对象的引用转义,那么一旦构造函数完成并且线程发布对对象的引用,该对象的最终字段将保证可见...

初始化安全性的一个警告是,对象的引用不得"转义"其构造函数 - 构造函数不应直接或间接地发布对正在构造的对象的引用.

我的问题是关于什么被认为是逃避.更具体地说,我想知道这个(有点人为和​​奇怪的)代码是否会产生一个安全可发布的Child对象:

class Parent {
    /** NOT final. */
    private int answer;

    public int getAnswer() {
        return answer;
    }

    public void setAnswer(final int _answer) {
        answer = _answer;
    }
}

public class Child extends Parent {
    private final Object self;

    public Child() {
        super.setAnswer(42);
        self = this;
    }

    @Override
    public void setAnswer(final int _answer) {
        throw new UnsupportedOperationException();
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 首先,虽然Parent显然是可变的,但Child是"有效不可变的",因为允许可变性的父设置器不再可用.
  2. 构造函数中对"this"的引用对任何人都不可见(不是getter,也不会传递给任何其他对象).那么,这算是"逃避"吗?
  3. 但是整个对象被最终字段(自我)引用,因此理论上,它的整个内容应该被"冻结".OTOH,最终的领域本身是无法到达的,所以也许它不算数; 我完全可以想象JIT只是完全优化它.
  4. 如果通过getter可以访问"self",但是在构造函数中没有调用getter,那么它是否算作转义(假设之前没有)?这会阻止JIT优化它,所以它必须"计数",也许?

那么,儿童是"安全可发布的",如果没有,为什么,并且"自我"的吸气者会改变答案吗?

如果问题的目的不明确,我认为如果这有效,它将允许人们轻松地将一个可变类"安全地发布",只需如上所示扩展它.

java constructor

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

如何将4.0引用程序集添加到构建服务器(以便编译器找到它们)?

当您在没有安装Visual Studio 2010的计算机上安装Visual Studio 2012时(我认为),会出现此问题.我想在Visual Studio 2012上构建目标.net 4.0.我已经在没有VisualStudo 2010的情况下设置了机器.我最终得到的信息如下:

 *Warning   2   The primary reference "blablaLibraryproject" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".    blablaExecutableproject*
Run Code Online (Sandbox Code Playgroud)

这里的回答帖子(安装了.NET 4.5的构建服务器能否成功将面向4.0的项目部署到仅安装了.NET 4.0的服务器?)说:

您可以更正此问题,但是您需要将4.0引用程序集添加到构建服务器(以便编译器找到它们),而不仅仅依赖于.NET 4.5版本.

那么你如何" 将4.0引用程序集添加到构建服务器(以便编译器找到它们) "?

c# .net-4.0 visual-studio-2012

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

根据键列表将一个 dict 的一部分复制到一个新的 dict

样本:

d = {
    "test": 1,
    "sample": 2,
    "example": 3,
    "product": 4,
    "software": 5,
    "demo": 6,
}

filter_keys = ["test","sample","example","demo"]
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的字典,它只包含第一个字典中键出现在列表中的那些项目。换句话说,我想要:

d2 = {
    "test": 1,
    "sample": 2,
    "example": 3,
    "demo": 6,
}
Run Code Online (Sandbox Code Playgroud)

我可以用一个循环来做到这一点:

d2 = {}
for k in d.keys():
    if (k in filter_keys): 
        d2[k] = d[k]
Run Code Online (Sandbox Code Playgroud)

但这似乎非常“非 Pythonic”。我还猜测,如果您有一个巨大的 dict,比如说 5,000 个左右的项目,与更直接的方式相比,向新 dict 不断添加新项目会很慢。

此外,您还希望能够处理错误。如果列表包含不是字典中的键的内容,则应该忽略它。或者它可能被添加到新的字典中,但值为 None。

有没有更好的方法来实现这一点?

python dictionary

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

SSL证书存储在哪里?

我理解SSL的工作原理,但我的问题更多的是关于客户端的证书存储.要了解确切的上下文,您可以假设我在编写自己的浏览器.我的渲染部分将由WebKit完成,http请求处理部分将由libCurl完成.libCurl有一个名为CURLOPT_CAPATH的选项,使用它可以将一个文件夹位置告诉libCurl,这就是libCurl可能引用的可能是受信任的证书颁发机构.但我不知道那个位置是什么?它是特定于操作系统的,我的浏览器类应用程序假设可以处理多个平台.

  1. OSx和Windows保留证书的地方?
  2. 它是一个统一的目录吗?或者它在多个地方分裂?
  3. Windows将它们保存在注册表中而不是目录中?
  4. 同一操作系统上的多个浏览器使用相同的证书存储区,或者它们都有自己的证书存储区?

  5. 我需要担心nss吗?

windows ssl ssl-certificate

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

重命名 Python 源文件中的变量和方法名称

我正在尝试编写一个 Python 程序,该程序基本上将原始 Python 源文件作为输入,并将所有变量名称更改为 V,将所有方法或函数名称更改为 F,并保留其他所有内容不变。所以我正在努力实现这一目标:

输入:

def gcd(x, y):
    """Sample docstring."""
    if x == y:
        return x
    if x > y:
        if y == 0: return x
        return gcd(x-y, y)
    if y > x:
        if x == 0: return y
        # Sample comment.
        return gcd(x, y-x)
Run Code Online (Sandbox Code Playgroud)

输出:

def F(V, V):
    """Sample docstring."""
    if V == V:
        return V
    if V > V:
        if V == 0: return V
        return F(V-V, V)
    if V > V:
        if V == …
Run Code Online (Sandbox Code Playgroud)

python regex python-3.x

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

Git 合并删除文件

这是第二次发生这种情况,当我进行合并时,我后来意识到正在合并的分支中的一些文件不再位于正在合并的分支中。

最新的例子是我们有一个功能分支,我一直在合并主开发分支中的更改,合并后我们丢失了很多文件,并且它们现在不存在于功能分支中。

  1. 为什么会出现这种情况?
  2. 获取这些文件的最佳方式是什么?我正在考虑手动添加它们。

以下是文件丢失时存储库的描述:

964495c是文件丢失的地方,它是远程分支与本地分支的合并。d1c457a 是从主开发分支到功能分支的合并。

当我对这两个分支进行比较时,我看到丢失的文件已被删除,但它们从未设置为删除。这不是我的合并,所以我不确定这是否是用户错误,但我需要找出将这些文件包含在我的功能分支中的最佳方法......

在此输入图像描述

git version-control merge github

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

无论如何,Gunicorn工人都会超时

我正试图通过gunicorn运行一个简单的烧瓶应用程序,但无论我做什么,让我的工人超时.无论是否有针对应用程序的活动,工作人员总是会在我设置timeout值之后超时.是什么导致他们超时?当我制作请求时,请求会成功完成,但工作人员仍会超时.这是我正在运行的:

gunicorn test_app.py -b 127.0.0.1:8000 --log-level=debug --log-file /tmp/log
 * Running on http://127.0.0.1:5000/
127.0.0.1 - - [28/Aug/2014 11:23:50] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [28/Aug/2014 11:23:53] "GET / HTTP/1.1" 200 -
 * Running on http://127.0.0.1:5000/
 * Running on http://127.0.0.1:5000/
Run Code Online (Sandbox Code Playgroud)

这是我在/ tmp/log中看到的内容:

[2014-08-28 11:23:32 -0700] [36868] [INFO] Listening at: http://127.0.0.1:8000 (36868)
[2014-08-28 11:23:32 -0700] [36868] [INFO] Using worker: sync
[2014-08-28 11:23:32 -0700] [36871] [INFO] Booting worker with pid: 36871
[2014-08-28 11:23:32 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:02 …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 gunicorn

9
推荐指数
2
解决办法
4936
查看次数

C++中排列、组合和PowerSet的实现

我正在寻找使用 C+++ 的 Permutation、Combination 和 PowerSet 的实现

c++ combinations permutation powerset c++11

-4
推荐指数
1
解决办法
2578
查看次数

Make:如何替换make变量中的字符?

我有一个这样的变量:

export ITEM={countryname}
Run Code Online (Sandbox Code Playgroud)

这可以是:

   "Albania", 
   "United States"   // with space
   "Fs. Artic Land"  // dot
   "Korea (Rep. Of)" // braket
   "Cote d'Ivoir"    // '
Run Code Online (Sandbox Code Playgroud)

这个变量$(ITEM)被传递给其他命令,有些需要的是它(很好,我将使用$(ITEM)),有些必须有字符替换,例如,与mkdir -p ../folder/{countryname}

   "Albania"          // => Albania
   "United States"    // => United_States
   "Fs. Artic Land"   // => Fs\._Artic_Land
   "Korea (Rep. Of)"  // => Korea_\(Rep\._Of\)
   "Cote d'Ivoire"    // => Cote_d\'Ivoire 
Run Code Online (Sandbox Code Playgroud)

所以我需要一个新的 make 变量,例如

export ITEM={countryname}
export escaped_ITEM=$(ITEM).processed_to_be_fine
Run Code Online (Sandbox Code Playgroud)

我应该如何在我的 makefile 中进行此字符替换?(为了让事情简单,不必执行外部脚本)。我正在考虑使用一些嵌入tr或其他东西。

注意:在 Ubuntu 上工作。

makefile

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