我在页面加载时注册了典型的SSE:
客户:
sseTest: function(){
var source = new EventSource('mySSE');
source.onopen = function(event){
console.log("eventsource opened!");
};
source.onmessage = function(event){
var data = event.data;
console.log(data);
document.getElementById('sse').innerHTML+=event.data + "<br />";
};
}
Run Code Online (Sandbox Code Playgroud)
我的Javascript-Debugger说,"eventsource已经打开了!" 成功了.
我的服务器代码是一个Servlet 3.0:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/mySSE"}, name = "hello-sse", asyncSupported=true)
public class MyServletSSE extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/event-stream");
resp.setCharacterEncoding("UTF-8");
Random random = new Random();
PrintWriter out = resp.getWriter(); …
Run Code Online (Sandbox Code Playgroud) 我希望实现这样的目标:
items.stream()
.filter(s-> s.contains("B"))
.forEach(s-> s.setState("ok"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
过滤,然后从过滤结果中更改属性,然后将结果收集到列表中.但是,调试器说:
无法
collect(Collectors.toList())
在原始类型上调用void
.
我需要2个流吗?
我能够将org.apache.coyote.http11.Http11Protocol.SERVER的值重命名为其他任何内容,因此HTTP-Response-Header包含以下内容:
服务器:Apache
而不是默认值
服务器:Apache-狼/ 1.1
使用org.apache.coyote.http11.Http11Protocol.SERVER的空值不会删除Server-Header.
如何从我的共鸣中删除Server-Header?
我有两个关于maven.compiler.release
-tag 的问题
我想更换
<properties>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
到
<properties>
<maven.compiler.release>12</maven.compiler.release>
</properties>
Run Code Online (Sandbox Code Playgroud)
如果我使用<maven.compiler.release>
-property,是否还必须在插件中设置发布标签?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<!-- do I need that ? -->
<release>12</release>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
根据https://www.baeldung.com/maven-java-version,它被设置为两者。
如果我使用maven.compiler.release
而不是maven.compiler.source
and maven.compiler.target
,那么-bootclasspath
也会被设置并且会进行交叉编译。这是什么意思?使用 set 的编译文件大小-bootclasspath
会更大还是编译需要更多时间?
我有一个排序(使用Comparators),我不知道选择哪个版本:
版本1:
public static void sort(Set<User> users) {
users = users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Run Code Online (Sandbox Code Playgroud)
版本2:
public static Set<User> sort(Set<User> users) {
return users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Run Code Online (Sandbox Code Playgroud)
版本3:
public static void sort(Set<User> users) {
users.stream()
.sorted(sort_gender.thenComparing(sort_age))
.collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
版本4
public static List<User> sort(Set<User> users){
List<User> list = new ArrayList<>(users);
list.sort(sort_gender.thenComparing(sort_age));
return list;
}
Run Code Online (Sandbox Code Playgroud)
所有版本对一个集进行排序并返回已排序的集.我知道,只有linkedHashSet可以保留排序.
我应该选择哪一个,我只想对输入属性用户进行排序并将其返回,那么版本1最适合这种情况吗?(对于所有情况,我希望输入用户的引用与输出用户的引用相同.)
编辑:我想,我会选择第4版.
我想将一个long
值(原始类型)与另一个Long
值(包装类型)进行比较:
long x = 5;
Long y = 5L;
// version 1: only safe, if x is a primitive type
var isEqual = x == y;
// version 2: y needs to be converted to its primitive type
var isEqual = x == y.longValue();
// version 3: using Object.equals(), x will be converted to its wrapper type
var isEqual = Objects.equals(x, y);
Run Code Online (Sandbox Code Playgroud)
问题是:使用版本 2代替版本 3有什么好处吗?
我已成功在web.xml(java-webcontainer)中设置FORM-authentication.
在使用FORM-Authentication时,我没有找到在我的客户端的restful-uri的get-request中发送用户名/密码的方法.所以我必须只为restful-uri使用BASIC-Authentication.
所以我有这个问题:
如何设置基于表单的身份验证和基本身份验证?只应为restful-uri启用基本身份验证.
我怎么能写这个
Comparator <Item> sort = (i1, i2) -> Boolean.compare(i2.isOpen(), i1.isOpen());
Run Code Online (Sandbox Code Playgroud)
像这样(代码不起作用):
Comparator<Item> sort = Comparator.comparing(Item::isOpen).reversed();
Run Code Online (Sandbox Code Playgroud)
比较方法没有像 Comparator.comparingBool() 这样的东西。Comparator.comparing 返回 int 而不是“Item”。
我想使用 jpql 或 jpa 实体图加载相关实体。
看起来两者都做同样的事情。
为什么我应该使用实体图而不是普通的jpql?有什么好处吗?
使用jpql有什么区别:
select distinct u from User u join fetch u.hobbies a join fetch a.tasks
Run Code Online (Sandbox Code Playgroud)
或实体图:
@NamedEntityGraph(name = "User.eagerfetch", attributeNodes = {
@NamedAttributeNode("hobbies"),
@NamedAttributeNode("tasks")})
Run Code Online (Sandbox Code Playgroud) 我想使用mapMulti
而不是flatMap
重构以下代码:
// using flatMap (version 1) => returns Set<Item>
var items = users.stream()
.flatMap(u -> u.getItems().stream())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
进入这个(版本2):
// using mapMulti (version 2) => returns Set<Item>
var items = users.stream()
.<Item>mapMulti((u, consumer) -> u.getItems().forEach(consumer))
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的元素。然而,我怀疑我是否真的应该用flatMap
更冗长的mapMulti
. 为什么需要在mapMuli( .<Item>mapMulti
)之前添加类型信息。如果我不包含类型信息,它将返回一个Set<Object>
. (如何)我可以简化吗mapMulti
?
java ×4
java-8 ×3
comparator ×2
java-stream ×2
servlets ×2
autoboxing ×1
equals ×1
hibernate ×1
html5 ×1
http-headers ×1
java-16 ×1
java-17 ×1
jpa ×1
lambda ×1
maven ×1
primitive ×1
rest ×1
tomcat7 ×1
web.xml ×1