Test_Shop_Rjy

数据库层

//创建管理员登录表
create table client(
cli_id  number  primary  key,//用户id
cli_name varchar2(32),      
cli_password varchar2(500),
cli_realname varchar2(32),
cli_create_date  date default sysdate,
cli_salt varchar2(32)
);
create sequence seq_client;//创建索引
select seq_client.currval from dual;
//创建商品展示功能表
create table product(
pro_id  number  primary  key,
pro_name varchar2(32),
pro_brief varchar2(32),
pro_price number(8,2),
pro_count number,
pro_status  number(1),
pro_create_date  date default sysdate
);
create  sequence seq_product;//创建索引

Dao层访问页面

ClientDao.java //接口

package com.gxy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.gxy.entity.Client;


public interface ClientDao {
	//查询账号或密码是否存在
 public  List<Client> 	selectBookList(@Param("cilName")String  cliName,@Param("cliPassword")String cliPassword);
	
}

ProductDao.java//接口

package com.gxy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.gxy.entity.Product;

public interface ProductDao {
   //查询商品
	public List<Product> selectproductList();
	//插入商品
	 public int insertproduct(@Param("proName")String proName,
				@Param("proBrief")String proBrief,
				@Param("proPrice")double proPrice,
				@Param("proCount")int proCount,
				@Param("proStatus")int proStatus);
	 //根据id删除商品
	public int delectProduct(@Param("proId")int  proID);
	//根据id修改商品
	public int  updateProduct(
			@Param("proId")int  proID,
			@Param("proName")String proName,
			@Param("proBrief")String proBrief,
			@Param("proPrice")double proPrice);
	//根据id查询数据
	public Product selectupdateproductList(@Param("proId")int  proId);
	//使用数组进行批量删除
	public  int	delectbatchProduct(@Param("ids") String[]  ids);
	//修改状态
	public  int updateproStatus(@Param("proId")int  proId);
}

ClientMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gxy.dao.ClientDao"> <!-- 找到dao层类对象 -->
	     <!-- 通用查询映射结果 -->
	    <resultMap id="BaseResultMap" type="com.gxy.entity.Client">
	        <id column="cli_id" property="cliId" />
	        <result column="cli_name" property="cilName" />
	        <result column="cli_password" property="cliPassword" />
	        <result column="cli_realname" property="cliRealName" />
	        <result column="cli_create_date" property="cliCreateDate" />
	        <result column="cli_salt" property="cliSalt" />
	    </resultMap>
    	
    	
    	<!-- id全局唯一 -->
    	<!-- 查询list -->
    	<select id="selectBookList" resultMap="BaseResultMap">
    		select * from client  where cli_name=#{cilName} and cli_password=#{cliPassword}
    	</select>
</mapper>

