多个jsp,servlet之间的跳转以及传值;简单jsp增删改操作;jsp,servlet之间传值时一些巧用


    1.classAdmin.jsp 前端代码,动态显示表格,以及点击之后会根据点击的内容跳转到servlet,注意路径
        <form  action="post">
        <div align="center" style="overflow:scroll;">
            <table>
                    <thead>
                        <tr>                            <td>班级名称</td>
                            <td>教师</td>
                            <td>班级人数</td>
                            <td>添加日期</td>
                            <td colspan="5" align="center">班级操作</td>
                        </tr>
                    </thead>
                        <tbody>
                        <%
                            String realname=(String)session.getAttribute("realname");
                            String name=(String)session.getAttribute("username");
                            ClassDao classDao=new ClassDao();
                            ClassInfo classInfo=new ClassInfo();
                            List<ClassInfo> list=classDao.findClass(name, realname);
                            
                             if(list == null || list.size() == 0){
                         %>
                             <h1>还没有创建班级</h1>
                             
                        <%
                        }else{
                            for(int i=0;i<list.size();i++) {
                        %>
                            
                             <tr>
                                 <td><%=list.get(i).getClassName() %></td>
                                 <td><%=list.get(i).getTeacherName() %></td>
                                 <td><%=list.get(i).getStudentsNumber() %></td>
                                 <td><%=list.get(i).getAddtime() %></td>
                                 <td>
                                     <a href="../ClassServlet?addid=<%=list.get(i).getId() %>" style="color:blue; text-decoration:underline; ">添加</a> &nbsp
                                     <a href="../ClassServlet?upid=<%=list.get(i).getId() %>" style="color:blue; text-decoration:underline;">修改</a> &nbsp
                                     <a href="../ClassServlet?delid=<%=list.get(i).getId() %>" style="color:blue; text-decoration:underline;">删除</a> &nbsp
                                     
                                 </td>
                                 
                                
                             </tr>
                         <%
                             }
                         }
                         %>
                         
         

</tbody>
                </table>
        </div>
    
         
    </form>

 </div>

2.ClassServlet.java 页面上的url地址进行跳转之后处理 ,通过判断点击的超链接调用不同的方法,delete方法不需要单独的页面,其中更改和添加都需要单独的页面进行,重定向到其各自页面分别为addClass.jsp和updateClass.jsp         
         

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

import dao.ClassDao;

public class ClassServlet extends HttpServlet {
    String addid;
    String upid;
    String delid;
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
        
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding(“UTF-8”))
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        //设置请求以及响应的内容类型以及编码方式
        response.setContentType("text/html;charset=UTF-8");
        
         addid = request.getParameter("addid");
         upid = request.getParameter("upid");
         delid = request.getParameter("delid");
        
        if(!(addid==null)){
            add(request,response);
        }else if(!(upid==null)){
            update(request,response);
        }else if(!(delid==null)){
            delete(request,response);
        }
        
        
    }
    
    public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        //request.setAttribute("addid", addid);
        //System.out.println("调用add方法");
        //request.getRequestDispatcher("SQLgogo/teacher/addClass.jsp").forward(request, response);
        response.sendRedirect("/SQLgogo/teacher/addClass.jsp");
    }
    
    public void update(HttpServletRequest request, HttpServletResponse response) throws IOException{
        //request.setAttribute("upid", upid);
        HttpSession session=request.getSession();
        session.setAttribute("upid", upid);
        response.sendRedirect("/SQLgogo/teacher/updateClass.jsp");
    }

    public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        
        ClassDao classdao = new ClassDao();
        classdao.deleteClass(delid);
        response.sendRedirect("/SQLgogo/teacher/classAdmin.jsp");
    }

}

