javaweb

 1.目标的 分析,首先 用户可以选择登录和注册 ------登录就看到所有的 商品的信息-----可以对商品进行 删除 和 更改和 增加

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

       2. 由此可以 确定出 的 表 有两张,所有 在 sql中建立表,对应的javabean 就是如下

<span style="font-size:18px;"><span style="background-color: rgb(51, 204, 0); ">public class UserInfo {	private int id;
	private String uname;
	private String upwd;
	private String marker;}// 这是备注</span></span>
<strong><span style="font-size:18px;background-color: rgb(255, 204, 0); ">public class Product {
	
	private int id;
	private String name;
	private String unit;// 货物的单位
	private double price;
	private int count; 数量}</span></strong>
    》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

3.确定了 表 我们就 开始写 与数据库向联系的 DBM类,相比以前就是 把 Resultset 转化为 Result ,

public Result GetResult(String sql,Object ...objs) throws SQLException{
		
		Connection sqlcon=this.getConnection();
		PreparedStatement pst=sqlcon.prepareStatement(sql);// <span style="font-size:24px;background-color: rgb(51, 204, 0); "><strong>先得到的 pst,pst 的 意识就是 含有  已经编译的 具有 输入参数的SQL语句,用了?代替占位符</strong></span>
		
		<strong>if(objs!=null){
			if(objs.length>0){
				int idx=1;
				for(Object obj : objs){
					pst.setObject(idx, obj);
					idx++;
				}
			}
		}</strong>
<strong>		
		ResultSet rst = pst.executeQuery();
		
		Result rs=ResultSupport.toResult(rst); <span style="font-size:24px;">这边 还有一些 需要关闭的的 </span></strong>
<strong>                return rs;}</strong>

<span style="font-size:18px;"><strong>int iline=pst.executeUpdate();
		//释放服务器数据库资源
		pst.close();
		sqlcon.close();  其他的 没有很大的 不同
		return iline; </strong></span>
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

4.然后就是 编写 需要用的 的 接口,

