HttpServletResponse.setStatus()工作一次,再次调用时什么都不做 – 在Java 8 / Tomcat 9.0.0和Java 10 / Tomcat 9.0.8之间进行更改?

我有一个在Tomcat 9下运行的Java servlet,作为正常流程的一部分,它会多次调用HttpServletResponse#setStatus() 。 当使用Java 8(1.8.0u144,由Tomcat报告为1.8.0_144-b01 )在Tomcat 9.0.0.M26上运行时,这很好用。 当在带有Java 10.0.1的Tomcat 9.0.8.0上运行时(由Tomcat报告为10.0.1+10 ),似乎在响应对象上调用setStatus()实际上只会导致响应状态设置一次 ,之后HTTP状态无法再更改。 但是,通过HttpServletResponse #setHeader()发送到客户端的其他标头似乎不受此影响; 即使setStatus()不再执行任何操作,setHeader()也会成功添加标头。 没有发送可能导致HTTP标头终止的中间输出数据。 这是一个最小的工作示例: package org.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(“/HttpResponseStatusTestServlet”) public class HttpResponseStatusTestServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append(“Testing “); response.setStatus(505); response.setStatus(506); response.getWriter() .append(“Served […]

在/ public_html / in Java下的Web服务器中创建一个文件夹

我正在尝试使用JERSEY开发的RESTFul Web服务中的Java文件处理API在Web服务器中创建一个文件夹。 根据我的理解,当我定位“xyz.com”时,它默认指出我的服务器中的/ home / xyz / public_html /。 所以当我尝试按如下方式创建文件夹时 String appFolderPath = “/xyz.com/appFolder/”; File userNameFolder = new File(appFolderPath + userName); if (!userNameFolder.exists()) { folderPath = userNameFolder.mkdir(); } 上面的代码失败,我没有得到任何exception,也没有创建文件夹。 我究竟该怎么做呢? 如何为public_html /文件夹提供路径? 另一点是,是否由于许可问题而发生? ,我实际上尝试了另一种方式,我在public_html /下手动创建/ appFolder并给予该文件夹完全读写权限,但仍然无法使用上面的代码在其中创建任何文件夹。 请让我知道如何实现它? 任何示例代码? 如果可能的话,让我知道JERSEY是否给我API以使其变得简单?

使用Java中的ssh2连接到由RSA SecurID保护的Linux系统

