小编Cra*_*lus的帖子

弹簧控制器 - 线程安全和存储资源

我对弹簧mvc和螺纹安全性有疑问.

我们正在开发将存储在tomcat上的Web应用程序.如果我理解正确,Tomcat会根据请求创建线程,并且它有一些线程池.现在,调度程序servlet在请求之间共享,可能是线程安全的.

但是当我创建这样的控制器:

@Controller
@RequestMapping("/manage")
public class QuestionManagementController {
Run Code Online (Sandbox Code Playgroud)

他有Singleton范围,所以来自每个用户的每个请求都使用相同的控制器.

我想知道这个问题通常是如何解决的:

1:是否使用Session范围创建了控制器?(但我认为如果一个用户快速做一些可能导致控制器竞争条件的事情,也可能会出现问题).

2:控制器的作用域为 request

3:创建无状态控制器,这些控制器不在类级别共享任何变量,或者将它们置于只读模式

或者也许有一些更好的"最佳实践"可以解决这类问题.

我问这个问题,因为现在我们将它们作为Singleton范围,并且存在一个问题,在大多数方法中我们在数据库中查询用户,并且由于范围,我们无法将此信息存储在类级变量中.我们可以尝试使用一些线程安全的集合,但后来可能有其他资源需要同步访问.

java tomcat spring-mvc thread-safety

5
推荐指数
1
解决办法
5774
查看次数

httpurlconnection线程安全

HttpUrlConnection线程安全吗?即如果我有一个连接到服务器的HttpConnection实例并且该实例被不同的线程使用(egtry同时发送POST),HttpUrlConnection将如何处理这种情况?a)他们是否会串行发送POST,或者b)第一个线程发送POST,获得响应,然后第二个线程将发送POST?如果他们以串行方式发送POST,则意味着对同一tcp连接的多个活动POST.这是允许的吗?可以由服务器处理吗?

谢谢

.net java multithreading httpurlconnection

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

Java执行jar,它依赖于命令行中的其他jar

我有一个使用外部jar的应用程序.我使用了eclipse,它工作正常.我从eclipse导出为jar,创建了一个具有Class-Path的清单文件:./cab.v1.jar我将两个jar放在同一个目录中.我在命令行中运行:java -jar myApp.jar

并获取cab.v1.jar(另一个jar)中的类的java.lang.NoClassDefFoundError也试过java -cp.-jar myApp.jar但没有成功.我究竟做错了什么?

java command-line jar

4
推荐指数
1
解决办法
3191
查看次数

swingworkers的背景任务变得顺序

我正在使用SwingWorkers来使我的GUI响应.但是我无法理解以下内容:当用户按下按钮时,我想从GUI调用远程方法.我有按钮的动作内部(问题的提示的简称):

//in action of button
SwingWorker worker = new SwingWorker<boolean,Void>(){
   @Override
   public boolean doInBackground(){
      return call_remote_method_here();
   }

};
worker.execute();
//some other code
Run Code Online (Sandbox Code Playgroud)

我的问题是虽然gui似乎响应,但对远程方法的实际调用是顺序的而不是并发的.我在网络跟踪中注意到它,并认为该方法是阻塞的.但后来我在踪迹中看到SwingWorkers似乎在顺序运行.从

log 2010-09-06 16:58:22,962 [ SwingWorker-pool-4-thread-1 ] DEBUG - >第一个远程方法调用

我得到了响应,然后第二个swingworker运行

2010-09-06 16:58:23,227 [ SwingWorker-pool-4-thread-1 ] DEBUG - >第二个远程方法调用

为什么会这样?我认为这是随机交错,但我注意到2个实例具有相同的名称?摇摆工人是否合并?这是随机行为吗?不是我看到2个并发呼叫?如果他们被重用,我有什么可以做并发呼叫而不是并行的吗?

谢谢

java concurrency multithreading swingworker

4
推荐指数
1
解决办法
1254
查看次数

java反射调用已加载对象的方法

如何使用反射调用已在JVM中加载的对象的方法?我试过了

Class myClass = Class.forName("myClass");
Method m = com.test.class.getDeclaredMethod("getValue",new Class[] {});
Object result = m.invoke(myClass,null);
Run Code Online (Sandbox Code Playgroud)

但我得到java.lang.IllegalArgumentException:object不是声明类的实例.我想调用的方法是void,即不接受参数

更新 我有一个已加载类"A"的应用程序.另一个类"B"将由框架实例化.初始化类"B"时,类"A"已经加载到JVM中.我想从类"A"BUT的加载实例中调用一个方法而不在类"B"中引用"A".在答案中,似乎我必须在类"B"中创建一个"A"的新实例,但我想要访问已经加载的对象.如果我在"B"中创建"A"的新实例,为什么我要使用反射?我想念一些东西吗?

谢谢

java reflection jvm classloader

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

java使用StAX以通用方式获取子元素

我正在尝试使用StAX(我已经不喜欢它了......)
似乎使用它的唯一方法是通过连续的if-else条件.
但最重要的是,似乎没有办法将元素与其子元素相关联,除非事先知道正在解析的xml文档的结构.这是正确的吗?
我尝试了以下内容:我在String中使用了这个xml

<ns1:Root xmlns:ns1=\"http://rootNameSpace.com/\">
<ns1:A/>
<ns1:B>
        <Book xmlns=\"http://www.myNameSpace.com\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
            <Data>
                <Author>John</Author>
                <Edition>1</Edition>
                <PubHouse>Small Publishing House</PubHouse>
                <Price>37.8</Price>
            </Data>
        </Book>