public interface IUserInfoDao {
	 * 实现用户登录
	public UserInfo MyLogin(String uname,String upwd) throws SQLException;
	 * 注册操作
	public int Register(UserInfo entity) throws SQLException;
其次是 实现 这个 接口
<span style="font-size:18px;">public class UserInfoDaoImpl implements IUserInfoDao {
	DBManager db=new DBManager();
	public <span style="color:#6666cc;">UserInfo</span> MyLogin(String uname, String upwd) throws SQLException {
		String sql=<span style="background-color: rgb(51, 255, 51); ">"select * from userinfo where uname=? and upwd=?";</span>//<strong><span style="color:#3333ff;">就是 根据 用户名和密码 把信息全部 查出来,那么 把用户名和 密码 都验证了,</span></strong>
		Object [] objs={uname,upwd};
		Result rs = db.GetResult(sql, objs);
		
		<strong><span style="color:#3333ff;">UserInfo entity=null;// 这个 是 写在外面的</span></strong>
		
		if(rs!=null){
			if(rs.getRowCount()>0){
				
				Map row=(Map)rs.getRows()[0];
				int id = Integer.parseInt(row.get("id").toString());
				String name=row.get("uname").toString();
				String pwd=row.get("upwd").toString();
				String marker=row.get("marker").toString();
				entity=new UserInfo(id, name, pwd, marker);
			}
		}
		
		return entity;
	}                       实现 插入时,使用的 是 插入一个表,
	public int Register(<strong><span style="color:#3333ff;">UserInfo entity</span>) </strong>throws SQLException {
		String sql="insert into userinfo values(?,?,?)"; 
		int iline = db.MyExecuteUpdate(sql, entity.getUname(),entity.getUpwd(),entity.getMarker());
		return iline;
	}

}</span>

实现 商品的 接口 时 ,就会比较复杂,

<span style="font-size:18px;">public interface IProductDao {
	
	 * 实现增加商品
	
	public int Add(Product entity) throws SQLException;
	 * 实现修改商品
	 
	public int Update(Product entity) throws SQLException;
	
	/**
	 * 删除商品信息
	
	public int DeleteById(int id) throws SQLException;
	
	/**
	 * 根据商品编号得到一个商品信息
	
	public Product SelectById(int id) throws SQLException;
	
	/**
	 * 获取所有的商品信息列表
	
	public List<Product> GetAll() throws SQLException;
	
	/**
	 * 对数据进行分页显示
	
	public List<Product> GetPageList(int pageSize,int pageNo) throws SQLException;

	/**
	 * 获取行的总数
	 */
	public int GetRowCount() throws SQLException;

}</span>
实现 这些方法

<span style="font-size:18px;">public class ProductDaoImpl implements IProductDao {
	
	DBManager db=new DBManager();	

	@Override    </span><span style="color:#000099;font-size:18px; "><strong>增加和 更新 都是 用到 一个 实例 传入的</strong></span><span style="font-size:18px;">
	public int Add(Product entity) throws SQLException {
		String sql="insert into product values(?,?,?,?)";
		Object [] objs={entity.getName(),entity.getUnit(),entity.getPrice(),entity.getCount()};
		return db.MyExecuteUpdate(sql, objs);
	}

	public int Update(Product entity) throws SQLException {
		String sql="update product set name=?,unit=?,price=?,count=? where id=?";
		Object [] objs={entity.getName(),entity.getUnit(),entity.getPrice(),entity.getCount(),entity.getId()};
		return db.MyExecuteUpdate(sql, objs);
	}
</span><span style="font-size:18px; "><span style="color:#993300;">》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》</span></span><span style="font-size:18px;">
	@Override
	public int DeleteById(int id) throws SQLException {
		String sql="delete from product where id=?";
		return db.MyExecuteUpdate(sql,</span><span style="color:#cc0000;font-size:18px; "> </span><span style="color:#ff0000;font-size:18px; "><strong>id)</strong>; 可以 把 id 当成一个 obj的数组传入 也没错</span><span style="font-size:18px;">
	}
       </span><span style="font-size:24px;color:#009900;"><strong>删除和 查出 都是根据 id 的</strong></span><span style="font-size:18px;">
	@Override
	public Product SelectById(int id) throws SQLException {
		String sql="select * from product where id=?";
		Result rs = db.GetResult(sql, id);
		Product entity=null;
		</span><strong><span style="font-size:18px;">if(rs!=null){    这里 不能小看,有这些 if 在, 可以实现过滤
			if(rs.getRowCount()>0){   如果 id 查出来的 只有一个对象
				Map row</span><span style="font-size:24px;">=<span style="background-color: rgb(0, 153, 0); ">(Map)rs.getRows()[0];</span> </span></strong><span style="font-size:18px;">
				int pid=Integer.parseInt(row.get("id").toString());
				String name=row.get("name").toString();
				String unit=row.get("unit").toString();
				double price=Double.parseDouble(row.get("price").toString());
				int count=Integer.parseInt(row.get("count").toString());
				<strong>entity=new Product(pid, name, unit, price, count);</strong>
			}
		}
		return entity;
	}

	</span><strong><span style="font-size:32px;">对于获得的是 很多的对象时 ,就会 用到 泛型和集合</span></strong><span style="font-size:18px;">
	public List<Product> GetAll() throws SQLException {
		String sql="select * from product";
		Result rs = db.GetResult(sql);
		<strong>List<Product> list=null; <span style="color:#009900;">需要 返回的 一开始都是 null的,不参与 和 if打交道</span>
		<span style="background-color: rgb(0, 153, 0); ">if(rs!=null){
			if(rs.getRowCount()>0){
				list=new ArrayList<Product>();
				Map[] rows=(Map[])rs.getRows();</span></strong>
				for(Map row : rows){
					int pid=Integer.parseInt(row.get("id").toString());
					String name=row.get("name").toString();
					String unit=row.get("unit").toString();
					double price=Double.parseDouble(row.get("price").toString());
					int count=Integer.parseInt(row.get("count").toString());
				</span><span style="font-size:24px;"><strong>Product entity=new Product(pid, name, unit, price, count);
		        list.add(entity);</strong></span><span style="font-size:18px;">
				}
			}
		}
		return list;
	}

	@Override
	public List<Product> GetPageList(int pageSize, int pageNo)
			throws SQLException {</span>
<span style="font-size:18px;"><span style="background-color: rgb(51, 204, 0); "> <strong>分页的 语句》》》</strong></span>
		</span><strong><span style="font-size:24px;background-color: rgb(255, 0, 0); ">String sql="select top "+pageSize+" * from product where id not in (select top "+pageSize*(pageNo-1)+" id from product order by id asc) order by id asc";</span></strong><span style="font-size:18px;">
		Result rs = db.GetResult(sql);
		List<Product> list=null;
		if(rs!=null){
			if(rs.getRowCount()>0){
				list=new ArrayList<Product>();
				Map[] rows=(Map[])rs.getRows();
				for(Map row : rows){
					int pid=Integer.parseInt(row.get("id").toString());
					String name=row.get("name").toString();
					String unit=row.get("unit").toString();
					double price=Double.parseDouble(row.get("price").toString());
					int count=Integer.parseInt(row.get("count").toString());
					Product entity=new Product(pid, name, unit, price, count);
					list.add(entity);
				}
			}
		}
		return list;
	}

	@Override
	public int GetRowCount() throws SQLException {
		String sql="select count(1) as<strong> <span style="color:#cc0000;">cnt</span></strong> from product";
		Result rs = db.GetResult(sql);
		int icount=0;
		if(rs!=null){
			Map row=(Map)rs.getRows()<strong><span style="color:#cc0000;">[0]</span></strong>;
			icount=Integer.parseInt<strong><span style="color:#cc0000;">(row.get("cnt")</span></strong>.toString());
		}
		return icount;
	}

}</span>

接下来 我觉得 先写 Jsp 的 显示 页面, 

<span style="background-color: rgb(255, 0, 0); ">${error }</span><br/>  <span style="background-color: rgb(0, 153, 0); ">通过 后面带的参数,实现 一个类的 多种复用,</span>
  	<form action="<span style="color:#ff0000;">userservlet?action=login</span>" method="post">
  		用户名:<input type="text" name="uname" /><br/>
  		密码:<input type="password" name="upwd"/><br/>
  		<input type="submit" name="btnok" value="登录"/>
  	</form>
  	<a href=<span style="color:#000099;">"<span style="background-color: rgb(192, 192, 192); ">register.jsp</span></span><span style="color:#3333ff;background-color: rgb(192, 192, 192); ">"</span>>注册</a>
先写 简单的  注册页面
<span style="background-color: rgb(204, 0, 0); ">${msg }</span><br/>     实现 复用 一个 servlet类
   	<form action="<span style="color:#000099;">userservlet?action=reg</span>" method="post">
   		用户名:<input type="text" name="uname" /><br/>
  		密码:<input type="password" name="upwd"/><br/>
  		备注:<input type="text" name="marker" /><br/>
  		<input type="submit" name="btnok" value="注册"/>
   	</form>
 接着就是 接收 表单的 common 类的写
<span style="font-size:18px;">protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String action=request.getParameter("action");
		这里根据 传入的 <strong><span style="color:#33cc00;">action 把两个 分开</span></strong>
		if(action.equals("login"))<span style="background-color: rgb(255, 0, 0); ">{传入 的 re 都是包含参数的httpservlet 请求</span></span>
<span style="font-size:18px;">			<span style="background-color: rgb(192, 192, 192); "><span style="color:#000099;">MyLogin(request,response);</span></span>
		}else if(action.equals("reg")){
			MyReg(request,response);
		}
		
	}
	protected void MyLogin(<span style="background-color: rgb(255, 0, 0); ">HttpServletRequest request</span>, HttpServletResponse response)
			throws ServletException, IOException {
		
		String uname=request.getParameter("uname");
		String upwd=request.getParameter("upwd");
		
		try {
			UserInfo entity = dao.MyLogin(uname, upwd);
			
			if(entity.getUname().equals(uname)){
				HttpSession session=request.getSession();
				session.setAttribute("userinfo", entity);
				
				System.out.println("登录成功");
				//转发到登录成功的页面(商品列表页面)</span><span style="font-size:24px;"> <span style="background-color: rgb(255, 0, 0); ">也是 一个 复用</span>
		<span style="background-color: rgb(255, 0, 0); ">MyForward(request, response, "<strong>productservlet?action=pagelist&pageno=1</strong>");</span>
		</span><span style="font-size:18px;">
			}else{
				//登录失败,并转发回当前页面继续登录
				request.setAttribute("error","登录失败,重新登录!");
				MyForward(request,response,"/index.jsp");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	protected void MyReg(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String uname=request.getParameter("uname");
		String upwd=request.getParameter("upwd");
		String marker=request.getParameter("marker");
		
		UserInfo entity=new UserInfo(0, uname, upwd, marker);
		try {
			int iline = dao.Register(entity);
			if(iline>0){
				System.out.println("注册成功!");
				
				//返回注册 成功页面,在注册成功页面给一个连接点击登录
				MyForward(request, response, "/reg_success.jsp");
			}else{
				//注册失败           </span><span style="font-size:18px; ">在 实际中, 是 各种的 限制来 确认 是不是失败了</span><span style="font-size:18px;">
				</span><span style="font-size:18px; "><span style="color:#ff0000;">request.setAttribute("msg", "注册失败了,重新再试一次。");</span></span><span style="font-size:18px;">
				MyForward(request, response, "/register.jsp");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	 </span><span style="font-size:32px;"> <strong> 这是 一个 简化 转发的 方法,</strong></span><span style="font-size:18px;">
	  
	public void MyForward(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException{
		request.getRequestDispatcher(path).forward(request, response);
	}

}</span><span style="font-size:32px;">
</span>


接着 是进入了 商品的 servlet 中,

<span style="font-size:14px;">protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		</span><span style="font-size:24px;">String action=request.getParameter("action");</span>
<span style="font-size:24px;">     <strong><span style="color:#009900;">这样可以 实现 少写 一些 接收的 servlet,为了 以后的 登录验证 过滤器的 编写方便</span>
		<span style="color:#3333ff;">if(action.equals("add")){
			Add(request,response);
		}else if(action.equals("getentity")){
			GetEntity(request,response);
		}else if(action.equals("update")){
			Update(request,response);
		}else if(action.equals("delete")){
			Delete(request,response);
		}else if(action.equals("pagelist")){
			SelectPageList(request,response);
		}</span></strong></span><span style="font-size:14px;">
	}
	
	
	protected void Add(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String name=request.getParameter("name");
		String unit=request.getParameter("unit");
		double price=Double.parseDouble(request.getParameter("price"));
		int count=Integer.parseInt(request.getParameter("count"));
		
		Product entity=new Product(0, name, unit, price, count);
		try {
			int iline = dao.Add(entity);
			if(iline>0){
				//执行成功,则跳转到列表页面
				MyForward(request, response, "productservlet?action=pagelist&pageno=1");
			}else{
				request.setAttribute("error", "添加商品信息失败!");
				//执行失败,跳转到error.jsp页面
				MyForward(request, response, "/error.jsp");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	protected void GetEntity(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		int id=Integer.parseInt(request.getParameter("id"));
		try {
			Product entity = dao.SelectById(id);
			request.setAttribute("entity", entity);
			MyForward(request, response, "/updateProduct.jsp");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	protected void Update(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		int id=Integer.parseInt(request.getParameter("id"));
		String name=request.getParameter("name");
		String unit=request.getParameter("unit");
		double price=Double.parseDouble(request.getParameter("price"));
		int count=Integer.parseInt(request.getParameter("count"));
		
		Product entity=new Product(id, name, unit, price, count);
		
		try {
			int iline = dao.Update(entity);
			if(iline>0){
				//执行成功,则跳转到列表页面
				MyForward(request, response, "productservlet?action=pagelist&pageno=1");
			}else{
				request.setAttribute("error", "修改商品信息失败!");
				//执行失败,跳转到error.jsp页面
				MyForward(request, response, "/error.jsp");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	protected void Delete(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		int id=Integer.parseInt(request.getParameter("id"));
	    try {
			int iline =	dao.DeleteById(id);
			
			if(iline>0){
				//执行成功,则跳转到列表页面
				MyForward(request, response, "productservlet?action=pagelist&pageno=1");
			}else{
				request.setAttribute("error", "删除商品信息失败!");
				//执行失败,跳转到error.jsp页面
				MyForward(request, response, "/error.jsp");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	<strong>protected void SelectPageList(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {</strong></span><pre name="code" class="java"><strong><span style="font-size:14px;">		int pagesize=3;
	</span></strong><pre name="code" class="java"><span style="background-color: rgb(51, 204, 0); "><span style="font-size:24px;">/*</span></span>
这里  有一个 很 重要的 点 就是 request.getParameter("pageno")
第一次 登录时,就 跳转过来了  在userinfoservlet中

if(entity.getUname().equals(uname)){
HttpSession session=request.getSession();
session.setAttribute("userinfo", entity);

System.out.println("登录成功");
//转发到登录成功的页面(商品列表页面)
MyForward(request, response, "productservlet?action=pagelist&pageno=1");
其次就是   从 商品列表中  选择 一些 操作时,也会有   req.getparam("pageno")
 

protected void SelectPageList(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		int pagesize=3;
int pageno=Integer.parseInt(request.getParameter("pageno"));
		
		
			int rowcount=dao.GetRowCount();//得到总行数
			int pagecount=rowcount%pagesize==0?rowcount/pagesize:rowcount/pagesize+1;
			
			if(pageno<1){
				pageno=1;//如果传递过来的页码为比1小的值时,改为显示第一页
			}else if(pageno>pagecount){
				pageno=pagecount;//如果页码大于了最后一页的页码 则改为最后一页
			}
			
			
			List<Product> list = dao.GetPageList(pagesize, pageno);
			
			<strong><span style="font-size:24px;color:#ff0000;">request.setAttribute("pageno", pageno); 很 神奇的 一句
	request.setAttribute("pagecount", pagecount); 
	request.setAttribute("list", list);</span></strong>
			MyForward(request, response, "/ProductList.jsp");
}

这里 是商品 显示界面

<span style="font-size:18px;">  <a href="addProduct.jsp">增加商品</a></span>
<span style="font-size:18px;">
    <c:if test="${list != null }">
    	<table>
    	<caption>
    		商品信息列表
    	</caption>
    	<tr>
    		<th>商品名称</th>
    		<th>商品单位</th>
    		<th>单价</th>
    		<th>库存</th>
    		<th>操作</th>
    	</tr>
    	
    	<c:forEach items="${list }" var="e">
    		<tr><td>${e.name }</td><td>${e.unit }</td><td>${e.price }</td><td>${e.count }</td>
    			<td>
    				<a href="productservlet?action=getentity&id=${e.id }">修改</a> 
    				<a href="productservlet?action=delete&id=${e.id }">删除</a>
    			</td>
    		</tr>
    	</c:forEach>
    	
    	<tr>
    		<td>
    			<a href="productservlet?action=pagelist&pageno=1">首页</a>
    		</td>  <span style="color:#33cc00;"><strong>后面的 pageno 可以 进行 算术 运算 只是因为 第一次 给了 值</strong></span>
    		<td><a href="productservlet?action=pagelist&pageno=${pageno+1 }">下一页</a></td>
    		<td><a href="productservlet?action=pagelist&pageno=${pageno-1 }">上一页</a></td>
    		<td><a href="productservlet?action=pagelist&pageno=${pagecount }">最后一页</a></td>
    		<td></td>
    	</tr>
    	
    	</table>
    </c:if>
  </body>
</html></span>

其他的

其他的 就没有 什么的 了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值