3.addClass.jsp 添加页面的主要代码,表单提交,再次转到ClassManager.java进行连接数据库处理

    <div class="container-fluid" style="position: absolute;top: 90px;left: 300px" >
    &lt&lt<a href="/SQLgogo/teacher/classAdmin.jsp" style="color:black;text-decoration:underline;">返回 </a>
    <br>
    <div align="center" style="position: absolute;top: 90px;left: 400px">
        <font size="5">班级信息添加</font>
        <hr>
    
    
    <form method="post" action="../ClassManager?method=addClass">
        班级名称:<input type="text" name="classname" id="classname"><br><br>
        教师:&nbsp&nbsp<input type="text" name="teacher" id="teacher"><br><br>
        班级人数:<input type="text" name="studentsnum" id="studentsnum"><br><br>
        <input type="submit" value="确定">
    </form>
    </div>
</div>            
4.updateClass.jsp 更改页面代码,表单同理提交到同一个servlet,通过进行判断路径进行区分

    <div class="container-fluid" style="position: absolute;top: 90px;left: 300px" >
    &lt&lt<a href="/SQLgogo/teacher/classAdmin.jsp" style="color:black;text-decoration:underline;">返回 </a>
    <br>
    <div align="center" style="position: absolute;top: 90px;left: 400px">
        <font size="5">班级信息更改</font>
        <hr>
    
    
    <form method="post" action="../ClassManager?method="<%=request.getAttribute("upid") %>+updateClass"">
        
        
        班级名称:<input type="text" name="classname" id="classname"><br><br>
        教师:&nbsp&nbsp<input type="text" name="teacher" id="teacher"><br><br>
        班级人数:<input type="text" name="studentsnum" id="studentsnum"><br><br>
        <input type="submit" value="确定" >
    </form>
    </div>
</div>               
 5.ClassManager.java 这个后端进行增,改的后台处理,其中包括值的判断,空值等判断,更改需要得到点击的参数进行更改,由于跳转了多个页面,且为重定向方式用的是session传值,如果是转发方式可以用request.setAttribute方式存取,但是那样只能servlet向jsp传值,jsp再次向servlet传值会丢失信息,关于传值各位可以看看一些大佬的博客。

此类中还有时间的处理方式

package service;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

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

import bean.ClassInfo;
import dao.ClassDao;