ProductMapper.xm;

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gxy.dao.ProductDao">
		
	    <!-- 通用查询映射结果 -->
	    <resultMap id="BaseResultMap6" type="com.gxy.entity.Product">
	        <id column="pro_id" property="proId" />
	        <result column="pro_name" property="proName" />
	        <result column="pro_brief" property="proBrief" />
	        <result column="pro_price" property="proPrice" />
	        <result column="pro_count" property="proCount" />
	        <result column="pro_status" property="proStatus" />
	        <result column="pro_create_date" property="proCreateDate" />
	    </resultMap>
    	
    	
    	<!-- 查询list -->
    	<select id="selectproductList" resultMap="BaseResultMap6">
    		select * from product
    	</select>
    	<!-- 查询list -->
    	<select id="selectupdateproductList" resultMap="BaseResultMap6">
    		select * from product  where pro_id=#{proId,jdbcType=INTEGER}
    	</select>
    		<!-- 插入商品 -->
    	<insert id="insertproduct">
    	insert into product (pro_id,pro_name,pro_brief,pro_price,pro_count,pro_status) 
    	values(seq_product.nextval,#{proName,jdbcType=VARCHAR},#{proBrief,jdbcType=VARCHAR},#{proPrice,jdbcType=INTEGER},#{proCount,jdbcType=INTEGER},#{proStatus,jdbcType=INTEGER})
    	</insert>
    	<!--根据id 删除 商品-->
    	<delete id="delectProduct">
    		delete from product where pro_id=#{proId,jdbcType=INTEGER}
    </delete>
    <!-- 根据id修改商品 -->
    <update id="updateProduct">
     update product set pro_name=#{proName,jdbcType=VARCHAR},pro_brief=#{proBrief,jdbcType=VARCHAR},pro_price=#{proPrice,jdbcType=INTEGER} where pro_id=#{proId,jdbcType=INTEGER}
    </update>
    <!-- 批量删除, 这是一个动态sql -->
    	<delete id="delectbatchProduct">
    		delete from product  where pro_id in
    	<foreach collection="ids" open="(" item="id" close=")" separator="," >#{id}</foreach>
    </delete>
    <update id="updateproStatus">
     update product set pro_status=mod(pro_status+1,2) where pro_id=#{proId,jdbcType=INTEGER}
    </update>
</mapper>

实体类entity

Client.java

package com.gxy.entity;

import java.util.Date;

public class Client {
private int cliId;
private String cilName;
private String cliPassword;
private String cliRealName;
private  Date cliCreateDate;
private String cliSalt;
public int getCliId() {
	return cliId;
}
public void setCliId(int cliId) {
	this.cliId = cliId;
}
public String getCilName() {
	return cilName;
}
public void setCilName(String cilName) {
	this.cilName = cilName;
}
public String getCliPassword() {
	return cliPassword;
}
public void setCliPassword(String cliPassword) {
	this.cliPassword = cliPassword;
}
public String getCliRealName() {
	return cliRealName;
}
public void setCliRealName(String cliRealName) {
	this.cliRealName = cliRealName;
}
public Date getCliCreateDate() {
	return cliCreateDate;
}
public void setCliCreateDate(Date cliCreateDate) {
	this.cliCreateDate = cliCreateDate;
}
public String getCliSalt() {
	return cliSalt;
}
public void setCliSalt(String cliSalt) {
	this.cliSalt = cliSalt;
}
public Client(int cliId, String cilName, String cliPassword, String cliRealName, Date cliCreateDate, String cliSalt) {
	super();
	this.cliId = cliId;
	this.cilName = cilName;
	this.cliPassword = cliPassword;
	this.cliRealName = cliRealName;
	this.cliCreateDate = cliCreateDate;
	this.cliSalt = cliSalt;
}
public Client() {
	super();
}
@Override
public String toString() {
	return "Client [cliId=" + cliId + ", cilName=" + cilName + ", cliPassword=" + cliPassword + ", cliRealName="
			+ cliRealName + ", cliCreateDate=" + cliCreateDate + ", cliSalt=" + cliSalt + "]";
}

 
}

Product.java

package com.gxy.entity;

import java.util.Date;

public class Product {
private  int proId;
private  String proName;
private  String proBrief;
private  double proPrice;
private   int proCount;
private  int proStatus;
private  Date proCreateDate;
public int getProId() {
	return proId;
}
public void setProId(int proId) {
	this.proId = proId;
}
public String getProName() {
	return proName;
}
public void setProName(String proName) {
	this.proName = proName;
}
public String getProBrief() {
	return proBrief;
}
public void setProBrief(String proBrief) {
	this.proBrief = proBrief;
}
public double getProPrice() {
	return proPrice;
}
public void setProPrice(double proPrice) {
	this.proPrice = proPrice;
}
public int getProCount() {
	return proCount;
}
public void setProCount(int proCount) {
	this.proCount = proCount;
}
public int getProStatus() {
	return proStatus;
}
public void setProStatus(int proStatus) {
	this.proStatus = proStatus;
}
public Date getProCreateDate() {
	return proCreateDate;
}
public void setProCreateDate(Date proCreateDate) {
	this.proCreateDate = proCreateDate;
}
public Product(int proId, String proName, String proBrief, double proPrice, int proCount, int proStatus,
		Date proCreateDate) {
	super();
	this.proId = proId;
	this.proName = proName;
	this.proBrief = proBrief;
	this.proPrice = proPrice;
	this.proCount = proCount;
	this.proStatus = proStatus;
	this.proCreateDate = proCreateDate;
}
public Product() {
	super();
}
@Override
public String toString() {
	return "Product [proId=" + proId + ", proName=" + proName + ", proBrief=" + proBrief + ", proPrice=" + proPrice
			+ ", proCount=" + proCount + ", proStatus=" + proStatus + ", proCreateDate=" + proCreateDate + "]";
}

}

拦截器略过

service层

ClientService.java//接口,注意:需要与dao层方法相对应,可返回值不同
本人较懒,如需要其他返回值,请自行修改

package com.gxy.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.gxy.entity.Client;

public interface ClientService {

	//查询账号或密码是否存在
	 public  List<Client> 	selectBookList(@Param("cilName")String  cliName,@Param("cliPassword")String cliPassword);
}

ProductService.java//接口

package com.gxy.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.gxy.entity.Product;

public interface ProductService {
	//查询商品
		public List<Product> selectproductList();
		//插入商品
		 public int insertproduct(@Param("proName")String proName,
					@Param("proBrief")String proBrief,
					@Param("proPrice")double proPrice,
					@Param("proCount")int proCount,
					@Param("proStatus")int proStatus);
		//根据id删除商品
			public int delectProduct(@Param("proId")int  proID);
			//根据id修改商品
			public int  updateProduct(
					@Param("proId")int  proID,
					@Param("proName")String proName,
					@Param("proBrief")String proBrief,
					@Param("proPrice")double proPrice);
			//根据id查询数据
			public Product selectupdateproductList(@Param("proId")int  proId);
			//使用数组进行批量删除
			public  int	delectbatch(String[]  ids);
			//修改状态
			public  int updateproStatus(@Param("proId")int  proId);
		
}

serviceImpl具体实现类

ClientServiceImpl.java//登录层

package com.gxy.service.Impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;


import com.gxy.dao.ClientDao;

import com.gxy.entity.Client;
import com.gxy.service.ClientService;
import com.gxy.util.MyBatisUtil;


public class ClientServiceImpl implements ClientService{

	@Override
	public List<Client> selectBookList(String cliName, String cliPassword) {
		// TODO Auto-generated method stub
				SqlSession session = MyBatisUtil.getSqlSession();
				ClientDao clientDao = session.getMapper(ClientDao.class);
				//dao层正确的方法
				List<Client> list = clientDao.selectBookList(cliName, cliPassword);
			
		return list;
	}

}

ProductServiceImpl.java //商品层实现类

package com.gxy.service.Impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;


import com.gxy.dao.ProductDao;
import com.gxy.entity.Product;
import com.gxy.service.ProductService;
import com.gxy.util.MyBatisUtil;

public class ProductServiceImpl implements ProductService{

	@Override
	public List<Product> selectproductList() {
		// TODO Auto-generated method stub
		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		//dao层正确的方法
		List<Product> list = productDao.selectproductList();
	
return list;
	}

	@Override
	public int insertproduct(String proName, String proBrief, double proPrice, int proCount, int proStatus) {
		// TODO Auto-generated method stub
		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		//dao层正确的方法
		int list = productDao.insertproduct(proName, proBrief, proPrice, proCount, proStatus);
		//事务并不是主动提交而是需要手动提交
				session.commit();
				MyBatisUtil.close();
		return list;
	}

	@Override
	public int delectProduct(int proID) {
		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		//dao层正确的方法
		int list = productDao.delectProduct(proID);
		//事务并不是主动提交而是需要手动提交
		session.commit();
		MyBatisUtil.close();
		return list;
	}

	@Override
	public int updateProduct(int proID, String proName, String proBrief, double proPrice) {
		// TODO Auto-generated method stub
		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		//dao层正确的方法
		int list = productDao.updateProduct(proID, proName, proBrief, proPrice);
		session.commit();
		MyBatisUtil.close();
		return list;
	}

	@Override
	public Product selectupdateproductList(int proId) {
		// TODO Auto-generated method stub
		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		//dao层正确的方法
		Product list = productDao.selectupdateproductList(proId);
		session.commit();
		MyBatisUtil.close();
		return list;
	}

	@Override
	public int delectbatch(String[] ids) {

		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		int i = productDao.delectbatchProduct(ids);
		session.commit();
		MyBatisUtil.close();
		return i;
	}

	@Override
	public int updateproStatus(int proId) {
		// TODO Auto-generated method stub

		SqlSession session = MyBatisUtil.getSqlSession();
		ProductDao productDao = session.getMapper(ProductDao.class);
		int i = productDao.updateproStatus(proId);
		session.commit();
		MyBatisUtil.close();
		return i;
	}



	}



Servlet层,与jsp网页进行交互的地方

ServletLogin.java //进行登录页面

package com.gxy.servlet;

import java.io.IOException;
import java.util.List;

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 javax.servlet.http.HttpSession;

import com.gxy.entity.Client;
import com.gxy.entity.Product;
import com.gxy.service.ClientService;
import com.gxy.service.ProductService;
import com.gxy.service.Impl.ClientServiceImpl;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class ServletLogin
 */
@WebServlet("/client/login.action")
public class ServletLogin extends HttpServlet {
	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//接收输入的账号和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		ClientService clientServiceImpl = new ClientServiceImpl();
		List<Client> list = clientServiceImpl.selectBookList(username, password);
		HttpSession session = request.getSession();
		if(list.size()>0) {
			String realName=list.get(0).getCliRealName();
			session.setAttribute("realName", realName);
			response.sendRedirect(request.getContextPath()+"/selectProductServlet");
			//request.getContextPath();获取当前路径
		}else {
			session.setAttribute("errorMsg", "账号或密码错误");
			response.sendRedirect("../login.jsp");
		}
		
	}

}

