我正在尝试制作两个匹配URI的正则表达式.这些URI的格式为:/foo/someVariableData和/foo/someVariableData/bar/someOtherVariableData
我需要两个正则表达式.每个都需要匹配一个而不是另一个.
我最初提出的正则表达式是:
/foo/.+和/foo/.+/bar/.+.
我认为第二个正则表达式很好.它只匹配第二个字符串.然而,第一个正则表达式匹配两者.所以,我开始玩(第一次)负向前瞻.我设计了正则表达式/foo/.+(?!bar)并设置以下代码来测试它
public static void main(String[] args) {
String shouldWork = "/foo/abc123doremi";
String shouldntWork = "/foo/abc123doremi/bar/def456fasola";
String regex = "/foo/.+(?!bar)";
System.out.println("ShouldWork: " + shouldWork.matches(regex));
System.out.println("ShouldntWork: " + shouldntWork.matches(regex));
}
Run Code Online (Sandbox Code Playgroud)
当然,他们两个都决心true.
谁知道我做错了什么?我不需要使用Negative lookahead,我只需要解决问题,我认为负面的预测可能是一种方法.
谢谢,
我目前处于开发的早期阶段,将Zookeeper的东西集成到我的应用程序中.我正在使用Netflix的Curator作为处理Zookeeper的API.我得到了大部分的要点(比如添加ZNodes和诸如此类的东西).
但是你怎么检查ZNode是否存在?看起来像它的代码是:
client.checkExists().forPath(path);
Run Code Online (Sandbox Code Playgroud)
... ... client的实例在哪里com.netflix.curator.framework.CuratorFramework
但是,此调用返回一个org.apache.zookeeper.data.Stat对象.
使用此对象,如何判断路径是否存在?
谢谢
我正在尝试设置128位AES加密,并且我在Cipher.init上抛出异常:
No installed provider supports this key: javax.crypto.spec.SecretKeySpec
我正在使用以下代码在客户端生成密钥:
private KeyGenerator kgen;
try {
kgen = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
kgen.init(128);
}
SecretKey skey = kgen.generateKey();
Run Code Online (Sandbox Code Playgroud)
然后,此密钥将作为标头传递给服务器.使用此函数进行Base64编码:
public String secretKeyToString(SecretKey s) {
Base64 b64 = new Base64();
byte[] bytes = b64.encodeBase64(s.getEncoded());
return new String(bytes);
}
Run Code Online (Sandbox Code Playgroud)
服务器拉出标题,然后执行
protected static byte[] encrypt(byte[] data, String base64encodedKey) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher;
try {
cipher = Cipher.getInstance("AES");
} catch (NoSuchAlgorithmException ex) {
//log …Run Code Online (Sandbox Code Playgroud) 我有一对为主从复制设置的MySQL数据库.奴隶做得很好.
另一方面,尽管我做了最好的(自动化)努力,但主人仍在囤积二进制日志.
我正在尝试在MySQL的my.cnf文件中设置'expire_logs_days'变量,但由于某种原因它似乎被忽略了.我的my.cnf文件看起来像:
[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1
[mysqld_safe]
...
Run Code Online (Sandbox Code Playgroud)
但是当我SHOW VARIABLES WHERE Variable_Name='expire_logs_days'在MySQL中运行时,它会返回一个值0
我试过了:
expire_logs_days='3'mysqld --help --verbose | grep cnf/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preferencemy.cnf档案位于/etc/my.cnfSET GLOBAL expire_logs_days=3 在MySQL中工作,但本身并没有真正解决我的问题这就是我能想到的所有事情.我已经运行了手动PURGE命令,它运行得很好,但是我更喜欢(尽管如果没有办法,我还是会这样做)不使用cron运行PURGE命令.
有人有什么想法吗?我只是轻拍.
谢谢.
Javascript(Windows 8.1,Firefox)似乎没有.tar文件或.rar文件的mime类型(也许还有其他;这些是我发现的唯一两个).那是怎么回事?有什么我可以用来解决这个问题吗?我真的希望能够为这些文件类型检索mime类型,而不需要做一些奇怪的扩展黑客攻击.
我做了一个小提琴来证明这个问题:http://jsfiddle.net/kungfujoe/jd8h7wvs/
如果浏览到.txt或.docx或许多其他格式,则会成功提取类型.但是,.tar和.rar都不会拉它们.奇怪,对吧?
(下面的JSFiddle代码)
HTML
<input id='button' type='file' name='file'/>
<div id='out'>Output Goes Here</div>
Run Code Online (Sandbox Code Playgroud)
Javascript(使用JQuery 2.1.0)
$('#button').unbind('change');
$('#button').bind('change', function () {
if(this.files[0] !== undefined && this.files[0] !== null) {
document.getElementById("out").innerHTML = "Type is " + this.files[0].type.toString();
} else {
throw "Error"
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑
1)更新了问题,以反映在Windows 8.1 Firefox上观察到的问题.Chrome有tar文件的mime类型,但不是rar文件.
2)向小提琴添加了jQuery
根据Javadoc,android.util.Base64.decode()有两个参数:text和"flags".这些标志是int形式的(我引用):
flags controls certain features of the decoded output. Pass DEFAULT to decode standard Base64.
首先,感谢任何人决定写一个模糊的Javadoc.我看到Base64有一些枚举字符串,实际上,我们一直使用Base64.NO_WRAP作为我们的标志.但是,在这个特定的实例中,我们需要使用两个标志:NO_WRAP和URL_SAFE.
我们如何指定两个标志?我们尝试用管道('|')分隔它们,但没有这样做.
import android.util.Base64;
public class Foo {
public static void main(String[] args) {
String urlSafeBase64EncodedString = getUrlSafeBase64EncodedString();
int flags = ????????; //Need both Base64.NO_WRAP and Base64.URL_SAFE
String decodedString = Base64.decode(urlSafeBase64EncodedString, flags);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间.
我正在尝试让我的新安装的Tomcat 7.0.34上的管理器/部署工作,但是当我尝试通过执行PUT进行部署时,我一直得到403 http://localhost:8080/manager/deploy.我还没有在Tomcat 7中使用它.
的conf/server.xml中
<?xml version='1.0' encoding='utf-8'?>
<Server>
...
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service>
...
<Engine>
...
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Engine>
</Service>
</Server>
Run Code Online (Sandbox Code Playgroud)
CONF/Tomcat的users.xml中
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<user username="tomcat" password="redacted" roles="manager-script"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)
我也尝试过(结果相同)
CONF/Tomcat的users.xml中
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager-script"/>
<user username="tomcat" password="redacted" roles="manager-script"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)
是的,我有两倍,三倍,四倍检查我正在使用正确的用户名和密码,如tomcat-users.xml中所定义.我以为这就是我所需要的.有任何想法吗?
如果我破解MS Excel(我假设)或LibreOffice Calc(测试),我可以在单元格中输入内容,并在单元格中更改单元格中文本部分的字体,例如在一个单元格中执行:
此文本为粗体,此文本为斜体
再次,让我重申一下,这个字符串可以在一个单元格中以所示格式存在.
可以使用Apache POI实现这种级别的自定义吗?仅搜索似乎显示如何将字体应用于整个单元格.
谢谢
=== UPDATE ===
如下所示,我最终使用HSSFRichTextString(因为我正在使用HSSF).但是,在应用字体后(我尝试使用粗体和下划线),我的文本将保持不变.这就是我的尝试.为了把事情放在上下文中,我正在研究与运动相关的事情,其中通常以"awayteam"@"hometeam"的形式显示匹配,并且根据某些外部条件,我想制作一个或者另一个大胆.我的代码看起来像这样:
String away = "foo";
String home = "bar";
String bolden = "foo"
HSSFRichTextString val = new HSSFRichTextString(away+"@"+home);
if(bolden.equals(home)) {
val.applyFont(val.getString().indexOf("@") + 1, val.length(), Font.U_SINGLE);
} else if(bolden.equals(away)) {
val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE);
}
gameHeaderRow.createCell(g + 1).setCellValue(val);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是一个代码片段来自一个比显示的更复杂的函数,但最重要的是实际代码.如您所见,我正在将val.applyFont作为字符串的一部分,然后使用字符串设置单元格值.所以我不完全确定我在那里做错了什么.任何建议表示赞赏.
谢谢
KFJ
鉴于Tomcat的Context XML文件往往包含敏感信息(通常包括连接到数据库所需的凭据),我如何从纯文本context.xml以外的源动态加载这些值?
IE11的Web Crypto位于其中window.msCrypto,而对于Firefox或Chrome,它可以访问window.crypto.
Web Workers无法访问window上下文,但幸运的是,Chrome和Firefox还在cryptoWeb Worker上下文中公开了变量(因此,在全局级别,您可以使用this.cryptoWeb Worker中的Web Crypto套件).不过,看来,这IE11并没有暴露this.msCrypto在他们的Web工作环境.
那是对的吗?有没有办法在IE11 Web Worker中使用Web Crypto?
对于testapp在web.xml中具有以下内容的webapp (除其他外)
<security-constraint>
<web-resource-collection>
<web-resource-name>My JSP</web-resource-name>
<url-pattern>*.secured</url-pattern>
<url-pattern>/login</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>mobileusers</role-name>
</auth-constraint>
<!--
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
-->
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Identity</realm-name>
</login-config>
<security-role>
<description>
No Description
</description>
<role-name>mobileusers</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)
考虑以下两个Tomcat领域配置:
配置1 - JDBC领域:
在 .../webapps/testapp/META-INF/context.xml
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionName="mysqluser"
connectionPassword="redacted"
connectionURL="jdbc:mysql://192.168.1.5/testdb?autoReconnectForPools=true&characterEncoding=UTF-8"
digest="MD5"
userTable="Users"
userNameCol="name"
userCredCol="password"
userRoleTable="Users"
roleNameCol="roleName"
/>
Run Code Online (Sandbox Code Playgroud)
配置2 - DataSource领域:
在.../webapps/testapp/META-INF/context.xml:
<Realm className="org.apache.catalina.realm.DataSourceRealm"
digest="MD5"
userTable="Users"
userNameCol="name"
userCredCol="password"
userRoleTable="Users"
roleNameCol="roleName"
dataSourceName="jdbc/testDB"
/>
Run Code Online (Sandbox Code Playgroud)
并在.../conf/context.xml:
<Resource
name="jdbc/testDB"
auth="Container"
type="javax.sql.DataSource"
removeAbandoned="true"
removeAbandonedTimeout="15"
maxActive="5"
maxIdle="5"
maxWait="7000" …Run Code Online (Sandbox Code Playgroud) 说我有一些像这样的代码:
private static Thing t = null;
private static final Object lock = new Object();
public static void foo() {
if(t == null) { //Netbeans warning on this line.
synchronized(lock) {
if(t == null) {
t = new Thing();
}
}
}
...Do stuff with t...
}
Run Code Online (Sandbox Code Playgroud)
现在,foo托管在服务器上,可能会被许多用户同时调用.函数foo的目的是初始化t,如果它还没有,否则,使用初始化的实例来做任何需要完成的事情.
但是,Netbeans在这样的代码上给了我一个警告:
Remove the outer conditional statement
使用工具提示:
Double-checked locking
双重检查锁定的目的是避免等待人们释放锁定的瓶颈.如果只检查t是否为null,那么每个人都必须等待机会查看t是否为null,并且每个人-1都会有效地等待(因为t不会为null) .因此外在条件.
有了它,比如说,通过一些奇迹,5个人同时将t == null解析为true.一个用户将获得同步锁,看到t == null仍然是真的,并初始化它.然后,该用户将释放锁定,下一个用户将锁定它,并几乎立即释放它(因为t!= null),这将继续,直到5个用户通过它.一直以来,其他用户连接跳过同步锁,作为第一个用户做了t!= null.
那么,为什么Netbeans抱怨?这似乎是做AFAIK的最好方法.
思考?
我正在使用Apache Maven将我们的产品发布到Production,截至目前,创建的生成的jar文件没有附加版本号.我想附加当前的pom.xml版本号(我知道该怎么做),但是我需要安装程序脚本(基本上是带有额外参数的java -jar命令)来默认访问最新版本的安装程序.
说我的部署文件被调用foo.jar.我的脚本基本上是java -jar foo.jar
相反,我想我的部署目录包含foo-4.0.0.jar,foo-4.0.1.jar,foo-4.0.2.jar,等.
我想创建一个运行最高版本foo的bash脚本.
我看过按创建日期排序,但我可以立即想到可能效果不佳的场景.我已经考虑过修改日期,然后手动touch输入我想要安装的文件,但这个想法也很糟糕.
显然,我需要拆分名称(可能使用正则表达式)并隔离版本号(可能是最后一个破折号的子字符串和名称中的最后一个句点?)并以某种方式对它们进行排序.排序可能是我最关心的问题......并重新关联文件.
如果这太复杂了,理论上我可以创建一个Java文件来实现这一点(我的主要语言是Java吗?),但理想情况下它只是一个bash脚本.
谢谢
java ×7
tomcat ×3
javascript ×2
mysql ×2
regex ×2
aes ×1
android ×1
apache ×1
apache-poi ×1
base64 ×1
bash ×1
cryptography ×1
encryption ×1
excel ×1
jdbcrealm ×1
jquery ×1
locking ×1
maven ×1
mime-types ×1
netbeans ×1
secret-key ×1
synchronized ×1
tomcat7 ×1
web-worker ×1