【发布时间】:2011-12-31 22:05:02
【问题描述】:
一个 servlet 类处理传入的请求对象,获取数据并存储到 StringBuilder/StringBuffer 并将数据传递给另一个类以写入文件。
ActionClass
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
String fileName = request.getparameter("fileName");
String body = request.getParameter("innerHTML");
String head = request.getParameter("headContents");
StringBuilder sbr = new StringBuilder();
sbr.append(body); sbr.append(head);
OR
StringBuffer sbf = new StringBuffer();
sbf.append(body); sbf.append(head);
FileWrite fw = new FileWrite(fileName, sbf/sbr); /* write the data into file*/
}
文件写入
class FileWrite{
public FileWrite(String fileName, StringBuilder sbf){
boolean isExist = checkFileName(fileName); /* return true or false */
if(isExist){
String name = reName(fileName); /* rename & return new name */
/* write the file in new file */
}else{ /* write in same file name */ }
}
public String reName(String oldName){
/* rename oldName as newName & checks via isExist(newName) */
}
public boolean isExist(String filename) {
// checks the file in directory, if found already
return true;
else return false;
}
}
正如您在上面的示例中看到的,动作类将数据传递给FileWrite class,后者将数据写入新文件。可能有数百个客户端同时发送请求以将数据存储在新文件中。
所以我的问题是,在 servlet 类中我应该使用什么来存储数据。 是 String or stringBuffer or StringBuilder??是线程安全的问题吗?
【问题讨论】:
-
我建议您展示您将代码放入的方法,这样我们就不必做出假设(根据 Neil 关于 doGet 或 doPost 的评论)
-
@Nathan:我也修改并编写了其他类和方法。不管我不确定
FileWrite class or it's method是否需要线程安全,但我希望你现在能明白我的意思。再次感谢
标签: java multithreading servlets thread-safety