</ns1:B>
</ns1:Root>
Run Code Online (Sandbox Code Playgroud)

我想使用StAX来获取Book元素,但似乎我只能编写硬编码所有结构的代码.
即使用XMLEventReader,一旦你得到Book,就开始循环数据,作者等.
这是否有通用的解决方案?
我尝试了以下内容来解决这个问题:我试图从String转到XMLEventReader并返回String但我无法获得我最初使用的确切String表示(命名空间在括号中,额外的冒号等).

StringBuilder xml = new StringBuilder();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
String msg = "<ns1:Root xmlns:ns1=\"http://rootNameSpace.com/\"><ns1:A/><ns1:B><Book xmlns=\"http://www.myNameSpace.com\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Data><Author>John</Author><Edition>1</Edition><PubHouse>Small Publishing House</PubHouse><Price>37.8</Price></Data></Book></ns1:B></ns1:Root>";
InputStream input = new ByteArrayInputStream(msg.getBytes("UTF-8"));
XMLEventReader xmlEventReader = inputFactory.createXMLEventReader(input);
while (xmlEventReader.hasNext())
{

    XMLEvent event = xmlEventReader.nextEvent();
    StringWriter sw = new StringWriter();
    event.writeAsEncodedUnicode(sw);
   xml.append(sw);

}
System.out.println(xml);
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

<?xml version="1.0" encoding='UTF-8' standalone='no'?><['http://rootNameSpace.com/']:ns1:Root xmlns:ns1='http://rootNameSpace.com/'><['http://rootNameSpace.com/']:ns1:A></ns1:A><['http://rootNameSpace.com/']:ns1:B><['http://www.myNameSpace.com']::Book xmlns:='http://www.myNameSpace.com' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><['http://www.myNameSpace.com']::Data><['http://www.myNameSpace.com']::Author>John</Author><['http://www.myNameSpace.com']::Edition>1</Edition><['http://www.myNameSpace.com']::PubHouse>Small …
Run Code Online (Sandbox Code Playgroud)

java stax dom jaxp

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

ThreadPool不会按顺序运行任务

Executor特意使用框架Executors.newCachedThreadPool();
我有一个Runnable例如100
的列表.前50个,每个创建一个值(存储在列表中)以供最后50个使用.
我想如果我按顺序传递Runnables executor.execute()它们在列表中,它们也将以相同的顺序执行.
但这不会发生.
这些任务似乎是以随机顺序执行的,它们是交错的,不是按顺序执行的.
这是假设工作的方式吗?有办法解决这个问题吗?

谢谢

java multithreading executorservice executor

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

在servlet响应中正确编写HTML页面

我有一个部署在http:// ip:8080/simple下
的servlet servlet在包下a.b.c
我有一个a.b.resources命名的html页面Test.html.

html有img一个图像标签.

在我做的servlet中:

htmlFile = MyServlet.class.getResourceAsStream("/a/b/resources/Test.html");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
byte[] bytes=new byte[htmlFile.available()];
htmlFile.read(bytes);
resp.setContentLength(bytes.length);
writer.print(new String(bytes));
writer.flush();
writer.close();
Run Code Online (Sandbox Code Playgroud)

html页面出现在浏览器上,但在图像的位置我看到它的alt描述.
我试过了:

<img alt="Company A" src="./CompanyLogo.jpg">

<img alt="Company A" src="/a/b/resources/CompanyLogo.jpg">

<img alt="Company A" src="CompanyLogo.jpg">
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用.
jpg图像位于/ a/b/c/resources下,即与HTML页面位于同一目录中.
我正在使用嵌入式Jetty.

我在这里乱搞什么?

html java servlets jetty embedded-jetty

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

如何返回正确的列表类型?

如果我有这样的方法(为简单起见假设整数):

public static List<Integer> doSomething(List<Integer> list) {
   // logic here  
}
Run Code Online (Sandbox Code Playgroud)

我需要我的处理内部创建一个新列表,我将创建并以某种方式填充并返回给调用者,我怎么能这样做,因为我不知道调用者传入的列表类型是什么?

我不想返回List调用者传入的不同类型.

例如,如果调用者传递一个LinkedList,我希望返回ArrayList.

如何最好地解决这个问题?

java linked-list list arraylist

4
推荐指数
1
解决办法
3130
查看次数

在普通的javascript中创建一个弹出窗口

在特定页面中,用户将按下按钮但是在实际处理之前按下按钮,我偶尔需要向用户呈现options选择适当的一个列表并使用该选择以便能够进行处理.
所以基本上我需要显示一个弹出窗口,显示一个select包含可用选项的框,并获取用户的选择,然后继续处理.
所以要做到这一点,我发现我需要一个组合,window->open/prompt/showModalDialog
我找到了一种方法,通过选项通过选项向用户显示一个弹出窗口

var newWindow = window.open("", null, "height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");  
newWindow.document.write("<select>");   
newWindow.document.write("<option>");  
newWindow.document.write(obj);  
newWindow.document.write("</option>");  
newWindow.document.write("</select>");  
Run Code Online (Sandbox Code Playgroud)

只传递一个选项的示例.
但我似乎无法找到如何取回选择.
prompt另一方面,返回的选择,但我不认为我可以把它显示我的select.
showModalDialog回报的选择,但似乎期待着另一个网页作为参数.所以它不适合我.

如何使用普通javascript创建弹出窗口?

html javascript popupwindow

4
推荐指数
1
解决办法
3万
查看次数