第四章Response和增删改查(2)

2、案例:Servlet版CRUD;

第 6 节6-案例:增删改查需求说明

第 7 节7-案例:人员列表

第 8 节8-案例:新增和保存

第 9 节9-案例:修改和保存

第 10 节10-案例:删除以及总结

第 11 节11-HttpServlet与Servlet接口


第 6 节6-案例:增删改查需求说明

第 7 节7-案例:人员列表

第 8 节8-案例:新增和保存

第 9 节9-案例:修改和保存

第 10 节10-案例:删除以及总结

 

使用已经做完的演示几个动作:查询列表;新增;新增保存;编辑;编辑保存;删除。

如果每个动作一个Servlet太麻烦,因此通过一个action参数来分辨。

因为新增保存、编辑保存都是Post,其他是Get,因此让doPost调用doGet,这样共享同样的逻辑,也就是不区别Get还是Post。

使用JDBCUtils访问数据库。

 

【步骤】

在数据库myweb1中新建表T_Persons

设置字段Id name age

设置web.xml

 

【Person2Servlet.java】


package com.rupeng.test1;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.spi.DirStateFactory.Result;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;	
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Persons2Servlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		//第一次请求Servletd的时候init方法被调用
		System.out.println("Persons2Servlet初始化");
		//Servlet默认是:在服务器中只创建一个对象
	}
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		System.out.println("Persons2Servlet销毁");
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String xing = getServletConfig().getInitParameter("xing");
		 String ming = getServletConfig().getInitParameter("ming");
		 System.out.println(xing);
		 System.out.println(ming);
		
		//persons2?action=list 显示所有的人员
		//persons2?action=addnew 显示新增页面
		//persons2?action=edt&id=2 编辑id为2的人员
		//persons2?action=addnewSubmit&name=yzk&age=18
		//persons2?action=editSubmit&id=2&name=yzk&age=18
		//persons2?action=delete&id=2;
		resp.setContentType("text/html;charset=UTF-8");
		resp.setCharacterEncoding("UTF-8");
		
		PrintWriter writer = resp.getWriter();
		String action = req.getParameter("action");
		if(action.equals("list"))
		{
			writer.println("<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'</head>");
			writer.println("<body>");
			writer.println("<p><a href='Persons2?action=addnew'>新增</a></p>");
			writer.println("<table>");
			writer.println("<thead><tr><td>Id</td><td>姓名</td><td>年龄</td><td>修改</td><td>删除</td></tr></thead>");
			writer.println("<tbody>");
			
			 ResultSet rs = null;
			try {
				rs = JdbcUtils2.executeQuery("select * from T_Persons");
				while(rs.next())
				{
					int id = rs.getInt("Id");
					String name = rs.getString("Name");
					int age = rs.getInt("Age");
					writer.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"
								+age+"</td><td><a href='Persons2?action=edit&id="
								+id+"'>修改</a></td><td><a οnclick='return confirm(\"确认要删除则条纪录吗?\")' href='Persons2?action=delete&id="
								+id+"'>删除</a></td></tr>");
					
				}
			} catch (SQLException e) {
				writer.print("查询数据出错");
				writer.print(e);
				e.printStackTrace();
			}
			finally
			{
				JdbcUtils2.closeAll(rs);
			}
			writer.println("</tbody>");
			writer.println("</table>");
			writer.println("</body></html>");
		}
		else if(action.equals("addnew"))
		{
			writer.println("<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'</head>");
			writer.println("<body>");
			writer.println("<form action='Persons2' method='post'>");
			//隐藏在界面中看不到但是表单提交的时候是能够提交到服务器的
			writer.println("<input type='hidden' name='action' value='addnewSubmit' />");
			writer.println("姓名:<input type='text' name='name' />");
			writer.println("年龄:<input type='text' name='age' />");
			writer.println("<input type='submit' value='保存' />");
			writer.println("</form>");
			writer.println("</body></html>");
		}
		else if(action.equals("edit"))
		{
			int id = Integer.parseInt(req.getParameter("id"));
			ResultSet rs = null;
			try {
				rs = JdbcUtils2.executeQuery("select * from T_Persons where Id=?",id);
				if(rs.next())//如果第一次调用next()就返回false,就说明一行数据都没有,不存在id
				{
					String name = rs.getString("name");
					int age = rs.getInt("Age");
					writer.println("<form action='Persons2' method='post'>");
					writer.println("<input type='hidden' name='action' value='editSubmit'/>");
					writer.println("<input type='hidden' name='id' value='"+id+"'/>");//让服务器知道要修改谁
					writer.println("姓名:<input type='text' name='name' value='"+name+"' />");
					writer.println("年龄:<input type='text' name='age' value='"+age+"' />");
					writer.println("<input type='submit' value='保存' />");
					writer.println("</form>");
				}
				else
				{
					writer.println("没有找到id="+id+"的人");
				}
			} catch (SQLException e) {
				writer.println("查询出错");
				e.printStackTrace();
			}
			finally
			{
				JdbcUtils.closeAll(rs);
			}
			
		}
		else if(action.equals("addnewSubmit"))
		{
			String name = RuPengUtils.getParameter(req, "name");
			int age = Integer.parseInt(req.getParameter("age"));
			try
			{
			JdbcUtils2.executeUpdate("Insert into T_Persons(Name,Age) values(?,?)", name,age);
			resp.sendRedirect("Persons2?action=list");//保存成功后重定向到查询页面,这样就可以立即看到新增的数据
			}
			catch(SQLException e)
			{
					writer.print("新增保存出错");
					e.printStackTrace();	
			}
			
		}
		else if(action.equals("editSubmit"))
		{
			int  id = 	Integer.parseInt(req.getParameter("id"));
			String name = RuPengUtils.getParameter(req, "name");
			int age = Integer.parseInt(req.getParameter("age"));
			try {
				JdbcUtils2.executeUpdate("update T_Persons set name=?,age=? where id=?",
						name,age,id);
			} catch (SQLException e) {
				writer.println("修改保存出错");
				e.printStackTrace();
			}
			resp.sendRedirect("Persons2?action=list");
			
		}
		else if(action.equals("delete"))
		{
			int id = Integer.parseInt(req.getParameter("id"));
			try {
				JdbcUtils2.executeUpdate("delete from T_Persons where Id=?", id);
				resp.sendRedirect("Persons2?action=list");
			} 
			catch (SQLException e) {
				writer.print("删除出错");
				e.printStackTrace();
			}
		}
		else
		{
			writer.println("未知的action");
		}
	}
}

第 11 节11-HttpServlet与Servlet接口

 

Servlet必须实现Servlet接口,HttpServlet是实现了Servlet接口的一个抽象类,基于HttpServlet编写简单很多。

Servlet的方法:

init初始化时候被调用;

destroy销毁时被调用;

getServletConfig获得web.xml中当前servlet下通过<init-param>配置的参数值,可以配置多组<init-param>

String xing =getServletConfig().getInitParameter("Xing");

 

无论是get、post还是其他请求,都会调用service方法

 

反编译HttpServlet.class GenericServlet.class Servlet.class

 

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值