Java Web 项目(后台管理系统)

Java Web 项目(后台管理系统)

1.所要用的工具 :
(1)编译工具: Myeclipse2017
(2)服务器:apache_tomcat8
(3)所有的Jdk 版本: jdk-8u221-64bit
(4)sqlserver数据库

将以上软件安装到计算机:

2.创建一个 web应用Produce
Java Web 项目(后台管理系统)_第1张图片

Java Web 项目(后台管理系统)_第2张图片

3.创建一个com.product.vo包,包下创建Produce 类
这里的类的属性名尽量与数据库表中的字段名相对应,方便后面与前端表中数据相对应不容易犯迷糊出错

package com.product.vo;

public class Produce {

  private Integer id; 
  private String name;
  private String lx;  //类型的简拼
  private Integer price;
  private String yn; //yes or no 的简写
  private String note;
  //数据库中建表product  的六个字段 分别也声明为 id   name   lx price  yn  note
  //其中id设置为了主键标识自增为1
public Integer getId() {
  return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
	return name;
 }
 public void setName(String name) {
this.name = name;
}
public String getLx() {
return lx;
}
public void setLx(String lx) {
this.lx = lx;
}
public Integer getPrice() {
	return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getYn() {
return yn;
}
public void setYn(String yn) {
this.yn = yn;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
 }

 }

4.创建一个com.product.dbservice包,包下创建DBservice类
用来连接数据库

package com.product.dbservice;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//这里封装一个连接数据库的类,以后用的话直接拿去用不需要再写
public class DBservice {
private final String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//连接数据库2018DB,当然这里数据库命名有点不规范,尽量别让数字开头,易出错
private final String url = "jdbc:sqlserver://localhost:1433;DatabaseName=2018DB";
private final String userName = "sa";
private final String password = "123456";
private static DBservice dbservice = null;
private static Connection conn = null;
private DBservice() {
}
public static DBservice getInstance() {
	if (null == dbservice) {
		dbservice = new DBservice();
	}
	return dbservice;
}

    

private Connection getConnection() {
	try {
		Class.forName(driver);
		conn = DriverManager.getConnection(url, userName, password);
	} catch (ClassNotFoundException e) {
		System.out.println(e.getMessage());
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	}
	return conn;
}
 
public int exeUpdateSql(String sqlstr) {

	int result = -100;
    if(null==conn){
	  conn = this.getConnection();
    }
	try {
		Statement stmt = conn.createStatement();
		result = stmt.executeUpdate(sqlstr);
		stmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return result;
}

 	public List executeSelect(String sqlstr) {

	List result = new ArrayList();

	if(null==conn)conn = this.getConnection();

	Statement stmt;
	try {
		stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(sqlstr);
		ResultSetMetaData rmd = rs.getMetaData();
		while (rs.next()) {
			Map map = new HashMap();
			for (int ii = 1; ii <= rmd.getColumnCount(); ii++) {
				map.put(rmd.getColumnName(ii),
						rs.getString(rmd.getColumnName(ii)));
			}
			result.add(map);
		}
       stmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return result;
}
}

5.创建一个com.product.dao包,包下创建ProduceDao 接口

package com.product.dao;
import java.util.List;
import com.product.vo.Produce;

//创建一个接口
public interface ProduceDao {
 //抽象方法add
public void add(Produce p);

public void update(Produce p);

public void delete(Produce p);

public List query(String where);
}

6.创建一个com.product.dao.impl包,包下创建IProduceDao类实现ProduceDao接口

package com.product.dao.impl;  
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.product.dao.ProduceDao;
import com.product.dbservice.DBservice;
import com.product.vo.Produce;

public class IProduceDao implements ProduceDao {
 public void add(Produce p) {
    //拼接sql语句
	String sql="insert into product (name,lx,price,yn,note) values(";
    sql=sql+"'"+p.getName()+"',";
    sql=sql+"'"+p.getLx()+"',";
    sql=sql+"'"+p.getPrice()+"',";
    sql=sql+"'"+p.getYn()+"',";
    sql=sql+"'"+p.getNote()+"')";
    //获取对象
    DBservice dbservice=DBservice.getInstance();
    //调用方法执行sql语句
    dbservice.exeUpdateSql(sql);
	
}

public void update(Produce p) {
 String sql="update product set ";
 sql=sql+"name='"+p.getName()+"',";
 sql=sql+"lx='"+p.getLx()+"',";
 sql=sql+"price='"+p.getPrice()+"',";
 sql=sql+"yn='"+p.getYn()+"',";
 sql=sql+"note='"+p.getNote()+"',";
 sql=sql+"where id= "+p.getId();
 DBservice dbservice=DBservice.getInstance();
 dbservice.exeUpdateSql(sql);
}

public void delete(Produce p) {
	String sql="delete from product where id ="+p.getId();
	
	DBservice dbservice=DBservice.getInstance();
    dbservice.exeUpdateSql(sql);
}

public List query(String where) {
	 List result=new ArrayList();
	 DBservice dbservice=DBservice.getInstance();
	 String sql="select * from product ";
	 if(!"".equals(where)){
		 sql=sql+" where "+where;
	 }
	 Listlist=dbservice.executeSelect(sql);  
	 for(Map map:list){ 		  
	 Produce p=new Produce();
	 p.setId(Integer.parseInt( map.get("id").toString()));
	 p.setName(map.get("name").toString());
	 p.setLx(map.get("lx").toString());
	 p.setPrice(Integer.parseInt(map.get("price").toString()));
	 p.setYn(map.get("yn").toString());
	 p.setNote(map.get("note").toString());
	 result.add(p);
	 }
	return result;
}

}

7.创建一个com.product.service包,包下创建ProduceService 接口

 package com.product.service;

 import java.util.List;

import com.product.vo.Produce;

public  interface ProduceService {

public void add(Produce stu);

public void up(Produce stu);

public void delete(Integer id);
//增加了一个根据id查找产品的抽象方法
public Produce find(Integer id);

public List getlist(String where);

}

8.创建一个com.product.service.impl包,包下创建IProduceService类实现ProduceService 接口

package com.product.service.impl;

import java.util.List;
import com.product.dao.ProduceDao;
import com.product.dao.impl.IProduceDao;
import com.product.service.ProduceService;
import com.product.vo.Produce;

public class IProduceService implements ProduceService{
 ProduceDao dao=new IProduceDao();
 public void add(Produce p) {
	// TODO Auto-generated method stub
	dao.add(p);
}

public void up(Produce p) {
	// TODO Auto-generated method stub
	dao.update(p);
}

public void delete(Integer id) {
	// TODO Auto-generated method stub
	dao.delete(this.find(id));
}
//这个方法其实可以在dao层里完成实现在这直接调用,当然在这里也是可以完成实现的
public Produce find(Integer id) {
 String where= "id="+id;
 Listlist=dao.query(where);
 if(list.size()>0){
	return list.get(0);
 }else{
	return null;
 }
}

public List getlist(String where) {
	 		return dao.query(where);
}

}

9.创建一个com.product.servlet 包,包下创建ProductServlet 类实继承自HttpServlet类
该类是用来获取后台数据空中的数据,并且发送到前端页面中进行展示

package com.product.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class ProductServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
 	   throws ServletException, IOException {
       //这里重写doGet方法
	   //创建一个ProduceService对象
       ProduceService service=new IProduceService();    
       //调用 其中的方法进行查询全部数据
	   Listlist= service.getlist("");
	   //将集合list放在produce中进行发送
	   request.setAttribute("produce", list);
	   //请求转发到produce目录下的Pro.jsp中
       //pro.jsp该页面是用来展示后台数据库中的所有数据        
       request.getRequestDispatcher("produce/pro.jsp").forward(request, response);

}


  public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
      this.doGet(request, response);
}

}

10.创建一个com.product.servlet 包,包下创建AddProduceServlet 类实继承自HttpServlet 类

package com.product.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class AddProduceServlet extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {  
    this.doPost(request,response);
} 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
     //这里重写doPost方法
 
