(jsp四)简单功能的实现:显示

a.list.jsp页面代码

<body>

    <table border="1px" width="60%">

        <tr>

            <th>ID</th>

            <th>姓名</th>

            <th>密码</th>

            <th>年龄</th>

            <th>性别</th>

            <th>操作</th>

        </tr>

       

        <%--

        <!--

        方式一:通过java代码+html代码获取list集合内容

        注:需要将java代码与html代码分开书写,如下所示

        报错原因:需要导包

        -->

        <%

            List<Student> list=(List<Student>)request.getAttribute("list");

            if(list!=null){

            for(Student s:list){

         %>

            <tr>

                <th><%=s.getSid()%></th>

                <th><%=s.getSname()%></th>

                <th><%=s.getSpwd()%></th>

                <th><%=s.getSage()%></th>

                <th><%=s.getSsex()%></th>

                <th>删除|修改</th>

            </tr>

         <%

            }

            }

         %>

         --%>

         

         <!--

        方式二:通过jstl方式

        -->

        <c:forEach items="${list}" var="s" varStatus="vs">

            <tr>

                <th>${vs.count}</th>

                <th>${s.sname}</th>

                <th>${s.spwd}</th>

                <th>${s.sage}</th>

                <th>${s.ssex}</th>

                <th>删除|修改</th>

            </tr>

        </c:forEach>

    </table>

</body>

 

注:JSTL(Java Stander Tag Libary):java标准标签库

       步骤:

              1)导入jar包(jstl.jar,standard.jar)

2)导入标签库(taglib指令导入):<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>

      3)使用相应的标签完成相应的功能

       a)判断

              <c:if test=”${}”></c:if>

       b)循环

              <c:forEach items=”” var=”” varStatus=””></c:forEach>

              Items:表示要遍历的集合(items的值是一个EL表达式)

              var:表示每次循环拿到的对象

              varStatus:表示循环迭代的下标(varStatus的值是一个EL表达式)

                            index正在便利的下标,从0开始

                            count遍历数据的条数

导包方法:光标停留在需要导包的属性名之后,Alt+/出现列表找到包导入即可

 

b.StudentServlet新增代码

//登录

        if("login".equals(flag)){

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

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

            Student stu=dao.findStudentBySnameAndSpwd(sname, spwd);

            if(stu==null){

                //查无此人,则进行提示并返回登录页面

                //设值绑定,将某绑定值绑定至request并给其一个绑定名,则重定向文件可通过该绑定名获取该绑定值

                //第一个参数为绑定名,第二个参数为绑定值

                request.setAttribute("login_error","查无此人");

                //请求转发

                request.getRequestDispatcher("login.jsp").forward(request, response);

            }else{

                //显示

                flag=null;

            }

        }

       

        //显示

        if(flag==null){

            List<Student> list=dao.findAllStudent();

            request.setAttribute("list",list);

            request.getRequestDispatcher("list.jsp").forward(request, response);

        }

注:如果直接运行servlet,我们需要让页面能够做显示操作,但是如果直接运行servlet的话是没有页面传送flag值的,那么这时flag值是为null的,所以如果我们要做显示操作,只需要当flag为null时,让页面做现实操作即可。那么现在有一个问题,当登录成功的时候,下一个页面应该是什么?当然是显示页面,如何实现?我们可以通过在登录完成验证成功后给flag赋值使得flag=null,就可以进行显示操作,这样的话就必须要求显示功能放在所有功能的后面,才能够使得每一个功能运行完后给赋值flag=null后进入到显示逻辑。如果要直接进入显示页面做显示,需要先运行servlet,否则list.jsp无法获取到值

 

c.IStudentDAO新增查询所有方法public List<Student> findAllStudent();

 

d.StudentDAOImpl新增代码

public List<Student> findAllStudent() {

        List<Student> list=new ArrayList<Student>();

        try{

            conn=DBUtil.getConnection();

            ps=conn.prepareStatement("SELECT sid,sname,spwd,sage,ssex FROM student");

            rs=ps.executeQuery();

            while(rs.next()){

                Student stu=new Student(rs.getInt("sid"),rs.getString("sname"),rs.getString("spwd"),rs.getInt("sage"),rs.getString("ssex"));

                list.add(stu);

            }

        }catch(Exception e){

            e.printStackTrace();

        }finally{

            DBUtil.closeConnection(rs, ps, conn);

        }

        return list;

    }

猜你喜欢

转载自blog.csdn.net/z774884795/article/details/84745141