public class ClassManager extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
        
    }


    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding(“UTF-8”))
                req.setCharacterEncoding("UTF-8");
                resp.setCharacterEncoding("UTF-8");
                //设置请求以及响应的内容类型以及编码方式
                resp.setContentType("text/html;charset=UTF-8");
                
                
                String method = req.getParameter("method");
                
                
                 if (method.equals("addClass")) {
                    
                    
                         String classname = req.getParameter("classname");
                        String teacher = req.getParameter("teacher");
                        String studentsnum =req.getParameter("studentsnum");
                        
                        
                        
                        Date date= new Date();
                        SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String nowtime = sd.format(date);
                    
                    if (classname == null || classname.isEmpty()) {
                        
                        resp.getWriter().print("<script>alert('班级名不能为空')</script>");
                        resp.getWriter().print("<script>history.back()</script>");
                        return;
                    }
                    
                    if (teacher == null || teacher.isEmpty()) {
                        
                        resp.getWriter().print("<script>alert('教师名不能为空')</script>");
                        resp.getWriter().print("<script>history.back()</script>");
                        return;
                    }
                    
                    if (studentsnum == null || studentsnum.isEmpty()) {
                        
                        resp.getWriter().print("<script>alert('班级人数不能为空')</script>");
                        resp.getWriter().print("<script>history.back()</script>");
                        return;
                    }
                    
                    
                    //将string类型studentsnum转化成int类型
                     int studentsNum=Integer.parseInt(studentsnum);
                    
                        ClassInfo classinfo = new ClassInfo();
                        ClassDao classdao = new ClassDao();
                        
                        //班级名称不能重复添加
                        if(classdao.isExistClass(classname)){
                            
                            resp.getWriter().print("<script>alert('此班级名称已经存在')</script>");
                            resp.getWriter().print("<script>history.back()</script>");
                            return;
                        }
                        
                        classinfo.setClassName(classname);
                        classinfo.setTeacherName(teacher);
                        classinfo.setStudentsNumber(studentsNum);
                        classinfo.setAddtime(nowtime);
                        
                        classdao.addClass(classinfo);
                        
                        resp.sendRedirect("/SQLgogo/teacher/classAdmin.jsp");
                }else if(method.endsWith("updateClass")){
                    //upid是靠session传值
                    HttpSession session=req.getSession();
                    Object upid=session.getAttribute("upid");
                    
                    
                    String classname = req.getParameter("classname");
                    String teacher = req.getParameter("teacher");
                    String studentsnum =req.getParameter("studentsnum");
                    
                    
                    
                    Date date= new Date();
                    SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String nowtime = sd.format(date);
                
                if (classname == null || classname.isEmpty()) {
                    
                    resp.getWriter().print("<script>alert('班级名不能为空')</script>");
                    resp.getWriter().print("<script>history.back()</script>");
                    return;
                }
                
                if (teacher == null || teacher.isEmpty()) {
                    
                    resp.getWriter().print("<script>alert('教师名不能为空')</script>");
                    resp.getWriter().print("<script>history.back()</script>");
                    return;
                }
                
                if (studentsnum == null || studentsnum.isEmpty()) {
                    
                    resp.getWriter().print("<script>alert('班级人数不能为空')</script>");
                    resp.getWriter().print("<script>history.back()</script>");
                    return;
                }
                
                
                //将string类型studentsnum转化成int类型
                 int studentsNum=Integer.parseInt(studentsnum);
                                            
                    ClassInfo classinfo = new ClassInfo();
                    ClassDao classdao = new ClassDao();
                                    
                    classinfo.setClassName(classname);
                    classinfo.setTeacherName(teacher);
                    classinfo.setStudentsNumber(studentsNum);
                    classinfo.setAddtime(nowtime);
                    
                    classdao.updateClass(classinfo,upid);
                    
                    resp.sendRedirect("/SQLgogo/teacher/classAdmin.jsp");
                }
                
                        
        
    }

}

6.这里是数据库的一些方法,没有整理,各位直接看上面的调用方法来看

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import bean.ClassInfo;
import bean.TeaUser;
import util.DBUtil;

public class ClassDao {
    
