修改或者添加过一会刷新又回到原始数据状态
来源:4-15 自由编程
幕布斯2414477
2020-12-10 03:19:19
# 具体遇到的问题
老师,修改或者添加之后,list界面显示了修改或者添加以后的数据,但是过一会刷新又回到了初始的数据。
我发现painting.xml没有发生任何变化,这个问题怎么解决?
下面我粘贴 XmlDataSource和ManagementController的代码
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码
package utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import entity.Painting;
public class XmlDataSource {
private static List<Painting> data = new ArrayList();
private static String dataFile;
static {
dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();
reload();
}
public static void reload() {
URLDecoder decoder = new URLDecoder();
try {
dataFile = decoder.decode(dataFile, "UTF-8");
SAXReader reader = new SAXReader();
Document document = reader.read(dataFile);
List<Node> nodes = document.selectNodes("/root/painting");
data.clear();
for(Node node : nodes) {
Element element = (Element)node;
Painting painting = new Painting();
painting.setId(Integer.parseInt(element.attributeValue("id")));
painting.setPname(element.elementText("pname"));
painting.setCategory(Integer.parseInt(element.elementText("category")));
painting.setPrice(Integer.parseInt(element.elementText("price")));
painting.setPreview(element.elementText("preview"));
painting.setDescription(element.elementText("description"));
data.add(painting);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static List<Painting> getRawData() {
return data;
}
public static void append(Painting painting) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document =reader.read(dataFile);
Element root = document.getRootElement();
Element p =root.addElement("painting");
p.addAttribute("id", String.valueOf(data.size()+1));
p.addElement("pname").setText(painting.getPname());
p.addElement("category").setText(painting.getCategory().toString());
p.addElement("price").setText(painting.getPrice().toString());
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"utf-8");
document.write(writer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void update(Painting painting) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
List<Node> nodes = document.selectNodes("/root/painting[@id="+ painting.getId() +"]");
if(nodes.size() == 0) {
throw new RuntimeException("未发现id为"+painting.getId()+"的油画");
}
Element p = (Element) nodes.get(0);
p.selectSingleNode("pname").setText(painting.getPname());
p.selectSingleNode("category").setText(painting.getCategory().toString());
p.selectSingleNode("price").setText(painting.getPrice().toString());
p.selectSingleNode("preview").setText(painting.getPreview());
p.selectSingleNode("description").setText(painting.getDescription());
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"utf-8");
document.write(writer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload(); //不要忘记这个reload方法进行重载
}
}
public static void delete(Integer id) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
List<Node> nodes = document.selectNodes("/root/painting[@id="+ id +"]");
if(nodes.size() == 0) {
throw new RuntimeException("未找到对应id:"+ id +"的油画");
}
Element p = (Element) nodes.get(0);
p.getParent().remove(p);
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"utf-8");
document.write(writer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload();
}
}
public static void main(String[] args) {
System.out.println(dataFile);
}
}
package controller;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import entity.Painting;
import service.PaintingService;
import utils.PageModel;
/**
* Servlet implementation class ManagementController
*/
@WebServlet("/management")
public class ManagementController extends HttpServlet {
private static PaintingService paintingService = new PaintingService();
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ManagementController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String method = request.getParameter("method");
if(method.equals("list")) {
this.list(request, response);
}else if(method.equals("show_create")) {
this.showCreate(request, response);
}else if(method.equals("create")) {
this.create(request, response);
}else if(method.equals("show_update")) {
this.showUpdate(request, response);
}else if(method.equals("update")) {
this.update(request, response);
}else if(method.equals("delete")) {
this.delete(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
public void list(HttpServletRequest request, HttpServletResponse response) {
String p = request.getParameter("p");
String r = request.getParameter("r");
String c = request.getParameter("c");
if(p == null) {
p = "1";
}
if(r == null) {
r = "6";
}
PageModel pageModel = paintingService.pagination(Integer.parseInt(p), Integer.parseInt(r),c);
request.setAttribute("pageModel", pageModel);
try {
request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void showCreate(HttpServletRequest request, HttpServletResponse response) {
try {
request.getRequestDispatcher("WEB-INF/jsp/create.jsp").forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void create(HttpServletRequest request, HttpServletResponse response) {
// 初始化组件
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(factory);
Painting painting = new Painting();
//遍历
try {
List<FileItem> formData = sf.parseRequest(request);
for(FileItem fi : formData) {
if(fi.isFormField()) {
switch(fi.getFieldName()) {
case "pname" : painting.setPname(fi.getString("utf-8"));break;
case "category" : painting.setCategory(Integer.parseInt(fi.getString("UTF-8")));break;
case "price" : painting.setPrice(Integer.parseInt(fi.getString("utf-8")));break;
case "description" : painting.setDescription(fi.getString("UTF-8"));break;
default : break;
}
}else {
//文件保存到服务器目录
String path = request.getServletContext().getRealPath("/upload"); //保存目录
System.out.println("上传文件目录"+path);
String fileName = UUID.randomUUID().toString(); //生成的文件名
String suffix = fi.getName().substring(fi.getName().lastIndexOf(".")); //获取的文件后缀
fi.write(new File(path,fileName+suffix));
painting.setPreview("/upload/"+fileName+suffix);
}
}
paintingService.create(painting);
response.sendRedirect("/management?method=list");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void showUpdate(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
Painting painting = paintingService.findById(Integer.parseInt(id));
request.setAttribute("painting", painting);
try {
request.getRequestDispatcher("WEB-INF/jsp/update.jsp").forward(request, response);
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void update(HttpServletRequest request, HttpServletResponse response) {
int isPreviewModified = 0;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(factory);
Painting painting = new Painting();
try {
List<FileItem> fileItem = sf.parseRequest(request);
for(FileItem fi : fileItem ) {
if(fi.isFormField()) {
switch(fi.getFieldName()) {
case "pname" : painting.setPname(fi.getString("utf-8")); break;
case "price" : painting.setPrice(Integer.parseInt(fi.getString("utf-8"))); break;
case "category" : painting.setCategory(Integer.parseInt(fi.getString("utf-8")));break;
case "description" : painting.setDescription(fi.getString("UTF-8")); break;
case "id" : painting.setId(Integer.parseInt(fi.getString()));
case "isPreviewModified" : isPreviewModified= Integer.parseInt(fi.getString("UTF-8")); break;
default : break;
}
}else {
if(isPreviewModified == 1) {
String path = request.getServletContext().getRealPath("/upload");
System.out.println("文件上传目录"+path);
String fileName = UUID.randomUUID().toString();
String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
fi.write(new File(path,fileName+suffix));
painting.setPreview("/upload/"+fileName+suffix);
}
}
}
paintingService.update(painting, isPreviewModified);
response.sendRedirect("/management?method=list");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
String id = request.getParameter("id");
PrintWriter out = response.getWriter();
try {
paintingService.delete(Integer.parseInt(id));
out.println("{\"result\":\"ok\"}");
}catch(Exception e){
e.printStackTrace();
out.println("{\"result\":\""+e.getMessage()+"\"}");
}
}
}
,可通过选择【代码语言】突出显示
1回答
好帮手慕阿园
2020-12-10
同学你好,测试代码没有出现同学所说的情况
新增数据和修改数据,是将数据添加到了Tomcat->webapps下的painting.xml文件中了,而不是Eclipse的painting.xml中,所以同学发现没有改变;list页面中的数据来自于Tomcat下的painting.xml
如下


过一会刷新又回到原始数据可能是由于同学的后台重启了服务器,同学按照如下设置试试
1、双击Servers

2、将如下选项中的第一项进行修改,表示不自动发布

最后点击保存

祝学习愉快
相似问题