我有一个静态类package woniu.web;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* 该类用于辅助Servlet处理信息
* @author kok
*
*/
public class AidServlet{
public static ServletContext sct = null;
/**
* 转发到指定的URL
* @param req HttpServletRequest
* @param resp HttpServletResponse
* @param url 目标
* @throws ServletException
* @throws IOException
*/
public synchronized static void dispatcherToUrl(HttpServletRequest req,
HttpServletResponse resp,String url) throws ServletException, IOException{
synchronized (sct) {
sct.getRequestDispatcher(url).forward((ServletRequest) req, resp);
}
}
}
这个类的dispatcherToUrl方法可能会被多个servlet使用,
我让dispatcherToUrl同步正确吗?
同步了dispatcherToUrl,有必要同步ServletContext吗?如果直接让类synchronized ,这样合理吗?我没有看多线程方面的知识,所以目前还不知道并发细节上得问题,所以请教大家看看我这里的代码哪些有问题
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* 该类用于辅助Servlet处理信息
* @author kok
*
*/
public class AidServlet{
public static ServletContext sct = null;
/**
* 转发到指定的URL
* @param req HttpServletRequest
* @param resp HttpServletResponse
* @param url 目标
* @throws ServletException
* @throws IOException
*/
public synchronized static void dispatcherToUrl(HttpServletRequest req,
HttpServletResponse resp,String url) throws ServletException, IOException{
synchronized (sct) {
sct.getRequestDispatcher(url).forward((ServletRequest) req, resp);
}
}
}
这个类的dispatcherToUrl方法可能会被多个servlet使用,
我让dispatcherToUrl同步正确吗?
同步了dispatcherToUrl,有必要同步ServletContext吗?如果直接让类synchronized ,这样合理吗?我没有看多线程方面的知识,所以目前还不知道并发细节上得问题,所以请教大家看看我这里的代码哪些有问题
解决方案 »
- 如何生存根证书和证书链?
- 如何让我的java技术得到质的提升?
- struts中 Action如何取得DynaValidatorForm的属性值
- 谁能把这题做出来呀!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- struts2中重复提交问题
- java如何调用delphi编写的webservice接口
- 哪位有装了Android ADT插件的Eclipse ,麻烦发我一个。
- 服务器向客户端发消息
- 如何选择职业生涯的第一个公司?
- ejb中可不可以调用一个普通的javabean!??
- tomcat在启动的时候报下面的错误,请大侠协助小女子,再此谢过
- MyEclipse 动态网站开发
改为非静态的不就好了吗public ServletContext sct = null;
有意义吗?
ServletContext在整个WEB项目中应该只有一个吧。
sct.getRequestDispatcher(url):这里是通过RequestDispatcher去实现跳转的。每个请求都会有独立的HttpServletRequest,你这里做同步有什么意义呢???
我知道HttpServletRequest用它直接转发就可以了,并且HttpServletRequest的线程是安全的,我这么做的目的是了解一下关于并发时的疑问,(我没有学过多线程),比如说,我在servlet中调用了一个静态方法,如果这个静态方法只涉及到‘读’,我有必要对这个静态方法同步吗?假设我同步静态方法内中有类似于ServletContext这种线程不安全的对象,那么我有必要在静态方法中对ServletContext同步吗?
这在不同的场景中就有不同的解决方案,就像你刚才提供的这个例子一样。
在WEB中完全不需要同步,但是假设做一个其它的类型Servlet容器的东西,可能就需求。
没有固定不变的代码,任何代码移植到任何平台都要根据自身的环境所改变。