`

j2ee15:jsp04,session的访问控制,分页查询,page include·

    博客分类:
  • j2ee
 
阅读更多

第一:基本概念

1.<script>alert("提示");history.back()</script>:这个是本地的东西,向上一步,因此能看到我们以前填写表单时候的数据
2.<script>alert("提示");location.href=""</script>:这个相当于重定向
3.会话:会话就是客户端和服务器的对话,会话是一个过程(时间段),不是一瞬间。会话是通过请求与响应完成的。
 因此会话就是客户端和服务器的多次请求和响应的过程。(一次请求就是一次发送地址,一次响应就是服务器端对这次请求的响应)
4.再次注意:request,response,session等都可以当成容器
5.session的中文意思是会话。这个session容器封装了客户端与服务器端的多次交互(请求与响应)的数据。也就是说session容器封装了数据。对象也是封装数据的,因此也可以理解成是个session对象
6.session因为能够封装多次交互数据,因此session里面封装的是个集合。这些数据在栈内存中保存着。还有就是session。setAttribute(),这个是个键值对集合。
7.当客户端第一次向服务器端发送请求的时候,服务器会自动开启会话(也就是产生一个session对象),把这个session对象保存在了服务器端的内存中。
   但是这个session对象里不一定有内容。
8.因为session是个过程,因此第一次产生的数据在最后一次会话中也有效。
9.request的转发也能够向下传递内容,但是只限于在服务器端的多次向下,当服务器响应客户端的时候这个request就结束了。
因此,request是一次会话过程,sessoin是多次会话
10.由于在客户端第一次发送请求的时候就会产生一个session对象,也就是在第一次执行request的时候产生了一个session对象,因此使用request对象可以获得session对象。
11.访问控制的实现:判断sessin对象是否保存到了特定的值。也就是在第一个页面使用session.setAttribute来封装值,在第二个页面使用session.getAttribute来获取值,然后判断这个获取的值是不是空,如果是空就进禁止访问。
12.当使用session成功之后,在打开其他浏览器,照样能够访问这个session对象。也就是说一个客户端对应着一个session对象(在bs项目中浏览器就是客户端),也就是说一个浏览器就是一个客户端,因此只要在一个浏览器上就算是一个客户端,因此可以在打开一个窗口访问相同的页面。
  不同的客户端不能共享session里面的数据(也就是换个浏览器就会产生一个新的session对象)
13.session的结束:
       ------1.关闭浏览器的时候当前会话就结束了。但是服务器中的session对象此时还没有消失,因为是在本地电脑关闭的浏览器,因此不会影响服务器端内存的session的存在。
       ------2.session的声明周期小于访问的间隔时间(就是说过一段时间在访问的时候就要重新登陆),其实就是session在服务器端的内存中会定时清空,session消失,默认是30分钟。  session.MaxInactiveInterval(30):最大有限时间
       ------3.session.invalidate() :让当前session对象销毁 。
       ------4.session.removeAttribute():是删除session中指定键,也就是清空(销毁)了session对象里面封装的某一个值。
14.session.getId是获得这个session的id  :说明只要在服务器上产生一个session就会产生一个session的id,
   问:服务器端有很多session的id,服务器端如何判断哪个客户端对应着哪个id的?
   答:服务器端响应客户端的时候除了响应给客户端相应的内容外,还携带着session的id,也就是说session可以跟踪与客户端的会话。
      但是当我们关闭浏览器的时候,服务器端的session对象找不到客户端了,因此不知道把id往哪里传了,但是服务器端的这个session还存在。
15.当很多页面都需要进行访问控制的时候,就要把有关访问控制的代码封装起来,
   此时引入了<%@page include file="路径"%>,这是代码的包含。这个指令是页面包含指令,是在编译的时候进行包含的,先合并代码在执行。
16.分页查询:
    ----1.思想:把sql语句部分进行修改
    ----2.oracle中的两个伪列(任何表都有这两个):rowid:指的是数据的地址,rownum:是从1开始的数据表中数据的行数。
          select student.* ,rownum from student where rownum>3。这样查询查不出来,是因为这个rownum是从1开始的,不是从4开始的,因为使用大于号的话伪列就不是固定的了。
               注意rownum是对查询结果进行编号,不是对表的原始数据进行编号。 因此在使用rownum的时候必须使用小于号,不能使用大于号。
   ---- 3.这是正确的:select * from(
                select student.* ,rownum  rn from student where rownum<=6)
                where rn>3;
            注意:此时的rn是子表中的固定的列了,不是伪列了。
     ----4.分页的两个重要参数:页数和页的大小。pageNum和pageSize,因此出现pageNum*pageSize和(pageNum-1)*pageSize
17.分页跳转到具体页的时候的时候可以去尝试改变表单的action路径,用javascript做
  在跳转到具体页的时候要输入具体的页数,此时最好判断一下输入的是不是数字,用正在表达式。或者用event.keyCode()

 

 

第二:相关代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="checkSession.jsp"%>
<%@ page import="com.dao.*" %>
<%@ page import="com.dao.impl.*" %>
<%@ page import="com.entity.*" %>


<%

String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
  
   <form action="doBatDelete.jsp" method="post" name="myform">
   <table border="1" align="center" >
    <tr>
    
     <th><a href="javascript:document.myform.submit()">批量删除</a></th>
     <th>学号</th>
     <th>姓名</th>
     <th>年龄</th>
     <th>地址</th>
     <th>性别</th>
     <th>电话</th>
     <th>操作</th>
    </tr>
    <%
     int pageNum=1;
     int pageSize=3;
     
     String pn = request.getParameter("pn");
     if(pn!=null)
     {
      pageNum=Integer.parseInt(pn);
     }
     if(pageNum<1)
     {
      pageNum=1;
     }
     
     
     StudentDao dao=new StudentDaoImpl();
     
     //List<Student> stuList=dao.searchAllStu();
     List<Student> stuList=dao.seachStudent(pageNum,pageSize);
     for(int x=0;x<stuList.size();x++)
     {
      Student stu =stuList.get(x);
    %>
      
       <tr>
        <th><input type="checkbox" name="cbks"  value="<%=stu.getSno() %>"/></th>
       <th><%=stu.getSno() %></th>
       <th><%=stu.getSname() %></th>
       <th><%=stu.getSage() %></th>
       <th><%=stu.getSaddress() %></th>
       <th><%=stu.getSsex() %></th>
       <th><%=stu.getStel() %></th>
       <th><a href="doDelStudent.jsp?sno=<%=stu.getSno()%>">删除</a>|
       <a href="showStudent.jsp?sno=<%=stu.getSno()%>">修改</a>
       </th>
      </tr>
    <%
   
     }
     
     %>
    
     <tr>
    
     <th colspan="8">
      <a href="index.jsp?pn=<%=pageNum-1 %>">上一页</a>
      <a href="index.jsp?pn=<%=pageNum+1%>">下一页</a>
     </th>
     
    </tr>
    </table>
    </form>
  </body>
</html>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics