java web练习项目

java web练习项目

这是2018年在学校学习做出来的项目,现在放出来,仅仅是回顾一下,内容比较一般,我水平比较差,就是跟老师打出来(当然我有根据自己的理解写一些代码)。先来看一下效果图。
在这里插入图片描述
在这里插入图片描述
展示页面涉及的分类,页面定位,及后台对前端的增删改都是亲测有效的。有任何想问的,别问(反正我不是大牛)。

点击这里,就是整个练习项目源码,不放git了,一个练习而已

环境配置

环境的配置是比较麻烦的,小白要下载很多东西:

  1. apache-tomcat-8.5.61,记得下8的,这个老师说是好用。
  2. JDK1.8.
  3. Dom4j-2.1到2.5, jQuery,Ajax依赖包
  4. eclipse java jee。在这里插入图片描述
    注意安装的是这个,版本号新旧都无所谓吧idea用户也没问题的。
    5.还有注意将eclipse 和tomcat整合,这样就方便多了。
    。
    实际上依赖包我都下好了放这里,你们下载就可以了

所有文件的位置我都截图了。
在这里插入图片描述
在这里插入图片描述

xml文件存放信息。

(painting.xml)
在这里插入图片描述

获取文档信息及增删改

(XmlDataSource.java)

package com.MOBA.utils;

import java.io.FileOutputStream;

import java.io.IOException;
import java.io.OutputStreamWriter;
/**
 * 数据源类,用于讲XML文件解析为Java对象

 */
import java.io.UnsupportedEncodingException;
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 com.MOBA.entity.Painting;

import com.sun.corba.se.spi.ior.Writeable;

/*数据源类,用于将XML解析为java对象*/
public class XmlDataSource {
	// static静态关键字保证数据全局唯一
	private static List<Painting> data = new ArrayList();// 这个泛型用来装Painting里面传来的数据。
	private static String dataFile;// 这个用来读取文件路径
	static {
		// painting.xml文件完整物理地址
		dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();// 这里就需要dom4j依赖的支持了,我偶尔也会选错支持。
		reload();// 重载,每次打开网页就刷新一次的意思
	}

	private static void reload() {
		URLDecoder decoder = new URLDecoder();// 对中文字符进行编码
		try {
			decoder.decode(dataFile, "UTF-8");// 编码对象正是datafile存着的路径对应的文件
			/* System.out.println(dataFile); */// 用来测试输出路径是否正确,实际上一般都不会有错。
			// 利用Dom4j对XML进行解析
			SAXReader reader = new SAXReader();
			// 1. 获取Document文档对象
			Document document = reader.read(dataFile);// 读取文件的内容,存进document里面
			// 2.Xpath得到XML节点集合
			List<Node> nodes = document.selectNodes("/root/painting");// 添加在一个泛型里面,里面有string和integer
			data.clear();// 每次重载就清空一次内存。
			for (Node node : nodes) {// 对皮肤的内容进行设置然后添加进data里面
				Element element = (Element) node;
				String id = element.attributeValue("id");
				String pname = element.elementText("pname");
				Painting painting = new Painting();// 这个页面里的东西都是大一大二学java的那些。相信不看你都猜得出该写啥。
				painting.setId(Integer.parseInt(id));
				painting.setPname(pname);
				painting.setCategory(Integer.parseInt(element.elementText("category")));// 需要强制转换才能得到integer,因为实际需要读取的不是string
				painting.setPrice(Integer.parseInt(element.elementText("price")));
				painting.setPreview(element.elementText("preview"));
				painting.setDescription(element.elementText("description"));
				data.add(painting);// 清空后自然就要重新装进去。
//				System.out.println(id+":" + pname);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 获取所有油画Painting对象
	 * 
	 * @return Painting List
	 */
	public static List<Painting> getRawData() {
		return data;// 返回装在data里面的内容
	}

	/**
	 * 追加新的油画数据
	 * 
	 * @param painting Painting实体对象
	 */
	public static void append(Painting painting) {
		// 1.读取XML文档,得到Document对象
		SAXReader reader = new SAXReader();
		Writer writer = null;
		try {
			Document document = reader.read(dataFile);// 将读取到的文件路径放read读取,注意这里是将painting的结点读进去,数据存放 。

			Element root = document.getRootElement();// 获得xml文件中的根节点<root>
			Element p = root.addElement("painting");// 2.在<root>节点下,创建新的<painting>节点
			// 3.创建painting节点的各个子节点
			p.addAttribute("id", String.valueOf(data.size() + 1));//属性设置后就可以对<painting>节点下的内容进行添加了
			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());
			// 4.写入XML,完成追加操作
			writer = new OutputStreamWriter(new FileOutputStream(dataFile), "UTF-8");// 件文件写入的同时,utf-8解决中文乱码的问题
			document.write(writer);// 写进文件里。
//			System.out.println(dataFile);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			reload();// 内存与文件数据一致
		}

	}

	/**
	 * 更新对应id的XML皮肤数据
	 * 
	 * @param painting 要更新的皮肤数据
	 * @throws IOException
	 */
	public static void update(Painting painting) {
		SAXReader reader = new SAXReader();
		Writer writer = null;
		try {
			Document document = reader.read(dataFile);
			// 节点路径[@属性名=属性值]
			// /root/painting[@id=x]
			List<Node> nodes = document.selectNodes("/root/painting[@id=" + painting.getId() + "]");//找到对应的id
			if (nodes.size() == 0) {  
				throw new RuntimeException("id=" + painting.getId() + "编号油画不存在");
			}
			Element p = (Element) nodes.get(0);//获得这个id里面的内容
			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);
			System.out.println(dataFile);
		} 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();//写完后也需要重新载入
		}

	}