selectProductServlet.java//登录成功后跳转到商品展示页面

package com.gxy.servlet;

import java.io.IOException;
import java.util.List;

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 javax.servlet.http.HttpSession;

import com.gxy.entity.Product;
import com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class selectProductServlet
 */
@WebServlet("/selectProductServlet")
public class selectProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ProductService productServiceImpl = new ProductServiceImpl();
		List<Product> list = productServiceImpl.selectproductList();
		HttpSession session = request.getSession();
		session.setAttribute("list", list);
		System.out.println(list);
		request.getRequestDispatcher("/admin/product/ProductList.jsp").forward(request, response);
	}

}

insertProduct.java//进行商品的添加功能

package com.gxy.servlet;

import java.io.IOException;
import java.util.List;

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 com.gxy.entity.Product;
import com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class insertProduct
 */
@WebServlet("/product/productAddAction")
public class insertProduct extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public insertProduct() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String proName = request.getParameter("proName");
		String proBrief = request.getParameter("proBrief");
		String Price = request.getParameter("proPrice");
		double  proPrice= Double.parseDouble(Price);
		String Count = request.getParameter("proCount");
		int proCount = Integer.parseInt(Count);
		//String Status = request.getParameter("proStatus");
		//int proStatus = Integer.parseInt(Status);
		ProductService productServiceImpl = new ProductServiceImpl();
		 productServiceImpl.insertproduct(proName, proBrief, proPrice, proCount,1);
			response.sendRedirect(request.getContextPath()+"/selectProductServlet");
	}

}

updadateProduct.java //进行商品的修改

package com.gxy.servlet;

import java.io.IOException;
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 com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class updateProduct
 * 进行修改操作
 */
@WebServlet("/product/productUpdateAction")
public class updateProduct extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String proId = request.getParameter("proId").trim();
		int proID = Integer.valueOf(proId).intValue();
		String proName = request.getParameter("proName");
		String proBrief = request.getParameter("proBrief");
		String Price = request.getParameter("proPrice");
		double  proPrice= Double.parseDouble(Price);
		ProductService productServiceImpl = new ProductServiceImpl();
		productServiceImpl.updateProduct(proID, proName, proBrief, proPrice);
		response.sendRedirect(request.getContextPath()+"/selectProductServlet");
	}

}

productSelectByIdservlet.java//进行修改前先进行获取id并将数据存放到页面

package com.gxy.servlet;

import java.io.IOException;
import java.util.List;

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 javax.servlet.http.HttpSession;

import com.gxy.entity.Product;
import com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class productSelectByIdServlet
 * 修改
 */
@WebServlet("/product/productSelectByIdAction")
public class productSelectByIdServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String proId = request.getParameter("proId").trim();
		int proID = Integer.valueOf(proId).intValue();
		System.out.println(proID);
		ProductService productServiceImpl = new ProductServiceImpl();
		Product list = productServiceImpl.selectupdateproductList(proID);
		System.out.println(list);
		HttpSession session = request.getSession();
		session.setAttribute("product", list);
		request.getRequestDispatcher("/admin/product/updateProduct.jsp").forward(request, response);
		
		
	}

}

productDeleteServlet.java//进行根据id删除商品

package com.gxy.servlet;

import java.io.IOException;
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 com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class productDeleteServlet
 * 删除商品
 */

@WebServlet("/product/productDeleteAction")
public class productDeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String proId = request.getParameter("proId");
		int proID = Integer.parseInt(proId);
		ProductService productServiceImpl = new ProductServiceImpl();
		productServiceImpl.delectProduct(proID);
		response.sendRedirect(request.getContextPath()+"/selectProductServlet");
	}

}

productBatchDeleteServlet.java//进行批量删除,并有两种方法

package com.gxy.servlet;

import java.io.IOException;
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 com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;

/**
 * Servlet implementation class productBatchDeleteServlet
 * 自己的方法进行批量删除操作
 */
@WebServlet("/product/productBatchDeleteAction")
public class productBatchDeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**循环删除会造成多次请求,浪费资源
		 *  TODO Auto-generated method stub
		String[] Id = request.getParameterValues("id");//过去网页id数据
		ProductService productServiceImpl = new ProductServiceImpl();
		System.out.println(Id);	//使用字符串分割保存到数组
		for(int i = 0; i<Id.length;i++) {
			int id=Integer.parseInt(Id[i]);
			 productServiceImpl.delectProduct(id);
		}
		**/
		String[] ids = request.getParameterValues("id");
		ProductService productServiceImpl = new ProductServiceImpl();
		productServiceImpl.delectbatch(ids);
		response.sendRedirect(request.getContextPath()+"/selectProductServlet");
	}

}

ProductServletStatus.java//进行商品状态的修改,1代表上架;0代表下架。

package com.gxy.servlet;

import java.io.IOException;

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 com.gxy.service.ProductService;
import com.gxy.service.Impl.ProductServiceImpl;
import com.sun.net.httpserver.HttpServer;
@WebServlet("/product/productChangeStatusAction")
public class ProductServletStatus extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String proId = request.getParameter("proId");
		int id = Integer.parseInt(proId);
		ProductService productServiceImpl = new ProductServiceImpl();
		int i = productServiceImpl.updateproStatus(id);
		System.out.println(i);
		response.sendRedirect(request.getContextPath()+"/selectProductServlet");
	}
	

}

Util层进行工具的存放

MyBatisUtil.java