我想创建一个从Windows系统到Linux机器的连接,它使用RSA令牌密码进行身份validation,我想运行shell命令并从Java代码获取输出。 使用putty登录Linux系统时,请执行以下步骤: 输入IP和端口并连接 在PuTTY终端输入用户名,询问“登录为:” 输入PASSCODE,我们输入RSA SecurID 我已经尝试使用Jsch包连接,但它没有连接。 我还尝试了一个jcabi-ssh的包装器jcabi-ssh ( http://ssh.jcabi.com/ )。 它们似乎都不适合我。 编辑:我使用Jsch包使用以下代码 String host = “xxx”; String user = “xxx”; String password; Scanner scanner = new Scanner (System.in); System.out.println(“Enter rsa token: “); password = scanner.nextLine(); Session session = jsch.getSession(user, host, 2222); session.setPassword(password); session.connect(); 之后我收到以下错误: com.jcraft.jsch.JSchException: UnknownHostKey: myservername. RSA key fingerprint is ba:2b:70:2f:4f:fa:f6:20:31:56:e0:e8:8b:16:46:c9 我找到了一个解决方案,有人说这条代码将StrictHostKeyChecking设置为“no”: java.util.Properties […]

HashMap中的复合字符串键

我们将一个String键存储在HashMap中,该HashMap是三个String字段和一个布尔字段的串联。 问题是如果分隔符出现在字段值中,则可以创建重复键。 所以为了解决这个问题,根据另一篇文章中的建议,我打算创建一个将用作HashMap键的键类: class TheKey { public final String k1; public final String k2; public final String k3; public final boolean k4; public TheKey(String k1, String k2, String k3, boolean k4) { this.k1 = k1; this.k2 = k2; this.k3 = k3; this.k4 = k4; } public boolean equals(Object o) { TheKey other = (TheKey) o; […]

将数据从fragment分配给activity变量,并在另一个片段中获取变量

我有一个Android应用程序。 其中一个活动有两个片段。 当我的应用程序启动时,它会将数据分配给其活动中的变量。 然后在单击按钮时,将打开第二个片段,并从活动中分配的活动中获取数据。 但它返回null。 到目前为止我尝试过的是…… 我在我的活动类中创建了变量,并像这样从我的片段中分配数据。 ((MainActivity)getActivity()).resultObj = gson.fromJson(HomeCardString.toString(), HomeCardResult.class); 它完全分配,因为我在这样的相同片段中使用了这些数据 HomeCardListItemAdapter adapter = new HomeCardListItemAdapter(getActivity(), R.layout.home_cardlist_item, ((MainActivity)getActivity()).resultObj.HomeData.FriendSummary); 哪个效果很好。 但是当我在点击时打开我的第二个片段时,它只显示我的布局而不执行任何覆盖方法。 像oncontentview等,因为这些所有方法都是在活动开始时执行的。 但那时我还没有将数据分配给我的活动变量。 所以我做了我自己的方法,并在显示我的第二个片段后立即调用它。 showFragment(FRIENDLIST, true); FriendListActivity asdss = new FriendListActivity(); // this is my second fragment asdss.populateFriendList(); 在第二个片段中,我使用此代码的方法。 public void populateFriendList() { FriendList = ((MainActivity)getActivity()).resultObj.HomeData.Friends; String asd = FriendList.toString(); asd = asd + “asdasda”; […]

Ajax错误struts2?

我有我的动作课: try{ tspNameIdMap = slsReqMgmtCommonRemote.getTspNameIdMap(Integer.parseInt(circleId)); throw new ReqMgmtException(“Message test”); } catch(ReqMgmtException rEx){ addActionError(“Action-Error: Request Management Exception thrown”); return ERROR; } 我正在进行AJAX调用并使用Struts2-Json-plugin以JSON格式获取tspNameIdMap 。 JS:AJAX的一部分: success: function(data){ alert(‘Updated DB’); }, error: function(data){ alert(data); } 我的struts.xml : tspNameIdMap 我想在我的Ajax错误函数中使用addActionError消息。 我还想在我的JSP中显示它。 我怎么能得到这个? Ps:我是否必须在属性文件中包含此ActionError消息? 我是第一次使用它。 帮帮我 编辑 :当我跟着@Prabhakar回答我得到了错误消息,但它在AJAX调用success时返回。 另一个问题是,当我把它放在我的JSP中时, actionerror没有显示出来。 JSP:

如何将JRadioButton组与模型一起使用

有没有办法将一组JRadioButtons与数据模型相关联,这样就更容易分辨出哪个按钮(如果有的话)被选中了? 在一个理想的世界中,我想将一组N个radiobuttons与一个enum类相关联,该enum类具有NONE值和一个与每个radiobutton相关联的值。

从命令行(不使用lein)将clojure源编译为类(AOT)

我正在尝试将clojure源编译成类文件,并仅使用命令行运行它,没有lein,也没有(可能)回复。 我在src/hello目录中有core.clj。 . └── src └── hello └── core.clj 这是源代码。 (ns hello.core) (defn -main “This should be pretty simple.” [] (println “Hello, World!”)) 在REPL中使用(compile) 。 从这个网站的提示( http://clojure.org/compilation ),我试图从REPL获取类文件。 我在src目录中使用lein repl启动了REPL,然后尝试编译以获取错误。 user=> (compile ‘hello.core) CompilerException java.io.IOException: No such file or directory, compiling:(hello/core.clj:1:1) 命令行 从这个简单的工具,用于将Clojure .clj编译成.class / .jar以及如何在clojure中编译文件 ,似乎我可以在REPL之外编译clojure源代码。 我试过这个. 得到一个错误。 > java -cp .:/clojure-1.6.0.jar -Dclojure.compile.path=build clojure.lang.Compile […]

使用AtomicInteger作为静态共享计数器

为了通过Java了解同步,我只是搞乱一些简单的事情,比如创建线程之间共享的计数器。 我遇到的问题是我无法弄清楚如何在100%的时间内顺序打印计数器。 int counterValue = this.counter.incrementAndGet(); System.out.println(this.threadName + “: ” + counterValue); 上面增加AtomicInteger counter ,获取新值,并将其打印到由负责该更新的线程名称标识的控制台。 当看起来incrementAndGet()方法在打印当前线程的更新值之前导致JVM上下文切换到另一个线程以进行更新时,会出现问题。 这意味着在线程返回执行状态之前,该值会增加但不会打印。 在查看此示例输出时,这很明显: Thread 3: 4034 Thread 3: 4035 Thread 3: 4036 Thread 1: 3944 Thread 1: 4037 Thread 1: 4039 Thread 1: 4040 Thread 2: 3863 Thread 1: 4041 Thread 1: 4043 您可以看到,当执行返回到线程1时,它会打印其值并继续更新。 线程2也是如此。 我有一种感觉,我错过了一些非常明显的东西。

如何在Intellij IDEA中正确配置JBoss? 我收到错误:未指定服务器实例

我无法在Intellij IDEA中为GWT应用程序配置JBoss Web服务器。 IDEA告诉我: 错误:未指定服务器实例。 如何解决? 有任何想法吗? 照片质量更好