    public void addClass(ClassInfo classInfo) {
        
        //添加
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
//                                             start number
        String sql = "insert into classinfo(className,teacherName,studentsNumber,addtime) values(?,?,?,?)";
        Object[] params = {classInfo.getClassName(),classInfo.getTeacherName(),classInfo.getStudentsNumber(),classInfo.getAddtime()};
        /*
         * BeanListHandler:将结果集封装为list集合
         * BeanHandler:将结果集中的第一条记录封装为对象
         * ScalarHandler: 处理单个值,比如记录的个数
         */
        try {
            queryRunner.update(connection, sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
        
    }
    
        //删除
    public void deleteClass(String id){
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
        
        String sql = "delete from classinfo where id = ?";
        Object[] params = {id};
        
        try {
            queryRunner.update(connection, sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
    }
        //修改
    public void updateClass(ClassInfo classinfo,Object upid){
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
        
        String sql = "update classinfo set className=?,teacherName=?,studentsNumber=?,addtime=? where Id=?";
        Object[] params = {classinfo.getClassName(),classinfo.getTeacherName(),classinfo.getStudentsNumber(),classinfo.getAddtime(),upid};
        
        try {
            queryRunner.update(connection, sql,params);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
    }
        //查找所有班级
    public List<ClassInfo> findClass(String name,String realname){
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
//                                             start number
        
        String sql = "select classinfo.Id,className,teacherName,studentsNumber,addtime from classinfo join teauser on classinfo.teacherName=teauser.realname where  name=? and teacherName=?";
        Object[] params = {name,realname};
        /*
         * BeanListHandler:将结果集封装为list集合
         * BeanHandler:将结果集中的第一条记录封装为对象
         */
        try {
            
            List<ClassInfo> list = (List<ClassInfo>)queryRunner.query(connection, sql,new BeanListHandler(ClassInfo.class),params);
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
        return null;
    }
    
    
    public List<ClassInfo> getClass(int start,int number){
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
        
        String sql = "select * from classinfo limit ?,?";
        Object[] pramas = {start,number};
        
        /*
         * BeanListHandler:将结果集封装为list集合
         * BeanHandler:将结果集中的第一条记录封装为对象
         */
        try {
            List<ClassInfo> list = (List<ClassInfo>)queryRunner.query(connection, sql,new BeanListHandler(ClassInfo.class),pramas);
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
        return null;
    }
    
    
//    查询数据的总条数
    public int getCount() {
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
//                                             start number
        String sql = "select count(id) from emp";
        
        /*
         * BeanListHandler:将结果集封装为list集合
         * BeanHandler:将结果集中的第一条记录封装为对象
         * ScalarHandler: 处理单个值,比如记录的个数
         */
        try {
            long count = (long)queryRunner.query(connection, sql,new ScalarHandler());
            return (int) count;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
        return 0;
    }
    
    
    public boolean isExistClass(String classname){
        QueryRunner queryRunner = new QueryRunner();
        Connection connection = DBUtil.getConnection();
//                                             start number
        String sql = "select className from classinfo where className=?";
        Object[] params = {classname};
        /*
         * BeanListHandler:将结果集封装为list集合
         * BeanHandler:将结果集中的第一条记录封装为对象
         * ScalarHandler: 处理单个值,比如记录的个数
         */
        try {
            
            List<ClassInfo> list = (List<ClassInfo>)queryRunner.query(connection, sql,new BeanListHandler(ClassInfo.class),params);
            if(!(list==null)){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            DBUtil.release(null, null, connection);
        }
        return false;
        
    }
}

7.这是dbutils,其中propertices是数据库信息,用户名密码啥的,关于数据库的连接我会单独写一篇来介绍

package util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
 *     JDBC工具类,负责注册驱动,获取连接,释放资源
 *
 *  注册驱动需要使用  com.mysql.jdbc.Driver MySQL驱动包中的Driver类,直接写在代码中,会使程序和
 *  MySQL的驱动耦合,以后如果更改数据库,也必须要更改代码,程序的扩展性不强
 *  包括连接数据库时的账号密码,这些内容都可能会更改,因此最好将这些信息存储到一个配置文件中,通过在程序中
 *  读取配置文件来注册驱动,获取连接
 *
 *  
 */
public class DBUtil {
    private static Properties properties;
    //注册驱动
    static{
        //静态代码块当类被加载的时候会执行,只要DBUtil类被第一次用到,DBUtil类就会被加载到内存,
        //静态代码块就会执行,驱动会被注册
        try {
            //通过类加载器读取src目录中的 properties文件
            ClassLoader cl = DBUtil.class.getClassLoader();
            InputStream is = cl.getResourceAsStream("db.properties");
            
            //Properties有一个对应的类,可以用于读取文件信息
            properties = new Properties();
            //通过输入流加载properties文件
            properties.load(is);
            
            //通过key获取到properties文件中对应的值
            String driver = properties.getProperty("driver");
            //注册驱动
            Class.forName(driver);
            
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }
    }
    
    //获取连接
    public static Connection getConnection(){
        
        //读取配置文件中的账号,密码等信息,用于连接数据库
        String url = properties.getProperty("url");
        String user = properties.getProperty("username");
        String password = properties.getProperty("password");
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, user, password);
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return connection;
    }
    
    //释放资源
    public static void release(ResultSet resultSet,Statement statement,Connection connection){
        //资源在finnaly中释放
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
    }
}

小女不才,欢迎各位大佬的建议,另外里面可能会有一些无用代码,由于夜已经很深小女没有整理,将就看一下。

本文最大的特点在于多个页面之间进行跳转,涉及到2个servlet和3个jsp之间互相传递数据。

                      
                        
        
                    
              

发布了30 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40898368/article/details/82634614