最近我问了一个关于使用GCM 发送推送通知的问题:向Android发送推送通知.现在有了FCM,我想知道它与服务器端开发有多么不同.明智的编码,它们是一样的吗?在哪里可以找到显示从服务器向Android设备发送推送通知的示例FCM代码?
我是否需要下载任何JAR库以使用Java代码向FCM发送通知?向Android发送推送通知中的示例代码显示使用GCM发送推送通知,并且需要服务器端GCM JAR文件.
但是,另一个例子在https://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-push-a-notification-to -the-client-app显示使用GCM发送推送通知,并且不需要服务器端GCM JAR文件,因为它只是通过HTTP连接发送.FCM可以使用相同的代码吗?使用的网址是" https://android.googleapis.com/gcm/send ".什么是FCM的等效URL?
提前致谢.
我的任务是编写一个涉及加密的小型Java控制台应用程序.我不熟悉加密,所以我必须先做一些阅读.到目前为止,给出的高级要求是AES-256应该用于生成一次性密钥来加密文件.
之后,应使用收件人的公钥(RSA-2048)来加密该AES-256一次性密钥.然后,加密文件和加密的一次性AES-256密钥将被压缩并发送给收件人.
根据我对读取加密和解密的理解,除了算法(RSA,AES等)之外,还有称为模式和填充的东西.例如,以下代码将RSA指定为算法,ECB模式和PKCS1Padding.
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)
在加密和解密中必须使用相同的算法,模式和填充.因此,我可以向用户询问他们想要的模式和填充是否合理?
我注意到Cipher cipher = Cipher.getInstance("RSA")似乎使用了ECB的默认模式和PKCS1Padding的填充,因此这行代码与上面相同.那么可以假设ECB模式和PKCS1Padding模式将默认用于RSA-2048吗?
我目前正在开发在服务器上运行WebLogic的Java Web服务.这些Web服务由移动应用程序调用,该应用程序由另一个团队开发.我需要向移动应用程序发送推送通知.我目前的开发并不需要我进行任何移动开发,因为我只进行服务器端开发.我也没有移动开发方面的经验.如何开发推送通知到两个Android设备?
谢谢.
android push-notification android-notifications google-cloud-messaging
我有一个Windows Server 2012 R2标准版(基于x64的处理器),它有IIS 8.我需要在其上配置反向代理,它缺少URL Rewrite模块.根据我的阅读,URL Rewrite需要应用程序请求路由(ARR)模块,该模块本身也需要Web Farm Framework模块和外部缓存模块.
对于URL Rewrite,我可以从https://www.iis.net/downloads/microsoft/url-rewrite下载
对于ARR,我可以从https://www.iis.net/downloads/microsoft/application-request-routing下载
在哪里可以下载IIS 8的Web Farm Framework和外部缓存模块?我已经搜索过,到目前为止我发现的内容仅适用于IIS 7.5.
有人可以向我解释为什么下面的第二个 println 语句没有打印任何内容吗?即使我使用 encodeToString() 方法而不是 encode() 方法,我仍然无法打印 Base64 编码的字符串。编码的字符串不为空,因为我可以使用它的 length() 方法进行验证。我尝试了一个不同的文件,一个二进制文件,但问题仍然存在。
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
public class Test {
public static void main(String... args) {
try {
byte[] content = Files.readAllBytes(Paths.get("D:\\config.properties"));
System.out.println(content.length); // correctly prints the length
byte[] encoded = Base64.getEncoder().encode(content);
System.out.println(new String(encoded)); // prints nothing
content = Base64.getDecoder().decode(encoded);
System.out.println(new String(content)); // prints original content
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这个问题只在我在 Eclipse 中运行程序时存在。当我从命令提示符运行它时,可以打印出 Base64 编码的字符串。
我有一个JAX-RS Web服务,它返回一个获取JSON请求参数(映射到Parameter对象),如下所示(它在WebLogic 12.2.1中运行).是否可以编写拦截器或过滤器,这样当调用Web服务时,它将在JSON请求消息中添加一个额外的字段,以便下面的方法将在requestParameters中获得额外的字段?
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("LogIn")
public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) {...}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个静态方法,它应该根据当前时间戳生成一个唯一的ID,如下面的代码所示.为了确保新生成的ID与先前生成的ID不同(由于非常快的计算机使得毫秒不会改变),我放入一个循环来比较新生成的ID与先前生成的ID.如果它们相同,它将生成另一个ID.
public class Util {
protected static String uniqueID;
public static String generateUniqueID() {
SimpleDateFormat timstampFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
do {
String timestamp = timstampFormat.format(new Date());
if (!timestamp.equals(uniqueID)) {
uniqueID = timestamp;
return uniqueID;
}
} while (true);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望上面的代码在多个线程调用方法时起作用.
如果我只将volatile关键字放入uniqueID变量,那还不够好吗?我还需要同步块吗?
如果有一个synchronized块但没有volatile关键字呢?
提前致谢.
添加:
如果我更改为以下代码,仍然需要volatile关键字吗?
public class Util {
private static volatile String uniqueID;
public static synchronized String generateUniqueID() {
uniqueID = UUID.randomUUID().toString();
return uniqueID;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要使用JDBC来创建新的Oracle用户.用户通过GUI提供新用户的用户名和密码.以下代码工作正常(我也可以使用Statement而不是PreparedStatement).
PreparedStatement preparedStatement = connection.prepareStatement("create user " + username + " identified by " + password);
preparedStatement.execute();
Run Code Online (Sandbox Code Playgroud)
但是,由于用户名和密码是由用户提供的,因此它们可能包含空格,半列,引号等特殊字符,这可能使上述语句无效.我不希望我的代码对用户名和密码进行验证,并将其留给Oracle进行验证.因此,我想到在预准备语句中使用参数:
PreparedStatement preparedStatement = connection.prepareStatement("create user ? identified by ?");
preparedStatement.setString(1, userName);
preparedStatement.setString(2, password);
preparedStatement.execute();
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.当我提供有效的用户名和密码时,我将收到"ORA-01935:缺少用户名或角色名".似乎参数不适用于CREATE,DROP,ALTER语句.如何解决我的问题?提前致谢.
我试图在运行于WebLogic 12.2.1的Web服务中添加log4j日志记录,但是以某种方式,日志记录无法正常工作。
这是我的WAR文件的WEB-INF \ classes中的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">E:/MLM/MyDomain/servers/MyAppSrv01/logs</Property>
</Properties>
<Appender type="File" name="File" fileName="${log-path}/Services.log" filePattern="${log-path}/Services-%d{yyyy-MM-dd}.log">
<Layout type="PatternLayout">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Layout>
</Appender>
<Loggers>
<Root level="INFO">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
这是我的Web服务代码的一部分:
@Path("TestWS")
@Consumes("text/plain")
@Produces("text/plain")
public class TestWS {
static private Logger logger = LogManager.getLogger();
public TestWS() {}
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("webservicemethod1")
public String webservicemethod1(@Context HttpServletRequest request) {
logger.error("In webservicemethod1");
....
}
}
Run Code Online (Sandbox Code Playgroud)
在我的WAR文件的WEB-INF \ lib \中,我有:
log4j-core-2.5.jar
log4j-api-2.5.jar
Run Code Online (Sandbox Code Playgroud)
我可以使用客户端程序成功调用Web服务。但是我根本看不到日志文件被创建。可能是什么问题呢?
提前致谢。
我对 Collectors.toList() 和 Collectors.toSet() 静态方法很困惑。这两种方法不接受任何参数。那么他们怎么知道要返回什么类型的 Collector 呢?
例如,如果我们有这一行:
Collectors.toList();
Run Code Online (Sandbox Code Playgroud)
返回的收集器是Collector<Object,?,List<Object>>。
如果我们有这一行:
Collector<Integer,?,List<Integer>> c = Collectors.toList();
Run Code Online (Sandbox Code Playgroud)
然后 Collectors.toList() 将返回一个Collector<Integer,?,List<Integer>>. 在不接受任何输入参数的情况下, toList() 方法如何知道它需要返回一个Collector<Integer,?,List<Integer>>?
也许如何编写 toList() 的示例代码对我的理解会有所帮助。
提前致谢。
以下代码演示了对话框的居中以及舞台在屏幕中心的位置。应该首先显示该对话框,以便用户输入登录凭据。成功登录后,将显示主窗口(阶段)。我从该网站找到了以对话框和舞台为中心的解决方案,但这似乎并不理想。对于对话框和阶段,必须先显示它们,然后才能计算坐标,然后将其放置在中心。这意味着显示对话框和主窗口后,它们会移到中心。有没有更好的办法?理想情况下,在显示它们之前,应将它们放置在中间。
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.Window;
public class Demo extends Application {
private Stage primaryStage;
private Dialog<String> dialog;
private Button createUserButton = new Button("Create User");
@Override
public void start(Stage primaryStage) throws …Run Code Online (Sandbox Code Playgroud) java ×5
weblogic12c ×2
android ×1
base64 ×1
concurrency ×1
cryptography ×1
eclipse ×1
encryption ×1
firebase ×1
iis ×1
iis-8 ×1
java-8 ×1
javafx ×1
javafx-8 ×1
jax-rs ×1
jdbc ×1
json ×1
log4j ×1
log4j2 ×1
logging ×1
ojdbc ×1
oracle ×1
synchronized ×1
volatile ×1
web-services ×1
weblogic ×1