  //先设置字符集,防止出现乱码问题
	 response.setContentType("text/html");
	 response.setCharacterEncoding("UTF-8");
	 request.setCharacterEncoding("UTF-8");
	 //获取前端控件中的数据
   //由于数据库中表中的id设置为标识自增,不需要手动赋值
	 String name=request.getParameter("name");
     String lx=request.getParameter("lx");
     String price=request.getParameter("price");
     
     String yn=request.getParameter("yn");
     String note=request.getParameter("note");
      //调用ProduceService中的方法
        ProduceService  service=new  IProduceService();
        Produce  p=new Produce();		
		//将接收到的前端的值传入Produce对象中去
        p.setPrice(Integer.parseInt(price));
		p.setLx(lx);
		p.setName(name);
		p.setNote(note);
		p.setYn(yn); 
		//调用add方法将数据放到数据库中
		service.add(p);	
		//重定向(页面跳转)到ProduceServlet
		response.sendRedirect("ProductServlet");
	
}

}

11.创建一个com.product.servlet 包,包下创建FindProduceServlet类实继承自HttpServlet 类

package com.product.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class FindProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
    //获取id
	String id=request.getParameter("id");
	ProduceService service=new IProduceService();
    //调用方法传入获取的id
    Produce pro=service.find(Integer.parseInt(id));
    //将得到的数据放大produce中
	request.setAttribute("produce", pro);
	
    //转发到produce目录下的up.jsp进行展示	   
    request.getRequestDispatcher("produce/up.jsp").forward(request, response);
} 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
     this.doGet(request, response);
}

}

12.创建一个com.product.servlet 包,包下创建UpProduceServlet 类实继承自HttpServlet 类

package com.product.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;
import com.product.vo.Produce;