package com.gxy.util;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	
	//保证service层 进行多次dao操作,公用一个SqlSession对象
	private static ThreadLocal<SqlSession>  tl = new ThreadLocal<SqlSession>();
	
	static{
		try {
			String resouce = "mybatis-config.xml";  //代表总配置文件的路径
			InputStream is = Resources.getResourceAsStream(resouce);//使用输入流读取配置文件
			factory = new SqlSessionFactoryBuilder().build(is);//facotry只需要创建一个
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSqlSession(){
		SqlSession session = tl.get();
		if(session == null) {
			session = factory.openSession();
			tl.set(session);
		}
		return session;
	}

	
	public static void close(){
		SqlSession session = tl.get();
		if(session != null){
			session.close();
			tl.set(null);
		}
	}
			
}

mybatis-config.xml 配置文件

注:需要与根目录同一路径

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 开启二级缓存 -->
	<settings>
	<setting name="cacheEnabled" value="true"/>
	</settings>
	<!-- 配置数据库连接信息 -->
	<environments default="development">
		<environment id="development">
				<transactionManager type="JDBC"/>
				<dataSource type="POOLED">
					<property name="driver" value="oracle.jdbc.OracleDriver"/>
					<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
					<property name="username" value="hr"/>
					<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 配置mapper文件的路径 -->
	<mappers>
		<mapper resource="com/gxy/dao/ClientMapper.xml"/>
		<mapper resource="com/gxy/dao/ProductMapper.xml"/>
	</mappers>
	
	
	
</configuration>

jsp数据

addProduct.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

	<head>
		<title>添加商品</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css" href="../../css/style.css" />
	</head>

	<body>
		<div id="wrap">
			<div id="top_content">
				<div id="header">
					<div id="rightheader">
						<p>
							2014/6/25
							<br />
						</p>
					</div>
					<div id="topheader">
						<h1 id="title">
								<a href="#">商品管理</a>
							</h1>
					</div>
					<div id="navigation">
					</div>
				</div>
				<div id="content">
					<p id="whereami">
					</p>
					<h1>
						添加商品:
					</h1>
					<form action="${pageContext.request.contextPath }/product/productAddAction" method="post">
						<table cellpadding="0" cellspacing="0" border="0" class="form_table">
							<tr>
								<td valign="middle" align="right">
									商品名:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" name="proName" />
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									价格:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" name="proPrice" />()
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									库存:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" name="proCount" />()
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									商品描述:
								</td>
								<td valign="middle" align="left">
									<textarea rows="4" cols="30" class="inputgri" name="proBrief" tabindex="0"></textarea>
								</td>
							</tr>
						</table>
						<p>
							<input type="submit" class="button" value="确认" />
						</p>
					</form>
				</div>
			</div>
			<div id="footer">
				<div id="footer_bg">
					www.zparkhr.com.cn
				</div>
			</div>
		</div>
	</body>

</html>

ProductList.jsp

<%@page import="com.gxy.entity.Product"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>商品列表</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<!--引用CSS样式  -->
		<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/style.css" />
	</head>
	<body>
		
							
		<div id="wrap">
			<div id="top_content"> 
				<div id="header">
					<div id="rightheader">
						<p>
							<fmt:formatDate value="${sessionScope.date }" pattern="yyyy-MM-dd HH:mm:ss" />
							<br />
						</p>
					</div>
					<div id="topheader">
						<h1 id="title">
							<a href="#">商品管理</a>
						</h1>
					</div>
					<div id="navigation">
					</div>
				</div>
				<div id="content">
					<p id="whereami">
					</p>
					<h1>
						${realName },欢迎您!
					</h1>
					<form action="${pageContext.request.contextPath }/product/productBatchDeleteAction" method="post">
					<table class="table">
						<tr class="table_header">
							<td>
								<input type="submit" value="删除选中" />
							</td>
							<td>
								商品名
							</td>
							<td>
								单价
							</td>
							<td>库存</td>
							<td>状态</td>
							<td>添加时间</td>
							<td>
								商品描述
							</td>
							<td>
								操作
							</td>
						</tr>
						<!--商品查询 接受action数据 循环输出 -->
							<%-- <%
							List<Product> list = (List<Product>)request.getAttribute("list");
							for(Product p : list){
							 %> --%>
							 <c:forEach var='s' items="${sessionScope.list }">
							
							 
						<tr class="row1">
							<td>
								<input type="checkbox" name="id" value="${s.proId}" />
							</td>	
							<td>
								${s.proName}
							</td>
							<td>
								${s.proPrice}
							</td>
							<td>${s.proCount}</td>
							<td>
							<c:set var='v' value="<font color='red'>下架</font>" scope='page' />
							${s.proStatus eq 1?"上架": v}
							</td>
							<td>${s.proCreateDate}</td>
							<td>
								${s.proBrief}
							</td>
							
							<td>
								<a href="${pageContext.request.contextPath }/product/productDeleteAction?proId=${s.proId}">删除</a>&nbsp;
								<a href="${pageContext.request.contextPath }/product/productSelectByIdAction?proId=${s.proId}">修改</a>&nbsp;
								<a href="${pageContext.request.contextPath }/product/productChangeStatusAction?proId=${s.proId}">${s.proStatus eq 1?"下架":"上架"}</a>
							</td>
						</tr>
						</c:forEach>
				
					</table>
					</form>
					<p>
						<a href="${pageContext.request.contextPath }/admin/product/addProduct.jsp" class="button">添加商品</a>
					</p>
				</div>
			</div>
			<div id="footer">
				<div id="footer_bg">
				www.zparkhr.com.cn
				</div>
			</div>
		</div>
	</body>
</html>

updateProduct.jsp

<%-- <%@page import="com.gxy.service.ProductServiceImpl"%> --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*,com.gxy.entity.Product" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>更新商品</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css"
			href="${pageContext.request.contextPath }/css/style.css" />
	</head>

	<body>
		<div id="wrap">
			<div id="top_content">
					<div id="header">
						<div id="rightheader">
							<p>
								2014/6/25
								<br />
							</p>
						</div>
						<div id="topheader">
							<h1 id="title">
								<a href="#">商品管理</a>
							</h1>
						</div>
						<div id="navigation">
						</div>
					</div>
				<div id="content">
					<p id="whereami">
					</p>
					<h1>
						更新商品:
					</h1>
					<!-- 调用service层的方法,根据ID查询图书对象
					id通过get方式得到 -->
				
					
					
					<form action="${pageContext.request.contextPath }/product/productUpdateAction" method="post">
						<table cellpadding="0" cellspacing="0" border="0"
							class="form_table">
							<tr>
								<td valign="middle" align="right" style="display:none">
									id:
								</td>
								<td valign="middle" align="left"> 
									<input type="text" class="inputgri" name="proId" value="${product.proId }" 
									readonly="readonly" style="display:none"/>
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									商品名:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" name="proName" value="${product.proName }"/>
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									价格:
								</td>
								<td valign="middle" align="left">
									<input type="text" class="inputgri" name="proPrice" value="${product.proPrice }"/>
								</td>
							</tr>
							<tr>
								<td valign="middle" align="right">
									商品描述:
								</td>
								<td valign="middle" align="left">
									<textarea rows="4" cols="30" class="inputgri" name="proBrief" tabindex="0">${product.proBrief }</textarea>
								</td>
							</tr>
						</table>
						<p>
							<input type="submit" class="button" value="确认" />
						</p>
					</form>
				</div>
			</div>
			<div id="footer">
				<div id="footer_bg">
					www.zparkhr.com.cn
				</div>
			</div>
		</div>
	</body>
</html>

所需要jar包有

在这里插入图片描述

文件路径图

在这里插入图片描述
在这里插入图片描述
启用缓存功能

	<cache></cache>
	如何需要使用缓存请在Mapper.xml使用
	还需要在实体类里加上
	implements Serializable
	并把log4j.properties添加到根目录下,并添加相应的jar包

log4j.properties

# rootLogger\u662F\u6240\u6709\u65E5\u5FD7\u7684\u6839\u65E5\u5FD7,\u4FEE\u6539\u8BE5\u65E5\u5FD7\u5C5E\u6027\u5C06\u5BF9\u6240\u6709\u65E5\u5FD7\u8D77\u4F5C\u7528



#===================================1.\u8F93\u51FA\u7EA7\u522B\u7684\u79CD\u7C7B===================================

#\u914D\u7F6E\u6839Logger\uFF0C\u5176\u8BED\u6CD5\u4E3A\uFF1A 
#log4j.rootLogger = [level],appenderName,appenderName2,... 
#level\u662F\u65E5\u5FD7\u8BB0\u5F55\u7684\u4F18\u5148\u7EA7\uFF0C\u5206\u4E3AOFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL 
#Log4j\u5EFA\u8BAE\u53EA\u4F7F\u7528\u56DB\u4E2A\u7EA7\u522B\uFF0C\u4F18\u5148\u7EA7\u4ECE\u4F4E\u5230\u9AD8\u5206\u522B\u662FDEBUG,INFO,WARN,ERROR 

#1.\u8F93\u51FA\u7EA7\u522B\u7684\u79CD\u7C7B
#ERROR\u3001WARN\u3001INFO\u3001DEBUG
#ERROR \u4E3A\u4E25\u91CD\u9519\u8BEF \u4E3B\u8981\u662F\u7A0B\u5E8F\u7684\u9519\u8BEF
#WARN \u4E3A\u4E00\u822C\u8B66\u544A\uFF0C\u6BD4\u5982session\u4E22\u5931
#INFO \u4E3A\u4E00\u822C\u8981\u663E\u793A\u7684\u4FE1\u606F\uFF0C\u6BD4\u5982\u767B\u5F55\u767B\u51FA
#DEBUG \u4E3A\u7A0B\u5E8F\u7684\u8C03\u8BD5\u4FE1\u606F

#\u901A\u8FC7\u5728\u8FD9\u91CC\u5B9A\u4E49\u7684\u7EA7\u522B\uFF0C\u60A8\u53EF\u4EE5\u63A7\u5236\u5230\u5E94\u7528\u7A0B\u5E8F\u4E2D\u76F8\u5E94\u7EA7\u522B\u7684\u65E5\u5FD7\u4FE1\u606F\u7684\u5F00\u5173 
#\u6BD4\u5982\u5728\u8FD9\u91CC\u5B9A\u4E49\u4E86INFO\u7EA7\u522B\uFF0C\u5219\u5E94\u7528\u7A0B\u5E8F\u4E2D\u6240\u6709DEBUG\u7EA7\u522B\u7684\u65E5\u5FD7\u4FE1\u606F\u5C06\u4E0D\u88AB\u6253\u5370\u51FA\u6765 
#appenderName\u5C31\u662F\u6307\u5B9A\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u54EA\u4E2A\u8F93\u51FA\u6E90\uFF0C\u81EA\u5DF1\u5B9A\u4E49\u7684\u540D\u5B57\uFF0C\u53EB\u4EC0\u4E48\u90FD\u65E0\u6240\u8C13\u3002\u53EF\u540C\u65F6\u6307\u5B9A\u591A\u4E2A\u8F93\u51FA\u76EE\u7684 

#\u4E0B\u9762\u7684\u5C5E\u6027\u914D\u7F6E\u4E2D,\u6240\u6709\u65E5\u5FD7\u7684\u8F93\u51FA\u7EA7\u522B\u662Finfo,
# 全局设置
log4j.rootLogger=debug,console,stdout


#===================================2.\u914D\u7F6E\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u76EE\u7684\u5730appender===================================
#2.\u914D\u7F6E\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u76EE\u7684\u5730
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#1.org.apache.log4j.ConsoleAppender\uFF08\u63A7\u5236\u53F0\uFF09
#2.org.apache.log4j.FileAppender\uFF08\u6587\u4EF6\uFF09
#3.org.apache.log4j.DailyRollingFileAppender\uFF08\u6BCF\u5929\u4EA7\u751F\u4E00\u4E2A\u65E5\u5FD7\u6587\u4EF6\uFF09
#4.org.apache.log4j.RollingFileAppender\uFF08\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6\uFF09
#5.org.apache.log4j.WriterAppender\uFF08\u5C06\u65E5\u5FD7\u4FE1\u606F\u4EE5\u6D41\u683C\u5F0F\u53D1\u9001\u5230\u4EFB\u610F\u6307\u5B9A\u7684\u5730\u65B9\uFF09


#1)ConsoleAppender\u9009\u9879\u5C5E\u6027 
# -Threshold = DEBUG:\u6307\u5B9A\u65E5\u5FD7\u6D88\u606F\u7684\u8F93\u51FA\u6700\u4F4E\u5C42\u6B21 
# -ImmediateFlush = TRUE:\u9ED8\u8BA4\u503C\u662Ftrue,\u6240\u6709\u7684\u6D88\u606F\u90FD\u4F1A\u88AB\u7ACB\u5373\u8F93\u51FA 
# -Target = System.err:\u9ED8\u8BA4\u503CSystem.out,\u8F93\u51FA\u5230\u63A7\u5236\u53F0(err\u4E3A\u7EA2\u8272,out\u4E3A\u9ED1\u8272) 
# 
#2)FileAppender\u9009\u9879\u5C5E\u6027 
# -Threshold = INFO:\u6307\u5B9A\u65E5\u5FD7\u6D88\u606F\u7684\u8F93\u51FA\u6700\u4F4E\u5C42\u6B21 
# -ImmediateFlush = TRUE:\u9ED8\u8BA4\u503C\u662Ftrue,\u6240\u6709\u7684\u6D88\u606F\u90FD\u4F1A\u88AB\u7ACB\u5373\u8F93\u51FA 
# -File = C:\log4j.log:\u6307\u5B9A\u6D88\u606F\u8F93\u51FA\u5230C:\log4j.log\u6587\u4EF6 
# -Append = FALSE:\u9ED8\u8BA4\u503Ctrue,\u5C06\u6D88\u606F\u8FFD\u52A0\u5230\u6307\u5B9A\u6587\u4EF6\u4E2D\uFF0Cfalse\u6307\u5C06\u6D88\u606F\u8986\u76D6\u6307\u5B9A\u7684\u6587\u4EF6\u5185\u5BB9 
# -Encoding = UTF-8:\u53EF\u4EE5\u6307\u5B9A\u6587\u4EF6\u7F16\u7801\u683C\u5F0F 
# 
#3)DailyRollingFileAppender\u9009\u9879\u5C5E\u6027 
# -Threshold = WARN:\u6307\u5B9A\u65E5\u5FD7\u6D88\u606F\u7684\u8F93\u51FA\u6700\u4F4E\u5C42\u6B21 
# -ImmediateFlush = TRUE:\u9ED8\u8BA4\u503C\u662Ftrue,\u6240\u6709\u7684\u6D88\u606F\u90FD\u4F1A\u88AB\u7ACB\u5373\u8F93\u51FA 
# -File = C:\log4j.log:\u6307\u5B9A\u6D88\u606F\u8F93\u51FA\u5230C:\log4j.log\u6587\u4EF6 
# -Append = FALSE:\u9ED8\u8BA4\u503Ctrue,\u5C06\u6D88\u606F\u8FFD\u52A0\u5230\u6307\u5B9A\u6587\u4EF6\u4E2D\uFF0Cfalse\u6307\u5C06\u6D88\u606F\u8986\u76D6\u6307\u5B9A\u7684\u6587\u4EF6\u5185\u5BB9 
# -DatePattern='.'yyyy-ww:\u6BCF\u5468\u6EDA\u52A8\u4E00\u6B21\u6587\u4EF6,\u5373\u6BCF\u5468\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6\u3002\u8FD8\u53EF\u4EE5\u6309\u7528\u4EE5\u4E0B\u53C2\u6570: 
#              '.'yyyy-MM:\u6BCF\u6708 
#              '.'yyyy-ww:\u6BCF\u5468 
#              '.'yyyy-MM-dd:\u6BCF\u5929 
#              '.'yyyy-MM-dd-a:\u6BCF\u5929\u4E24\u6B21 
#              '.'yyyy-MM-dd-HH:\u6BCF\u5C0F\u65F6 
#              '.'yyyy-MM-dd-HH-mm:\u6BCF\u5206\u949F 
# -Encoding = UTF-8:\u53EF\u4EE5\u6307\u5B9A\u6587\u4EF6\u7F16\u7801\u683C\u5F0F 
# 
#4)RollingFileAppender\u9009\u9879\u5C5E\u6027 
# -Threshold = ERROR:\u6307\u5B9A\u65E5\u5FD7\u6D88\u606F\u7684\u8F93\u51FA\u6700\u4F4E\u5C42\u6B21 
# -ImmediateFlush = TRUE:\u9ED8\u8BA4\u503C\u662Ftrue,\u6240\u6709\u7684\u6D88\u606F\u90FD\u4F1A\u88AB\u7ACB\u5373\u8F93\u51FA 
# -File = C:/log4j.log:\u6307\u5B9A\u6D88\u606F\u8F93\u51FA\u5230C:/log4j.log\u6587\u4EF6 
# -Append = FALSE:\u9ED8\u8BA4\u503Ctrue,\u5C06\u6D88\u606F\u8FFD\u52A0\u5230\u6307\u5B9A\u6587\u4EF6\u4E2D\uFF0Cfalse\u6307\u5C06\u6D88\u606F\u8986\u76D6\u6307\u5B9A\u7684\u6587\u4EF6\u5185\u5BB9 
# -MaxFileSize = 100KB:\u540E\u7F00\u53EF\u4EE5\u662FKB,MB,GB.\u5728\u65E5\u5FD7\u6587\u4EF6\u5230\u8FBE\u8BE5\u5927\u5C0F\u65F6,\u5C06\u4F1A\u81EA\u52A8\u6EDA\u52A8.\u5982:log4j.log.1 
# -MaxBackupIndex = 2:\u6307\u5B9A\u53EF\u4EE5\u4EA7\u751F\u7684\u6EDA\u52A8\u6587\u4EF6\u7684\u6700\u5927\u6570 
# -Encoding = UTF-8:\u53EF\u4EE5\u6307\u5B9A\u6587\u4EF6\u7F16\u7801\u683C\u5F0F 

#\u8F93\u51FA\u6E90console\u7684\u914D\u7F6E
# \u5B9A\u4E49\u8F93\u51FA\u6E90console\u7684\u8F93\u51FA\u4F4D\u7F6E\u662F\u63A7\u5236\u53F0

# 控制台设置:
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n

# 本地文件设置:
log4j.appender.stdout = org.apache.log4j.FileAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ss S}][%l]%n%m%n
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.ImmediateFlush = TRUE
log4j.appender.stdout.Append = TRUE
# ${log4jDir} 变量,对应当前项目的本地盘符,若没有文件夹logd,则自动创建
log4j.appender.stdout.File = ${log4jDir}/logd/log4j.log



