四种会话跟踪技术

一、会话
   同一个浏览器进程多次访问服务器,就是一个会话,一个会话包含多个请求。
二、会话跟踪
   将现在页面的数据共享到下面的页面。
三、会话跟踪的四种方式:
 1、url
   在跳转的url地址后面加?XX=XXX,多个用&连接

   数据的保存
 <%
 Sring name = request.getParameter("userName");
 Sring pwd = request.getParameter("userPwd");
 %>
 <form action="suc.jsp?name=<%=name%>&pwd=<%=pwd%>" method="post">
  标题:<input type="text" name="title" />
  内容:<textarea name="content"></textarea>
 
  <input type="submit" value="发表">
 </form>
  suc.jsp中获取数据
        Sring name = request.getParameter("userName");
 Sring pwd = request.getParameter("userPwd");

2、表单隐藏域
    数据保存
    <form action="suc.jsp" method="post">
  标题:<input type="text" name="title" />
  内容:<textarea name="content"></textarea>
  <input type="hidden" name="userName" value="<%=request.getParameter    ("userName") %>">
  <input type="submit" value="发表">
 </form>
 suc.jsp中获取数据
        Sring name = request.getParameter("userName");
 Sring pwd = request.getParameter("userPwd");
3、cookie方式
    服务器上,响应cookie给浏览器

 <% String name = request.getParameter("userName");
    String pwd = request.getParameter("userPwd");
    Cookie cookie = new Cookie("user",name+","+pwd);
    cookie.setMaxAge(1000);
    response.addCookie(cookie);
 
 %>

    浏览器访问服务器的时候会将所有cookie发送给服务器
    在服务器端变量cookie,找到需要的cookie得到账号和密码来自动登录
 <%
 //遍历cookie,不同的网站的cookie的名字是不一样的
 Cookie[] cs=request.getCookies();
 String name ="";
 String pwd="";
 if(cs!=null){
  for(int i=0;i<cs.length;i++){
   if(cs[i].getName().equals("user")){
    String[] str = cs[i].getValue().split(",");
    name=str[0];
    pwd=str[1];
    
   }
  } 
 }
 
 %>

 <form action="cookie.jsp" method="post">
  账号:<input type="text" name="userName" value="<%=name %>" /><br />
  密码:<input type="password" name="userPwd" value="<%=pwd %>" /><br />
  <input type="submit" value="登陆" />
 </form>

4、session
   浏览器访问服务器的时候,请求对象中会包含一个信息,sessionID(通过浏览器的cookie得到),服务器拿到id,如果id为空,或者服务器根据id找不到对应的会话对象,会新生成一个会话对象和id,会话对象保存在服务器,id发送给浏览器,保存在浏览器的临时cookie中,下次浏览器再次发送请求的时候,请求对象中的会话id就是刚才服务器发过来的,服务器就可以找到对应的会话对象,如果将数据保存在会话对象中,只要请求对象中的id不变,就可以访问相同会话对象的数据。
  在session中保存数据
   <%
 //得到数据,保存在session中,重新定向,由于浏览器中的cookie不变,所以服务器还是会找到同一个session对象
 String name = request.getParameter("userName");
 session.setAttribute("userName", name);
 
 response.sendRedirect("sucsession.jsp");
 %>

重定向:浏览器再次访问服务器,请求对象中的会话id就是刚才的id得到的session就是刚才的会话对象
 sucsession.jsp中得到数据
     <% String name=(String) session.getAttribute("userName"); %>
 <%=name %>登陆成功
   

总结:url、隐藏表单域、cookie都是存放在请求对象中,发给服务器,服务器再通过请求对象得到,但是session对象是保存在服务器的,通过请求对象中包含的sessionID来匹配对应的对象
java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束 是一个常见的SQL语法错误,通常发生在使用JDBC连接Oracle数据库时。这个错误的具体含义是SQL语句的语法不正确,导致命令无法正常结束。以下是一些可能的原因和解决方法: ### 可能的原因 1. **SQL语句末尾有多余的分号**:在JDBC中执行SQL语句时,语句末尾不需要加分号。 2. **使用了不支持的SQL语法**:某些SQL语法在JDBC中可能不被支持。 3. **SQL语句中存在拼写错误或语法错误**。 4. **使用了不正确的占位符**:在预编译语句(PreparedStatement)中使用了不正确的占位符。 ### 解决方法 1. **检查SQL语句末尾是否有多余的分号**: ```java String sql = "SELECT * FROM users"; // 正确 // String sql = "SELECT * FROM users;"; // 错误 ``` 2. **确保SQL语法正确**: ```java String sql = "SELECT * FROM users WHERE id = ?"; // 正确 ``` 3. **使用预编译语句(PreparedStatement)时,确保占位符使用正确**: ```java String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, userId); ResultSet rs = pstmt.executeQuery(); ``` 4. **检查SQL语句中是否有拼写错误或语法错误**。 ### 示例代码 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class OracleJDBCExample { public static void main(String[] args) { String url = "jdbc:oracle:thin:@localhost:1521:xe"; String user = "username"; String password = "password"; String sql = "SELECT * FROM users WHERE id = ?"; try (Connection connection = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = connection.prepareStatement(sql)) { pstmt.setInt(1, 1); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println("ID: " + rs.getInt("id")); System.out.println("Name: " + rs.getString("name")); } } catch (SQLException e) { e.printStackTrace(); } } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值