public class UpProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
   //牵扯到操作数据库要先设置字符集问题
 response.setContentType("text/html");		
 response.setCharacterEncoding("UTF-8");
 request.setCharacterEncoding("UTF-8");
 	 
	String id=request.getParameter("id");
	String name=request.getParameter("name");
	String lx=request.getParameter("lx");
	String price=request.getParameter("price");
	String yn=request.getParameter("yn");
	String Note=request.getParameter("note");
	
	ProduceService service=new IProduceService();
	Produce p=new Produce();
  //这里id不做修改,直接获取到后在方法后台数据库中
	p.setId(Integer.parseInt(id));
	p.setName(name);
	p.setLx(lx);
	p.setYn(yn);
	p.setPrice(Integer.parseInt(price));
	p.setNote(Note);
	//这里调用的是up方法
	service.up(p);	
//重定向		
response.sendRedirect("ProductServlet");
}	 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
        this.doGet(request, response);
	 
}

}

13.创建一个com.product.servlet 包,包下创建DelProduceServlet类实继承自HttpServlet 类

package com.product.servlet;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.product.service.ProduceService;
import com.product.service.impl.IProduceService;

public class DelProduceServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

	String id=request.getParameter("id"); 
    ProduceService service=new IProduceService();
	service.delete(Integer.parseInt(id));
	//重定向
	response.sendRedirect("ProductServlet");
 
}

 
public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
            this.doGet(request, response);
}

}

14创建一个 WebRoot下,创建一个produce文件夹放视图文件

在WebRoot下的WEB-INF下的web.xml中配置Servlet信息
Java Web 项目(后台管理系统)_第3张图片





This is the description of my J2EE component
This is the display name of my J2EE component
ProductServlet
com.product.servlet.ProductServlet


This is the description of my J2EE component
This is the display name of my J2EE component
FindProduceServlet
com.product.servlet.FindProduceServlet


This is the description of my J2EE component
This is the display name of my J2EE component
DelProduceServlet
com.product.servlet.DelProduceServlet


This is the description of my J2EE component
This is the display name of my J2EE component
AddProduceServlet
com.product.servlet.AddProduceServlet


This is the description of my J2EE component
This is the display name of my J2EE component
UpProduceServlet
com.product.servlet.UpProduceServlet







ProductServlet
/ProductServlet


FindProduceServlet
/FindProduceServlet


DelProduceServlet
/DelProduceServlet


AddProduceServlet
/AddProduceServlet


UpProduceServlet
/UpProduceServlet



 

ProductServlet


Pro.jsp页面是用来展示所有后台数据的
Produce.jsp是增减产品信息的页面,有前端页面点击事件,进行页面跳转.
up.jsp页面是修改数据页面

Pro.jsp

<%@ page language="java" import="java.util.*,com.product.vo.Produce" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



 


My JSP 'pro.jsp' starting page



    



<%List list=(List)request.getAttribute("produce"); %>
  


This is my JSP page. 

商品展示

<% int i=0; for(Produce pro :list){ i=i+1; %> <%}%>
序号 商品名称 商品类型 商品价格 是否畅销 说明 增加
<%=i %> <%= pro.getName() %> <%=pro.getLx() %> <%= pro.getPrice() %> <%=pro.getYn() %> <%=pro.getNote() %> 修改 删除

produce.jsp 用于增加产品信息的页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






My JSP 'produce.jsp' starting page



    









增加產品信息

产品名称:
产品类型:
产品价钱:
是否畅销:   是     否
产品说明:


   

up.jsp 修改产品信息的页面

<%@ page language="java" import="java.util.*,com.product.vo.Produce" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






My JSP 'up.jsp' starting page



    



<% Produce p=(Produce)request.getAttribute("produce"); %>



修改产品信息

產品名稱
產品類型
產品價格
是否暢銷 <%if("是".equals(p.getYn())){%> 是 <%}else{%> 是 <%}%> <%if("否".equals(p.getYn())){%> 否 <%}else{%> 否 <%}%>
商品說明


15 .输入http://localhost:端口号/工程名/对应的Servlet类 or 某.jsp页面
例如: 输入http://localhost:9999/Product/ProductServlet

当然这里也可以直接访问工程名:http://localhost:9999/Product 在web.xml设置了默认跳转到ProductServlet

这里是展示所有产品数据的信息
Java Web 项目(后台管理系统)_第4张图片

点击添加按钮
Java Web 项目(后台管理系统)_第5张图片

跳转到添加产品信息的页面
Java Web 项目(后台管理系统)_第6张图片

添加相应的产品信息
Java Web 项目(后台管理系统)_第7张图片

信息添加成功
Java Web 项目(后台管理系统)_第8张图片
单击修改按钮
Java Web 项目(后台管理系统)_第9张图片
Java Web 项目(后台管理系统)_第10张图片
修改产品信息
Java Web 项目(后台管理系统)_第11张图片
修改成功

Java Web 项目(后台管理系统)_第12张图片

点击删除按钮

Java Web 项目(后台管理系统)_第13张图片
删除成功

Java Web 项目(后台管理系统)_第14张图片

你可能感兴趣的:(javaweb,Servlet,数据库,java,sql,html)