#spring\u4E2D\u7684\u914D\u7F6E\u914D\u7F6E\uFF0C\u9700\u8981\u5728web.xml\u4E2D\u914D\u7F6Elistener
#log4j.appender.stdout.File = ${webApp.root}/WEB-INF/logs/app.log
log4j.appender.stdout.Encoding = UTF-8



#===================================3.\u914D\u7F6E\u65E5\u5FD7\u4FE1\u606F\u7684\u683C\u5F0F(\u5E03\u5C40)layout===================================
#3.\u914D\u7F6E\u65E5\u5FD7\u4FE1\u606F\u7684\u683C\u5F0F(\u5E03\u5C40)\uFF0C\u5176\u8BED\u6CD5\u4E3A\uFF1A 
#log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 
#log4j.appender.appenderName.layout.option = value 
# 
#Log4j\u63D0\u4F9B\u7684layout\u6709\u4EE5\u4E0B\u51E0\u79CD\uFF1A 
#5)org.apache.log4j.HTMLLayout(\u4EE5HTML\u8868\u683C\u5F62\u5F0F\u5E03\u5C40) 
#6)org.apache.log4j.PatternLayout(\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u5E03\u5C40\u6A21\u5F0F) 
#7)org.apache.log4j.SimpleLayout(\u5305\u542B\u65E5\u5FD7\u4FE1\u606F\u7684\u7EA7\u522B\u548C\u4FE1\u606F\u5B57\u7B26\u4E32) 
#8)org.apache.log4j.TTCCLayout(\u5305\u542B\u65E5\u5FD7\u4EA7\u751F\u7684\u65F6\u95F4\u3001\u7EBF\u7A0B\u3001\u7C7B\u522B\u7B49\u7B49\u4FE1\u606F) 
#9)org.apache.log4j.xml.XMLLayout(\u4EE5XML\u5F62\u5F0F\u5E03\u5C40) 
# 
#5)HTMLLayout\u9009\u9879\u5C5E\u6027 
# -LocationInfo = TRUE:\u9ED8\u8BA4\u503Cfalse,\u8F93\u51FAjava\u6587\u4EF6\u540D\u79F0\u548C\u884C\u53F7 
# -Title=Struts Log Message:\u9ED8\u8BA4\u503C Log4J Log Messages 
# 
#6)PatternLayout\u9009\u9879\u5C5E\u6027 
# -ConversionPattern = %m%n:\u683C\u5F0F\u5316\u6307\u5B9A\u7684\u6D88\u606F(\u53C2\u6570\u610F\u601D\u4E0B\u9762\u6709) 
# 
#9)XMLLayout\u9009\u9879\u5C5E\u6027 
# -LocationInfo = TRUE:\u9ED8\u8BA4\u503Cfalse,\u8F93\u51FAjava\u6587\u4EF6\u540D\u79F0\u548C\u884C\u53F7 



