小编mch*_*erm的帖子

如何在JavaScript中将浮点数转换为整数?

我想在JavaScript中将float转换为整数.实际上,我想知道如何同时执行标准转换:截断和舍入.并且有效,而不是通过转换为字符串和解析.

javascript syntax

1043
推荐指数
14
解决办法
94万
查看次数

如何在Java中将字符串转换为UTF8字节数组

在Java中,我有一个String,我想将其编码为字节数组(UTF8或其他编码).或者,我有一个字节数组(在一些已知的编码中),我想将其转换为Java字符串.我该如何进行这些转换?

java string encoding character-encoding

225
推荐指数
7
解决办法
62万
查看次数

如何在Java中识别不可变对象

在我的代码中,我正在创建一个对象集合,这些对象将以各种线程的方式访问,只有在对象是不可变的情况下才是安全的.当尝试将新对象插入到我的集合中时,我想测试它是否是不可变的(如果没有,我会抛出异常).

我能做的一件事就是检查一些众所周知的不可变类型:

private static final Set<Class> knownImmutables = new HashSet<Class>(Arrays.asList(
        String.class, Byte.class, Short.class, Integer.class, Long.class,
        Float.class, Double.class, Boolean.class, BigInteger.class, BigDecimal.class
));

...

public static boolean isImmutable(Object o) {
    return knownImmutables.contains(o.getClass());
}
Run Code Online (Sandbox Code Playgroud)

这实际上让我90%的方式,但有时我的用户会想要创建自己的简单不可变类型:

public class ImmutableRectangle {
    private final int width;
    private final int height;
    public ImmutableRectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    public int getWidth() { return width; }
    public int getHeight() { return height; }
}
Run Code Online (Sandbox Code Playgroud)

是否有某种方式(可能使用反射)我可以可靠地检测一个类是否是不可变的?假阳性(认为它不是不可变的)是不可接受的,但是假阴性(认为它是可变的,当它不是)时.

编辑补充:感谢有见地和有帮助的答案.正如一些答案所指出的那样,我忽略了我的安全目标.这里的威胁是无能为力的开发人员 - 这是一个框架代码,将被大量知道线程无关的人使用,不会阅读文档.我不需要为恶意开发者辩护 - 任何聪明到足以变异字符串 …

java functional-programming immutability

41
推荐指数
4
解决办法
2万
查看次数

如何让Jetty动态加载"静态"页面

我正在构建Java Web应用程序,我讨厌传统的"代码 - 编译 - 部署 - 测试"循环.我想键入一个微小的更改,然后立即查看结果,而无需编译和部署.

幸运的是,Jetty非常适合这一点.它是一个纯java的Web服务器.它附带了一个非常好的maven插件,可以直接从构建树中启动Jetty读取 - 无需打包war文件或部署.它甚至还有一个scanInterval设置:将其设置为非零值,它将监视您的java文件和各种配置文件以进行更改,并在您进行更改后自动重新部署几秒钟.

只有一件事让我远离天堂.我的src/main/webapp目录中有javascript和css文件,这些文件只能由Jetty提供.我希望能够编辑这些并在浏览器中刷新页面时显示更改.不幸的是,Jetty将这些文件保持打开状态,因此我无法(在Windows上)在运行时修改它们.

有谁知道如何让Jetty放开这些文件,以便我可以编辑它们,然后为后续请求提供编辑后的文件?

java spring jetty

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

1024x768屏幕上的典型视口大小是多少?

我正在设计一个Web应用程序,我希望知道我可以设计的最大尺寸(x和y).

截至2008年1月,大约一半的用户使用1024x278屏幕,可能只有不到10%的用户使用较小的屏幕.(手机和掌上电脑用户都是例外.)因此我们设计的最小屏幕尺寸为1024x768.

然而,这是屏幕尺寸,当我们布置我们的内容时,我们需要知道视口大小.有证据表明,大多数用户都将浏览器最大化,但仍需要减去操作系统装饰和浏览器镶边的空间.人们定制他们的铬,所以没有单一的"正确"答案; 我想要一个能够容纳大多数用户的合理范围.

我看到很多设计师说他们使用的宽度为960像素,因为它有很多因素可以均匀划分 - 但在决定之前我想知道我可以逃脱的最大尺寸,然后我可能会选择少用一些.我已经看到引用的最大宽度为960,974甚至990 ......我自己的实验似乎显示宽度为1000的工作正常.

高度更难以得到:我发现我可以在我尝试过的浏览器上使用595像素的垂直视口高度,具有典型的默认操作系统和镶边设置.但我没有尝试过很多,我宁愿看到一个更权威的来源.肯定有人做过这项研究并且做得比我好.

所以我真正的问题是:我可以设计的最大视口大小是什么,并期望它适合所有用户的80-90%没有滚动条?

html browser cross-browser

25
推荐指数
4
解决办法
7万
查看次数

网站可以捕获哪些识别信息?

如果网站的所有者想要尽可能地跟踪他们的用户,他们可以捕获什么(以及如何).您可能想知道这一点,以便捕获您创建的站点上的信息,或者作为用户,以防止站点捕获您的数据.

