小编nim*_*o23的帖子

SSE和Servlet 3.0

我在页面加载时注册了典型的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)

html5 servlets server-sent-events

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

无法在一个流中进行filter-> forEach-> collect?

我希望实现这样的目标:

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个流吗?

java lambda java-8 java-stream

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

删除服务器头tomcat

我能够将org.apache.coyote.http11.Http11Protocol.SERVER的值重命名为其他任何内容,因此HTTP-Response-Header包含以下内容:

服务器:Apache

而不是默认值

服务器:Apache-狼/ 1.1

使用org.apache.coyote.http11.Http11Protocol.SERVER的空值不会删除Server-Header.

如何从我的共鸣中删除Server-Header?

http-headers tomcat7

15
推荐指数
3
解决办法
2万
查看次数

“maven.compiler.release”作为源和目标的替代品?

我有两个关于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.sourceand maven.compiler.target,那么-bootclasspath也会被设置并且会进行交叉编译。这是什么意思?使用 set 的编译文件大小-bootclasspath会更大还是编译需要更多时间?

maven maven-compiler-plugin

13
推荐指数
2
解决办法
3728
查看次数

带有比较器的java 8 stream.sorted

我有一个排序(使用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版.

java comparator java-8

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

“长”与“长”的比较

我想将一个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有什么好处吗?

java primitive autoboxing equals

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

web.xml,同时使用表单和基本身份验证

我已成功在web.xml(java-webcontainer)中设置FORM-authentication.

在使用FORM-Authentication时,我没有找到在我的客户端的restful-uri的get-request中发送用户名/密码的方法.所以我必须只为restful-uri使用BASIC-Authentication.

所以我有这个问题:

如何设置基于表单的身份验证和基本身份验证?只应为restful-uri启用基本身份验证.

rest web.xml servlets restful-authentication

8
推荐指数
2
解决办法
2338
查看次数

Comparator.compareBoolean() 和 Comparator.compare() 一样吗?

我怎么能写这个

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”。

comparator java-8

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

jpql“加入获取”与 EntityGraph

我想使用 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)

hibernate jpa

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

与 flatMap 相比,为什么 mapMulti 需要类型信息

我想使用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 java-stream java-16 java-17

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