##log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
#[QC]\u662Flog\u4FE1\u606F\u7684\u5F00\u5934\uFF0C\u53EF\u4EE5\u4E3A\u4EFB\u610F\u5B57\u7B26\uFF0C\u4E00\u822C\u4E3A\u9879\u76EE\u7B80\u79F0\u3002 
#Log4J\u91C7\u7528\u7C7B\u4F3CC\u8BED\u8A00\u4E2D\u7684printf\u51FD\u6570\u7684\u6253\u5370\u683C\u5F0F\u683C\u5F0F\u5316\u65E5\u5FD7\u4FE1\u606F\uFF0C\u6253\u5370\u53C2\u6570\u5982\u4E0B\uFF1A 
# %m \u8F93\u51FA\u4EE3\u7801\u4E2D\u6307\u5B9A\u7684\u6D88\u606F 
# %p \u8F93\u51FA\u4F18\u5148\u7EA7\uFF0C\u5373DEBUG,INFO,WARN,ERROR,FATAL 
# %r \u8F93\u51FA\u81EA\u5E94\u7528\u542F\u52A8\u5230\u8F93\u51FA\u8BE5log\u4FE1\u606F\u8017\u8D39\u7684\u6BEB\u79D2\u6570 
# %c \u8F93\u51FA\u6240\u5C5E\u7684\u7C7B\u76EE,\u901A\u5E38\u5C31\u662F\u6240\u5728\u7C7B\u7684\u5168\u540D 
# %t \u8F93\u51FA\u4EA7\u751F\u8BE5\u65E5\u5FD7\u4E8B\u4EF6\u7684\u7EBF\u7A0B\u540D 
# %n \u8F93\u51FA\u4E00\u4E2A\u56DE\u8F66\u6362\u884C\u7B26\uFF0CWindows\u5E73\u53F0\u4E3A\u201C\r\n\u201D\uFF0CUnix\u5E73\u53F0\u4E3A\u201C\n\u201D 
# %d \u8F93\u51FA\u65E5\u5FD7\u65F6\u95F4\u70B9\u7684\u65E5\u671F\u6216\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u683C\u5F0F\u4E3AISO8601\uFF0C\u4E5F\u53EF\u4EE5\u5728\u5176\u540E\u6307\u5B9A\u683C\u5F0F 
#    \u5982\uFF1A%d{yyyy\u5E74MM\u6708dd\u65E5 HH:mm:ss,SSS}\uFF0C\u8F93\u51FA\u7C7B\u4F3C\uFF1A2012\u5E7401\u670805\u65E5 22:10:28,921 
# %l \u8F93\u51FA\u65E5\u5FD7\u4E8B\u4EF6\u7684\u53D1\u751F\u4F4D\u7F6E\uFF0C\u5305\u62EC\u7C7B\u76EE\u540D\u3001\u53D1\u751F\u7684\u7EBF\u7A0B\uFF0C\u4EE5\u53CA\u5728\u4EE3\u7801\u4E2D\u7684\u884C\u6570 
#    \u5982\uFF1ATestlog.main(TestLog.java:10) 
# %F \u8F93\u51FA\u65E5\u5FD7\u6D88\u606F\u4EA7\u751F\u65F6\u6240\u5728\u7684\u6587\u4EF6\u540D\u79F0 
# %L \u8F93\u51FA\u4EE3\u7801\u4E2D\u7684\u884C\u53F7 
# %x \u8F93\u51FA\u548C\u5F53\u524D\u7EBF\u7A0B\u76F8\u5173\u8054\u7684NDC(\u5D4C\u5957\u8BCA\u65AD\u73AF\u5883),\u50CFjava servlets\u591A\u5BA2\u6237\u591A\u7EBF\u7A0B\u7684\u5E94\u7528\u4E2D 
# %% \u8F93\u51FA\u4E00\u4E2A"%"\u5B57\u7B26 
# 
# \u53EF\u4EE5\u5728%\u4E0E\u6A21\u5F0F\u5B57\u7B26\u4E4B\u95F4\u52A0\u4E0A\u4FEE\u9970\u7B26\u6765\u63A7\u5236\u5176\u6700\u5C0F\u5BBD\u5EA6\u3001\u6700\u5927\u5BBD\u5EA6\u3001\u548C\u6587\u672C\u7684\u5BF9\u9F50\u65B9\u5F0F\u3002\u5982\uFF1A 
#  %5c: \u8F93\u51FAcategory\u540D\u79F0\uFF0C\u6700\u5C0F\u5BBD\u5EA6\u662F5\uFF0Ccategory<5\uFF0C\u9ED8\u8BA4\u7684\u60C5\u51B5\u4E0B\u53F3\u5BF9\u9F50 
#  %-5c:\u8F93\u51FAcategory\u540D\u79F0\uFF0C\u6700\u5C0F\u5BBD\u5EA6\u662F5\uFF0Ccategory<5\uFF0C"-"\u53F7\u6307\u5B9A\u5DE6\u5BF9\u9F50,\u4F1A\u6709\u7A7A\u683C 
#  %.5c:\u8F93\u51FAcategory\u540D\u79F0\uFF0C\u6700\u5927\u5BBD\u5EA6\u662F5\uFF0Ccategory>5\uFF0C\u5C31\u4F1A\u5C06\u5DE6\u8FB9\u591A\u51FA\u7684\u5B57\u7B26\u622A\u6389\uFF0C<5\u4E0D\u4F1A\u6709\u7A7A\u683C 
#  %20.30c:category\u540D\u79F0<20\u8865\u7A7A\u683C\uFF0C\u5E76\u4E14\u53F3\u5BF9\u9F50\uFF0C>30\u5B57\u7B26\uFF0C\u5C31\u4ECE\u5DE6\u8FB9\u4EA4\u8FDC\u9500\u51FA\u7684\u5B57\u7B26\u622A\u6389 




