修改或者添加过一会刷新又回到原始数据状态

来源: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

如下

http://img.mukewang.com/climg/5fd1993809ecfcff05200272.jpg

http://img.mukewang.com/climg/5fd199610953d4fa05330435.jpg

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

1、双击Servers

http://img.mukewang.com/climg/5fd1996f0982fa0604180099.jpg

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

http://img.mukewang.com/climg/5fd199c109fe07e210090640.jpg

最后点击保存

http://img.mukewang.com/climg/5fd199fb098e00e605170150.jpg

祝学习愉快

0

0 学习 · 16556 问题

查看课程