1. 程式人生 > >(jsp四)簡單功能的實現:顯示

(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;

    }