#===================================4.\u6307\u5B9A\u7279\u5B9A\u5305\u7684\u8F93\u51FA\u7279\u5B9A\u7684\u7EA7\u522B===================================
#4\u6307\u5B9A\u7279\u5B9A\u5305\u7684\u8F93\u51FA\u7279\u5B9A\u7684\u7EA7\u522B 

#log4j.logger.com. neusoft =DEBUG
#\u6307\u5B9Acom.neusoft\u5305\u4E0B\u7684\u6240\u6709\u7C7B\u7684\u7B49\u7EA7\u4E3ADEBUG\u3002\u53EF\u4EE5\u628Acom.neusoft\u6539\u4E3A\u81EA\u5DF1\u9879\u76EE\u6240\u7528\u7684\u5305\u540D\u3002

#log4j.logger.com.opensymphony.oscache=ERROR
#log4j.logger.net.sf.navigator=ERROR
#\u8FD9\u4E24\u53E5\u662F\u628A\u8FD9\u4E24\u4E2A\u5305\u4E0B\u51FA\u73B0\u65E5\u5FD7\u7684\u7B49\u7EA7\u8BBE\u4E3AERROR\uFF0C\u5982\u679C\u9879\u76EE\u4E2D\u6CA1\u6709\u914D\u7F6EOSCache\uFF0C\u5219\u4E0D\u9700\u8981\u8FD9\u4E24\u53E5\u3002