这是一个起始列表,但我确定我错过了一些重要的内容:

  1. 推荐人(什么网页有你到达的链接到这里).这是一个HTTP标头.
  2. 您正在浏览的计算机的IP地址.这可用于HTTP标头.
  3. 用户代理(您正在使用的浏览器).这是一个HTTP标头.
  4. Cookie放在之前的访问中.这是一个标题,仅在较早放置cookie且用户未删除时才可用.
  5. Flash Cookie放置在之前的访问中.有些用户会关闭Cookie,但很少有人知道如何关闭Flash Cookie.像普通的cookie一样工作,虽然它取决于Flash.
  6. Web错误.在第三方提供的页面上放置一些小的(如透明的单像素GIF).某些第三方(例如DoubleClick)将拥有自己的Cookie,并且可以与用户进行的其他访问相关联(收费!).

这些是我想到的常见问题,但必须有很多不寻常的问题.例如,这个:

  1. 用户时钟的时间.使用JavaScript传输它.

...在这里阅读之前我从未听说过的.


稍后添加(阅读本文后):

请尝试每个答案只放一个项目,然后我们可以使用投票来整理更好/更有趣的.以下列表可能效果不佳.

好吧......下一次我问这样的问题我会更好地设置它.


以下是我得到的一些最佳答案:

  1. James指出IE传输.NET框架版本.
  2. AviewAnew指出,您可以找到您访问过的网站.
  3. Mecki指出可以确定屏幕分辨率.
  4. Mecki 指出,您可以通过创建隐藏字段,然后使用JavaScript读取,确定浏览器缓存的任何自动填充信息.
  5. jjrv指出Flash可以列出用户机器上的字体.
  6. 肯特指出,你可以找到一个人访问过的网站.
  7. Silver Dragon指出,您可以使用Flash和AJAX确定鼠标在浏览窗口中的位置.
  8. Jim指出,您可以通过HTTP标头告诉用户在浏览器中配置了哪种语言.
  9. Jim还提到您可以检测人们是否使用Greasemonkey或类似的东西来修改页面.

browser security

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

需要一个通过属性配置log4j RollingFileAppender的工作示例

我使用log4j进行日志记录,使用属性文件进行配置.目前,我的日志文件太大(3.5 GB对于日志文件来说太大).所以我认为我需要使用RollingFileAppender - 但是当我这样做时,日志文件继续变得过大.我相信我错误配置了它; 有没有人有一个配置RollingFileAppender 的工作示例?

为了记录,我当前的配置如下所示:

log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.MAIN_LOG.layout=com.mycompany.util.log.Log4JSimpleLayout
log4j.appender.MAIN_LOG.DatePattern='.'yyyy-MM-dd
log4j.appender.MAIN_LOG.MaxFileSize=10MB
log4j.appender.MAIN_LOG.MaxBackupIndex=99
log4j.appender.MAIN_LOG.append=true
log4j.rootCategory=ALL, MAIN_LOG
Run Code Online (Sandbox Code Playgroud)

RollingFileAppender的替代方案也是一个很好的解决方案.

log4j rollingfileappender

12
推荐指数
2
解决办法
7万
查看次数

在JDBC中,何时使用时间,日期和时间戳

JDBC为时间相关字段提供了3种不同的数据类型:"Date","Time"和"Timestamp".有人可以提供每个用途的简单摘要以及如何选择用于给定问题的内容吗?

java database types jdbc

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

跟踪版本控制中的Excel文件

我们正在拓展开发团队之外,并试图让我公司内的其他团队对需要更改跟踪的重要文档使用版本控制.一个常见的需求是Excel电子表格.这些是大型电子表格,经常修改(每周或每月),但每次只更改一小部分单元格.

只是将文件粘贴在subversion(我们正在使用的特定工具)中,会提供更改历史记录并保留旧版本.与TortoiseSVN的客户很容易让非技术用户.TortoiseSVN的最新版本甚至包含一个脚本,可用于在Excel文档之间执行良好的视觉差异.

我仍然担心的是磁盘空间.这些是大文件.版本之间的差异很小,但我担心版本控制会注意到文件是二进制文件并且回退到单独存储每个版本.有谁知道这个解决方案?例如,我们可以保存的格式,其中差异很小,只保存差异,或者是一个特别了解Excel文件的版本控制系统?我还没有进行过性能测试,但是我们的版本控制服务器已经被严重征税,如果有更好的解决方案,我很想知道它是什么.

version-control excel diff

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

如何为Apache Velocity创建自定义指令

我正在使用Apache的Velocity模板引擎,我想创建一个自定义指令.也就是说,我希望能够编写"#doMyThing()"并让它调用我编写的一些java代码来生成文本.

我知道我可以通过添加一行来注册自定义指令

userdirective=my.package.here.MyDirectiveName
Run Code Online (Sandbox Code Playgroud)

