java学生管理系统jdbc_JDBC-简单的学生管理系统-增删改查

package student.web.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.lang.reflect.InvocationTargetException;

import java.util.Date;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.ConvertUtils;

import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;

import student.bean.Student;

import student.service.StudentService;

import student.service.impl.StudentServiceImpl;

import student.utils.WebTools;

import student.utils.WebUtils;

import student.web.formbean.StudentFromBean;public classController extends HttpServlet {

StudentService ss= newStudentServiceImpl();/**

* The doGet method of the servlet.

*

* This method is called when a form has its tag value method equals to get.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred*/

public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

PrintWriterout =response.getWriter();//拿到页面传递的数据

String op = request.getParameter("op");

System.out.println("--op--" +op);//String name = request.getParameter("name");//System.out.println("--name---" + name);//根据页面数据做判断

if("all".equals(op)){

listAll(request,response);

}else if("add".equals(op)){

addStudent(request,response);

}else if("update".equals(op)){

update(request,response);

}else if("delete".equals(op)){

delete(request,response);

}else if("delmore".equals(op)){

delmore(request,response);

}else if("toupdate".equals(op)){

toupdate(request,response);

}

}private voidtoupdate(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//封装页面传递过来的数据//封装页面数据

StudentFromBean sfb = WebUtils.fillFormBean(StudentFromBean.class, request);

System.out.println("---formbean---" +sfb.toString());//检测数据

System.out.println("===validate===" +sfb.validate());if(sfb.validate()){//验证通过,将forbean中的数据拷贝到javabean中

Student s = newStudent();//由于时间是date类型,需要注册一个时间转换器

ConvertUtils.register(new DateLocaleConverter(), Date.class);try{

BeanUtils.copyProperties(s, sfb);

}catch(IllegalAccessException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(InvocationTargetException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("---update封装了进来的数据---" +s);//根据formbean对象的id来封装数据,应该是已经封装进来了//s.setId(WebTools.createNewId());//其次由于hobby的类型不同,所以不会拷贝数据,需要收到拷贝//拿到页面的爱好数组,将数组拼接成一个字符串

String[] hobby =sfb.getHobby();if(hobby != null && hobby.length > 0){

StringBuffer sf= new StringBuffer(hobby[0]);for (int i = 1; i < hobby.length; i++) {

sf.append("," +hobby[i]);

}

s.setHobby(sf.toString());

}//此时应该是已经封装完成了 student对象s

System.out.println("---封装了全部数据,准备写入数据库---" +s);//调用service层完成业务逻辑,更新数据

boolean flag=ss.update(s);if(flag){//说明添加成功,转向主页面,//先重新查询数据库,拿取数据后在转向主页

listAll(request, response);

}else{//添加失败

request.setAttribute("errors", "修改失败");

request.getRequestDispatcher(request.getContextPath()+ "/update.jsp");

}

}else{//验证失败,踢回去,sfb对象存入request对象中,错误信息显示到页面上//算是数据回显

request.setAttribute("user", sfb);//给页面传递的

request.getRequestDispatcher("/update.jsp").forward(request, response);

}

}private voiddelmore(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//获取传递的ids

String all = request.getParameter("ids");

System.out.println("--all---" +all);//由于ids后面多了一个逗号,记得去掉 ----> 测试没有这一步也没有问题//ids = ids.substring(0, ids.length()-1) ;//拿到了ids,拆分后多次调用

String [] ids = all.split(",") ;for (int i = 0; i < ids.length; i++) {

System.out.println("id" +i+"---"+ids[i]);if(!ss.delete(ids[i])){//删除失败

request.getSession().setAttribute("error", "删除失败");

}

}

listAll(request, response);

}private voiddelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//根据id删除对应的行

String id = request.getParameter("id");

System.out.println("--id--" +id);//拿到了页面传递过来的id,根据id来删除用户

if(!ss.delete(id)){//删除失败

request.getSession().setAttribute("error", "删除失败");

}

listAll(request, response);

}private voidupdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{//获取id

String id = request.getParameter("id");//根据id来更新内容//根据id找到该用户,将该用户信息发送到更新页面上,提交到数据库

System.out.println("--update--" +id);

Student s=ss.findStudentById(id);

System.out.println("--find--" +s);if(s != null){//请求重定向,必须存放到session中,为什么不使用重定向 ??? 拭目以待

request.getSession().setAttribute("s", s);//response.sendRedirect(request.getContextPath() + "/update.jsp");

request.getRequestDispatcher("/update.jsp").forward(request, response);

}

}private voidaddStudent(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//封装页面数据

StudentFromBean sfb = WebUtils.fillFormBean(StudentFromBean.class, request);

System.out.println("---formbean---" +sfb.toString());//检测数据

System.out.println("===validate===" +sfb.validate());if(sfb.validate()){//验证通过,将forbean中的数据拷贝到javabean中

Student s = newStudent();//由于时间是date类型,需要注册一个时间转换器

ConvertUtils.register(new DateLocaleConverter(), Date.class);try{

BeanUtils.copyProperties(s, sfb);

}catch(IllegalAccessException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(InvocationTargetException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("---封装了一部分内容---" +s);//此时的s对象中没有id属性,需要通过一个类来生成id

s.setId(WebTools.createNewId());//其次由于hobby的类型不同,所以不会拷贝数据,需要收到拷贝//拿到页面的爱好数组,将数组拼接成一个字符串

String[] hobby =sfb.getHobby();if(hobby != null && hobby.length > 0){

StringBuffer sf= new StringBuffer(hobby[0]);for (int i = 1; i < hobby.length; i++) {

sf.append("," +hobby[i]);

}

s.setHobby(sf.toString());

}//此时应该是已经封装完成了 student对象s

System.out.println("---封装了全部数据,准备写入数据库---" +s);//调用service层完成业务逻辑

boolean flag =ss.add(s);if(flag){//说明添加成功,转向主页面,//先重新查询数据库,拿取数据后在转向主页

listAll(request, response);

}else{//添加失败

request.setAttribute("errors", "添加失败");

request.getRequestDispatcher(request.getContextPath()+ "/add.jsp");

}

}else{//验证失败,踢回去,sfb对象存入request对象中,错误信息显示到页面上//算是数据回显

request.setAttribute("user", sfb);//给页面传递的

request.getRequestDispatcher("/add.jsp").forward(request, response);

}

}private voidlistAll(HttpServletRequest request,

HttpServletResponse response) throws IOException {//显示所有的数据//拿到所有的数据

/**

* 分层思想,表现层调用业务逻辑层来完成,不需要管他们怎么实现。*/List list =ss.getAllStudent();//将数据存放到session中

/**

* 为什么要放到session中而不是request中 ?

* 这个地方如果采用请求转发,增加或改动之后,就会转发到这里来重新查询,但是当转发过来之后,又是一次。算了,自己试一次就知道了。

*

*

* 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。

* 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,

* 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,

* request内的对象将无法使用。 怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,

* 浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。*/

//请求重定向,必须存放到session中

request.getSession().setAttribute("list", list);

response.sendRedirect(request.getContextPath()+ "/list.jsp");

}public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}


版权声明:本文为weixin_35110758原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。