#log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
#\u8FD9\u4E24\u53E5\u662Fstruts\u7684\u5305\u3002

#log4j.logger.org.springframework=DEBUG
#\u6B64\u53E5\u4E3ASpring\u7684\u5305\u3002

#log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
#log4j.logger.org.hibernate=DEBUG
#\u6B64\u4E24\u53E5\u662Fhibernate\u7684\u5305\u3002






##===================================5.\u4E00\u4E9B\u793A\u4F8B===================================
##OFF,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB,ALL 
#log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB 
#
##\u8F93\u51FA\u5230\u63A7\u5236\u53F0 
#log4j.appender.systemOut = org.apache.log4j.ConsoleAppender 
#log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout 
#log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
#log4j.appender.systemOut.Threshold = DEBUG 
#log4j.appender.systemOut.ImmediateFlush = TRUE 
#log4j.appender.systemOut.Target = System.out 
#
##\u8F93\u51FA\u5230\u6587\u4EF6 
#log4j.appender.logFile = org.apache.log4j.FileAppender 
#log4j.appender.logFile.layout = org.apache.log4j.PatternLayout 
#log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
#log4j.appender.logFile.Threshold = DEBUG 
#log4j.appender.logFile.ImmediateFlush = TRUE 
#log4j.appender.logFile.Append = TRUE 
#log4j.appender.logFile.File = ../Struts2/WebRoot/log/File/log4j_Struts.log 
#log4j.appender.logFile.Encoding = UTF-8 
#
##\u6309DatePattern\u8F93\u51FA\u5230\u6587\u4EF6 
#log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender 
#log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout 
#log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
#log4j.appender.logDailyFile.Threshold = DEBUG 
#log4j.appender.logDailyFile.ImmediateFlush = TRUE 
#log4j.appender.logDailyFile.Append = TRUE 
#log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts 
#log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' 
#log4j.appender.logDailyFile.Encoding = UTF-8 
#
##\u8BBE\u5B9A\u6587\u4EF6\u5927\u5C0F\u8F93\u51FA\u5230\u6587\u4EF6 
#log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender 
#log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout 
#log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n 
#log4j.appender.logRollingFile.Threshold = DEBUG 
#log4j.appender.logRollingFile.ImmediateFlush = TRUE 
#log4j.appender.logRollingFile.Append = TRUE 
#log4j.appender.logRollingFile.File = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.log 
#log4j.appender.logRollingFile.MaxFileSize = 1MB 
#log4j.appender.logRollingFile.MaxBackupIndex = 10 
#log4j.appender.logRollingFile.Encoding = UTF-8 
#
##\u7528Email\u53D1\u9001\u65E5\u5FD7 
#log4j.appender.logMail = org.apache.log4j.net.SMTPAppender 
#log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout 
#log4j.appender.logMail.layout.LocationInfo = TRUE 
#log4j.appender.logMail.layout.Title = Struts2 Mail LogFile 
#log4j.appender.logMail.Threshold = DEBUG 
#log4j.appender.logMail.SMTPDebug = FALSE 
#log4j.appender.logMail.SMTPHost = SMTP.163.com 
#log4j.appender.logMail.From = xly3000@163.com 
#log4j.appender.logMail.To = xly3000@gmail.com 
##log4j.appender.logMail.Cc = xly3000@gmail.com 
##log4j.appender.logMail.Bcc = xly3000@gmail.com 
#log4j.appender.logMail.SMTPUsername = xly3000 
#log4j.appender.logMail.SMTPPassword = 1234567 
#log4j.appender.logMail.Subject = Log4j Log Messages 
##log4j.appender.logMail.BufferSize = 1024 
##log4j.appender.logMail.SMTPAuth = TRUE 
#
##\u5C06\u65E5\u5FD7\u767B\u5F55\u5230MySQL\u6570\u636E\u5E93 
#log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender 
#log4j.appender.logDB.layout = org.apache.log4j.PatternLayout 
#log4j.appender.logDB.Driver = com.mysql.jdbc.Driver 
#log4j.appender.logDB.URL = jdbc:mysql://127.0.0.1:3306/xly 
#log4j.appender.logDB.User = root 
#log4j.appender.logDB.Password = 123456 
#log4j.appender.logDB.Sql = INSERT INTO T_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
#
#




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值