到我的velocity.properties文件.而且我知道我可以通过扩展指令类来编写这样的课程.我不知道的是如何扩展指令类 - 为新指令的作者提供某种文档.例如,我想知道我的getType()方法是否返回"BLOCK"或"LINE",我想知道我的setLocation()方法应该做什么?

有没有比" 使用源,卢克 " 更好的文档?

apache velocity

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

JAXBContext.newInstance()中的NullPointerException

Java开发人员.我正在使用JAXB来创建绑定对象.当我尝试创建JAXBContext这样的:

JAXBContext.newInstance("com.mycompany.jaxb.pkg1:com.mycompany.jaxb.pkg2");
Run Code Online (Sandbox Code Playgroud)

我得到一个NullPointerException:

Exception in thread "main" java.lang.NullPointerException
    at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.calcXmlName(PropertyInfoImpl.java:287)
    at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.calcXmlName(PropertyInfoImpl.java:260)
    at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl.getTypes(ElementPropertyInfoImpl.java:100)
    at com.sun.xml.bind.v2.model.impl.RuntimeElementPropertyInfoImpl.getTypes(RuntimeElementPropertyInfoImpl.java:50)
    at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.size(ElementPropertyInfoImpl.java:42)
    at java.util.AbstractList$Itr.hasNext(AbstractList.java:416)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:139)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:49)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:189)
    at com.sun.xml.bind.v2.model.impl.RegistryInfoImpl.<init>(RegistryInfoImpl.java:63)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.addRegistry(ModelBuilder.java:232)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:201)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$3.run(JAXBContextImpl.java:357)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$3.run(JAXBContextImpl.java:351)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:350)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:216)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:124)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:132)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:286)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244)
    at com.mycompany.jaxb.JAXBContextFactory.initIfNeeded(JAXBContextFactory.java:66)
Run Code Online (Sandbox Code Playgroud)

谷歌搜索相关的关键字导致我几个讨论线程说这是一个已知的错误,我应该升级到2.0.3版本.但这是我的maven POM文件:

<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.2.1</version> …
Run Code Online (Sandbox Code Playgroud)

java jaxb

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

我可以拥有多个具有重叠路径的Java Web应用程序吗?

我有大量不同的独立(无状态)Web服务,用Java编写并编译为WAR文件.我想将它们部署到单个Web应用程序服务器.

如果每个WAR文件中的服务处理的URI都以我可以用作Web应用程序名称的前缀开头,那么这很容易.例如,我可以

SALES WAR FILE:包含以下代码:
GET http://example.com/sales/widgets
POST http://example.com/sales/widgets
GET http://example.com/sales/sky-hooks

营销战争文件:包含以下代码:
获取http://example.com/marketing/widgets
PUT http://example.com/marketing/sky-hooks

...在这种情况下,我只需在名称"sales"和"marketing"下部署两个WAR文件.但是,我不是那么幸运.相反,组件处理的URI路径重叠.像这样的东西:

SALES WAR FILE:包含以下代码:
GET http://example.com/widgets/sales
POST http://example.com/widgets/sales
GET http://example.com/sky-hooks/sales

营销战争文件:包含以下代码:
获取http://example.com/widgets/marketing
PUT http://example.com/sky-hooks/marketing

我的问题是如何(如果有的话)我可以在单个Web应用程序服务器上部署它们.

我愿意接受需要大量工作的建议.例如,我最好的想法是在常规URI路径之前构建期望组件名称前缀的服务,然后通过不同的服务器管理所有传入流量,该服务器知道每个URI模式属于哪个组件并将URI修改为添加该前缀.这种方法的难点在于,像Swagger这样的工具读取我的源代码会误解URI的样子.

有任何想法吗?

java web-services java-ee java-war

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

WAR共享的容器级版本化库

在一个Java servlet容器中(最好是Tomcat,但是如果这可以在另一个容器中完成,那么这样说)我希望理论上可行的东西.我的问题是,是否存在支持它的工具,以及是否存在哪些工具(或者我应该进一步研究哪些名称).

这是我的问题:在一个servlet容器中,我想运行大量不同的WAR文件.它们共享一些大型公共库(例如Spring).乍一看,我有两个不可接受的选择:

  1. 在每个WAR文件中包含大型库(例如Spring).这是不可接受的,因为它会加载大量的Spring副本,耗尽服务器上的内存.

  2. 将大型库放在容器类路径中.现在所有WAR文件共享一个库实例(好).但这是不可接受的,因为我无法在不升级所有WAR文件的情况下升级Spring版本,并且如此大的改变难以实现.

但理论上,有一种替代方案可行:

  1. 每个版本的大型库放入容器级类路径中.做一些容器级魔术,以便每个WAR文件声明它希望使用哪个版本,并且它将在其类路径中找到它.

"魔术"必须在容器级别完成(我认为),因为这只能通过使用不同的类加载器加载库的每个版本来实现,然后调整每个WAR文件可见的类加载器.

所以,你有没有听说过这样做?如果是这样,怎么样?或者告诉我它叫什么,这样我就可以进一步研究.

java tomcat classloader servlet-container

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