我对弹簧mvc和螺纹安全性有疑问.
我们正在开发将存储在tomcat上的Web应用程序.如果我理解正确,Tomcat会根据请求创建线程,并且它有一些线程池.现在,调度程序servlet在请求之间共享,可能是线程安全的.
但是当我创建这样的控制器:
@Controller
@RequestMapping("/manage")
public class QuestionManagementController {
Run Code Online (Sandbox Code Playgroud)
他有Singleton范围,所以来自每个用户的每个请求都使用相同的控制器.
我想知道这个问题通常是如何解决的:
1:是否使用Session范围创建了控制器?(但我认为如果一个用户快速做一些可能导致控制器竞争条件的事情,也可能会出现问题).
2:控制器的作用域为 request
3:创建无状态控制器,这些控制器不在类级别共享任何变量,或者将它们置于只读模式
或者也许有一些更好的"最佳实践"可以解决这类问题.
我问这个问题,因为现在我们将它们作为Singleton范围,并且存在一个问题,在大多数方法中我们在数据库中查询用户,并且由于范围,我们无法将此信息存储在类级变量中.我们可以尝试使用一些线程安全的集合,但后来可能有其他资源需要同步访问.
HttpUrlConnection线程安全吗?即如果我有一个连接到服务器的HttpConnection实例并且该实例被不同的线程使用(egtry同时发送POST),HttpUrlConnection将如何处理这种情况?a)他们是否会串行发送POST,或者b)第一个线程发送POST,获得响应,然后第二个线程将发送POST?如果他们以串行方式发送POST,则意味着对同一tcp连接的多个活动POST.这是允许的吗?可以由服务器处理吗?
谢谢
我有一个使用外部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但没有成功.我究竟做错了什么?
我正在使用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个并发呼叫?如果他们被重用,我有什么可以做并发呼叫而不是并行的吗?
谢谢
如何使用反射调用已在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"的新实例,为什么我要使用反射?我想念一些东西吗?
谢谢
我正在尝试使用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) 我Executor特意使用框架Executors.newCachedThreadPool();
我有一个Runnable例如100
的列表.前50个,每个创建一个值(存储在列表中)以供最后50个使用.
我想如果我按顺序传递Runnables executor.execute()它们在列表中,它们也将以相同的顺序执行.
但这不会发生.
这些任务似乎是以随机顺序执行的,它们是交错的,不是按顺序执行的.
这是假设工作的方式吗?有办法解决这个问题吗?
谢谢
我有一个部署在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.
我在这里乱搞什么?
如果我有这样的方法(为简单起见假设整数):
public static List<Integer> doSomething(List<Integer> list) {
// logic here
}
Run Code Online (Sandbox Code Playgroud)
我需要我的处理内部创建一个新列表,我将创建并以某种方式填充并返回给调用者,我怎么能这样做,因为我不知道调用者传入的列表类型是什么?
我不想返回List调用者传入的不同类型.
例如,如果调用者传递一个LinkedList,我不希望返回ArrayList.
如何最好地解决这个问题?
在特定页面中,用户将按下按钮但是在实际处理之前按下按钮,我偶尔需要向用户呈现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创建弹出窗口?
java ×9
html ×2
.net ×1
arraylist ×1
classloader ×1
command-line ×1
concurrency ×1
dom ×1
executor ×1
jar ×1
javascript ×1
jaxp ×1
jetty ×1
jvm ×1
linked-list ×1
list ×1
popupwindow ×1
reflection ×1
servlets ×1
spring-mvc ×1
stax ×1
swingworker ×1
tomcat ×1