	/**
	 * 按id号删除XML皮肤数据
	 * 
	 * @param id 皮肤id
	 * @throws IOException
	 */

	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) { new XmlDataSource();
	 * 
	 * List<Painting> ps = XmlDataSource.getRawData(); System.out.println(ps);
	 * 
	 * 
	 * 
	 * Painting p = new Painting(); p.setPname("测试画面"); p.setCategory(1);
	 * p.setPrice(4000); p.setPreview("/upload/10.jpg"); p.setDescription("测试画面描述");
	 * XmlDataSource.append(p);
	 * 
	 * 
	 * }
	 */
}

Painting的类加载

package com.MOBA.entity;

public class Painting {//javaBean
	private Integer id;//油画编号
	private String pname;//名称
	private Integer category;//分类 1-现实主义 2-抽象主义
	private Integer price; //价格
	private String preview;//油画图片地址
	private String description;//描述
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public Integer getCategory() {
		return category;
	}
	public void setCategory(Integer category) {
		this.category = category;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	public String getPreview() {
		return preview;
	}
	public void setPreview(String preview) {
		this.preview = preview;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
}

对于页面的处理

package com.MOBA.utils;

import java.util.ArrayList;
import java.util.List;

public class PageModel {
	private int page;//页号
	private int totalPages;//总页数
	private int rows;//每页记录数
	private int totalRows;//总记录数
	private int pageStartRow;//当前页从第n行开始
	private int pageEndRow;//当前页到n行结束
	private boolean hasNextPage;//是否存在下一页
	private boolean hasPreviousPage;//是否存在上一页
	private List pageData;//当前页面数据
	
	public PageModel() {
		
	}
	/**
	 * 初始化PageModel对象,计算分页属性
	 * @param data 原始数据集合
	 * @param page 页号
	 * @param rows 每页记录数
	 */
	public PageModel(List data,int page,int rows) {
		this.page = page;
		this.rows = rows;
		totalRows = data.size();
		//总页数计算规则: 总行数/每页记录数,能整除页数取整,不能整除向上取整
		//例如: 18/6=3 | 20/6≈3.33 向上取整=4
		//Math.ceil 浮点数向上取整 Math.floor 浮点数向下取整 
		//20/6≈3.33 20/6=3 ,注意事项:Java中两个整数相除只会得到结果整数部分,需转为浮点数运算
		totalPages = new Double(Math.ceil(totalRows/(rows * 1f))).intValue();
		
		pageStartRow = (page-1) * rows;//0
		pageEndRow = page * rows;//6
		//totalRows:20 | totalPage:4 | rows:6
		//pageEndRow=4*6=24>20 执行subList()抛出下标越界异常
		if(pageEndRow>totalRows) {//避免下标越界异常
			pageEndRow=totalRows;
		}
		pageData = data.subList(pageStartRow, pageEndRow);//得到分页数据
		if(page>1) {//判断是否存在上一页
			hasPreviousPage = true;
		}else {
			hasPreviousPage = false;
		}
		if(page<totalPages) {//判断是否存在下一页
			hasNextPage = true;
		}else {
			hasNextPage = false;
		}
		
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getTotalPages() {
		return totalPages;
	}
	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}
	public int getRows() {
		return rows;
	}
	public void setRows(int rows) {
		this.rows = rows;
	}
	public int getTotalRows() {
		return totalRows;
	}
	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}
	public int getPageStartRow() {
		return pageStartRow;
	}
	public void setPageStartRow(int pageStartRow) {
		this.pageStartRow = pageStartRow;
	}
	public int getPageEndRow() {
		return pageEndRow;
	}
	public void setPageEndRow(int pageEndRow) {
		this.pageEndRow = pageEndRow;
	}
	public boolean isHasNextPage() {
		return hasNextPage;
	}
	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}
	public boolean isHasPreviousPage() {
		return hasPreviousPage;
	}
	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}
	public List getPageData() {
		return pageData;
	}
	public void setPageData(List pageData) {
		this.pageData = pageData;
	}
	
	public static void main(String[] args) {
		List sample = new ArrayList();
		for(int i = 1 ; i<= 100 ; i++) {
			sample.add(i);	
		}
		PageModel pageModel = new PageModel(sample, 6, 8);
		System.out.println(pageModel.getPageData());
		System.out.println(pageModel.getTotalPages());
		System.out.println(pageModel.getPageStartRow() + ":" + pageModel.getPageEndRow());
	}
}

页面的处理

package com.MOBA.controller;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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.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 com.MOBA.entity.Painting;
import com.MOBA.service.PaintingService;
import com.MOBA.utils.PageModel;

/**
 * Servlet implementation class ManagementController
 */
@WebServlet("/management")
public class ManagementController extends HttpServlet {
	private PaintingService paintingService = new PaintingService();//获取页面信息
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManagementController() {
        super();
    }

	/**
	 * @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");
		//通过method参数区分不同的操作
		String method = request.getParameter("method");
		if(method.equals("list")) {//分页查询列表
			this.list(request,response);
		}else if(method.equals("delete")) {
			this.delete(request,response);
		}else if(method.equals("show_create")) {//显示新增页面
			this.showCreatePage(request,response);
		}else if(method.equals("create")) {
			this.create(request, response);
		}else if(method.equals("show_update")) {
			this.showUpdatePage(request,response);
		}else if(method.equals("update")) {
			this.update(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);
	}
	//分页查询列表
	private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String p = request.getParameter("p");
		String r = request.getParameter("r");
		if(p==null) {
			p = "1";
		}
		if(r==null) {
			r = "6";
		}
		PageModel pageModel = paintingService.pagination(Integer.parseInt(p),Integer.parseInt(r));
		request.setAttribute("pageModel", pageModel);
		request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request, response);
	}
	//显示新增页面
	private void showCreatePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/jsp/create.jsp").forward(request, response);		
	}
	//新增油画方法
	private void create(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//文件上传时的数据处理与标准表单完全不同
		/*
		String pname = request.getParameter("pname");
		System.out.println(pname);
		*/
		//1. 初始化FileUpload组件
		FileItemFactory factory = new DiskFileItemFactory();
		/**
		 * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象
		 * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析
		 */
		ServletFileUpload sf = new ServletFileUpload(factory);
		//2. 遍历所有FileItem
		try {
			List<FileItem> formData = sf.parseRequest(request);
			Painting painting = new Painting();
			for(FileItem fi:formData) {
				if(fi.isFormField()) {
					System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
					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 {
					System.out.println("文件上传项:" + fi.getFieldName());
					//3.文件保存到服务器目录
					String path = request.getServletContext().getRealPath("/upload");
					System.out.println("上传文件目录:" + path);
					//String fileName = "test.jpg";
					String fileName = UUID.randomUUID().toString();
					//fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg
					String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
					//fi.write()写入目标文件
					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();
		}
	}
	
	/**
	 * 显示更新页面
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void showUpdatePage(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		Painting painting = paintingService.findById(Integer.parseInt(id));
		request.setAttribute("painting", painting);
		request.getRequestDispatcher("/WEB-INF/jsp/update.jsp").forward(request, response);
	}
	/**
	 * 实现油画更新
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		int isPreviewModified = 0;
		//文件上传时的数据处理与标准表单完全不同
		/*
		String pname = request.getParameter("pname");
		System.out.println(pname);
		*/
		//1. 初始化FileUpload组件
		FileItemFactory factory = new DiskFileItemFactory();
		/**
		 * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象
		 * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析
		 */
		ServletFileUpload sf = new ServletFileUpload(factory);
		//2. 遍历所有FileItem
		try {
			List<FileItem> formData = sf.parseRequest(request);
			Painting painting = new Painting();
			for(FileItem fi:formData) {
				if(fi.isFormField()) {
					System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
					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;
					case "id":
						painting.setId(Integer.parseInt(fi.getString("UTF-8")));
						break;
					case "isPreviewModified":
						isPreviewModified = Integer.parseInt(fi.getString("UTF-8"));
						break;
					default:
						break;
					}
				}else {
					if(isPreviewModified == 1) { 
						System.out.println("文件上传项:" + fi.getFieldName());
						//3.文件保存到服务器目录
						String path = request.getServletContext().getRealPath("/upload");
						System.out.println("上传文件目录:" + path);
						//String fileName = "test.jpg";
						String fileName = UUID.randomUUID().toString();
						//fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg
						String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
						//fi.write()写入目标文件
						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();
		}
	}
	/**
	 * 客户端采用Ajax方式提交Http请求
	 * Controller方法处理后不再跳转任何jsp,而是通过响应输出JSON格式字符串
	 * Tips:作为Ajax与服务器交互后,得到的不是整页HTML,而是服务器处理后的数据
	 * @throws IOException 
	 */
	
	public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
		String id = request.getParameter("id");
		PrintWriter out = response.getWriter();
		try {
			paintingService.delete(Integer.parseInt(id));
			//{"result":"ok"}
			out.println("{\"result\":\"ok\"}");
		}catch(Exception e) {
			e.printStackTrace();
			out.println("{\"result\":\"" + e.getMessage() + "\"}");
		}
		
	}
	
}
package com.MOBA.service;
import java.util.List;
import com.MOBA.dao.PaintingDao;
import com.MOBA.entity.Painting;
import com.MOBA.utils.PageModel;
/**
 * PaintingService皮肤类别
 */
public class PaintingService {
	private PaintingDao paintingDao = new PaintingDao();
	/**
	 * pagination数据分页查询
	 * @param pageNo 页号
	 * @param rows 每页记录数
	 * @param category 可选参数,分类编号
	 * @return 分页对象
	 */
	public PageModel pagination(int page,int rows , String...category) {
		if(rows == 0) {
			throw new RuntimeException("无效的rows参数");
		}
		if(category.length==0 || category[0] == null) {
			return paintingDao.pagination(page, rows);
		}else {
			return paintingDao.pagination(Integer.parseInt(category[0]), page, rows);
		}
	}
	/**
	 * 新增皮肤
	 * @param painting 准备新增的Painting数据
	 */
	public void create(Painting painting) {
		paintingDao.create(painting);
	}
	
	/**
	 * 按编号查询皮肤
	 * @param id 皮肤编号
	 * @return 皮肤对象
	 */
	public Painting findById(Integer id) {
		Painting p = paintingDao.findById(id);
		if(p==null) {
			throw new RuntimeException("[id=" + id +"]皮肤不存在");
		}
		return p;
	}

	/**
	 * 更新业务逻辑
	 * @param newPainting 新的皮肤数据
	 * @param isPreviewModified 是否修改Preview属性
	 */
	public void update(Painting newPainting,Integer isPreviewModified) {
		//createtime:
		//在原始数据基础上覆盖更新
		Painting oldPainting = this.findById(newPainting.getId());
		oldPainting.setPname(newPainting.getPname());
		oldPainting.setCategory(newPainting.getCategory());
		oldPainting.setPrice(newPainting.getPrice());
		oldPainting.setDescription(newPainting.getDescription());
		if(isPreviewModified == 1) {
			oldPainting.setPreview(newPainting.getPreview());
		}
		paintingDao.update(oldPainting);
	}
	/**上
	 * 按id号删除数据
	 * @param id
	 */
	public void delete(Integer id) {
		paintingDao.delete(id);
	}
	/*
	 * public static void main(String[] args) { PaintingService paintingService =
	 * new PaintingService(); PageModel pageModel = paintingService.pagination(2,
	 * 6); List<Painting> paintingList = pageModel.getPageData(); for(Painting
	 * painting : paintingList) { System.out.println(painting.getPname()); }
	 * System.out.println(pageModel.getPageStartRow() + ":" +
	 * pageModel.getPageEndRow()); }
	 */
}
package com.MOBA.dao;

import java.util.ArrayList;
import java.util.List;

import com.MOBA.entity.Painting;
import com.MOBA.utils.XmlDataSource;
import com.MOBA.utils.PageModel;

public class PaintingDao {
	public PageModel pagination(int page, int rows) {
		//Painting 皮肤对象集合
		List<Painting> list = XmlDataSource.getRawData();
		//pageModel分页处理得到分页数据及分页
		PageModel pageModel = new PageModel(list,page,rows);
		
		return pageModel;
	}
	
	/**
	 * 按类别分页查询
	 * @param category 分类编号
	 * @param page 页号
	 * @param rows 每页记录数
	 * @return 分页对象
	 */
	public PageModel pagination(int category, int page, int rows) {
		List<Painting> list = XmlDataSource.getRawData();//从源文件拿到全部信息
		List<Painting> categoryList = new ArrayList<Painting>();//建立新的painting列表用于存储需要的内容
		
		for (Painting painting : list) {
			if (painting.getCategory()==category) {
				categoryList.add(painting);//如果找到了对应的分类就装进这个新的列表中。
			}
		}
		PageModel pageModel = new PageModel(categoryList,page,rows);//再将页面信息放进页面处理模块,这里只是对数量进行处理。
		return pageModel;
	}
	
	public void create(Painting painting) {//新增新皮肤
		XmlDataSource.append(painting);
	}
	
	public Painting findById(Integer id) {//找到对应的id就是找了需要删除或者修改的对象
		List<Painting> data = XmlDataSource.getRawData();
		Painting painting = null;
		for(Painting p  :  data) {
			if(p.getId() == id) {
				painting = p;
				break;
			}
		}
		return painting;
	}
	
	public void update(Painting painting) {
		XmlDataSource.update(painting);
	}
	
	public void delete(Integer id) {
		XmlDataSource.delete(id);
	}
}

后台管理的重点代码

package com.MOBA.controller;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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.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 com.MOBA.entity.Painting;
import com.MOBA.service.PaintingService;
import com.MOBA.utils.PageModel;

/**
 * Servlet implementation class ManagementController
 */
@WebServlet("/management")
public class ManagementController extends HttpServlet {
	private PaintingService paintingService = new PaintingService();//获取页面信息
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManagementController() {
        super();
    }

	/**
	 * @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");
		//通过method参数区分不同的操作
		String method = request.getParameter("method");
		if(method.equals("list")) {//分页查询列表
			this.list(request,response);
		}else if(method.equals("delete")) {
			this.delete(request,response);
		}else if(method.equals("show_create")) {//显示新增页面
			this.showCreatePage(request,response);
		}else if(method.equals("create")) {
			this.create(request, response);
		}else if(method.equals("show_update")) {
			this.showUpdatePage(request,response);
		}else if(method.equals("update")) {
			this.update(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);
	}
	//分页查询列表
	private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String p = request.getParameter("p");
		String r = request.getParameter("r");
		if(p==null) {
			p = "1";
		}
		if(r==null) {
			r = "6";
		}
		PageModel pageModel = paintingService.pagination(Integer.parseInt(p),Integer.parseInt(r));
		request.setAttribute("pageModel", pageModel);
		request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request, response);
	}
	//显示新增页面
	private void showCreatePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/jsp/create.jsp").forward(request, response);		
	}
	//新增油画方法
	private void create(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//文件上传时的数据处理与标准表单完全不同
		/*
		String pname = request.getParameter("pname");
		System.out.println(pname);
		*/
		//1. 初始化FileUpload组件
		FileItemFactory factory = new DiskFileItemFactory();
		/**
		 * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象
		 * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析
		 */
		ServletFileUpload sf = new ServletFileUpload(factory);
		//2. 遍历所有FileItem
		try {
			List<FileItem> formData = sf.parseRequest(request);
			Painting painting = new Painting();
			for(FileItem fi:formData) {
				if(fi.isFormField()) {
					System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
					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 {
					System.out.println("文件上传项:" + fi.getFieldName());
					//3.文件保存到服务器目录
					String path = request.getServletContext().getRealPath("/upload");
					System.out.println("上传文件目录:" + path);
					//String fileName = "test.jpg";
					String fileName = UUID.randomUUID().toString();
					//fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg
					String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
					//fi.write()写入目标文件
					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();
		}
	}
	
	/**
	 * 显示更新页面
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void showUpdatePage(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		Painting painting = paintingService.findById(Integer.parseInt(id));
		request.setAttribute("painting", painting);
		request.getRequestDispatcher("/WEB-INF/jsp/update.jsp").forward(request, response);
	}
	/**
	 * 实现油画更新
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		int isPreviewModified = 0;
		//文件上传时的数据处理与标准表单完全不同
		/*
		String pname = request.getParameter("pname");
		System.out.println(pname);
		*/
		//1. 初始化FileUpload组件
		FileItemFactory factory = new DiskFileItemFactory();
		/**
		 * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象
		 * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析
		 */
		ServletFileUpload sf = new ServletFileUpload(factory);
		//2. 遍历所有FileItem
		try {
			List<FileItem> formData = sf.parseRequest(request);
			Painting painting = new Painting();
			for(FileItem fi:formData) {
				if(fi.isFormField()) {
					System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
					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;
					case "id":
						painting.setId(Integer.parseInt(fi.getString("UTF-8")));
						break;
					case "isPreviewModified":
						isPreviewModified = Integer.parseInt(fi.getString("UTF-8"));
						break;
					default:
						break;
					}
				}else {
					if(isPreviewModified == 1) { 
						System.out.println("文件上传项:" + fi.getFieldName());
						//3.文件保存到服务器目录
						String path = request.getServletContext().getRealPath("/upload");
						System.out.println("上传文件目录:" + path);
						//String fileName = "test.jpg";
						String fileName = UUID.randomUUID().toString();
						//fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg
						String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
						//fi.write()写入目标文件
						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();
		}
	}
	/**
	 * 客户端采用Ajax方式提交Http请求
	 * Controller方法处理后不再跳转任何jsp,而是通过响应输出JSON格式字符串
	 * Tips:作为Ajax与服务器交互后,得到的不是整页HTML,而是服务器处理后的数据
	 * @throws IOException 
	 */
	
	public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
		String id = request.getParameter("id");
		PrintWriter out = response.getWriter();
		try {
			paintingService.delete(Integer.parseInt(id));
			//{"result":"ok"}
			out.println("{\"result\":\"ok\"}");
		}catch(Exception e) {
			e.printStackTrace();
			out.println("{\"result\":\"" + e.getMessage() + "\"}");
		}
		
	}
	
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值