`
jiangduxi
  • 浏览: 453308 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JSP开发中的常用技巧

阅读更多
不同页面或者用户之间共享数据
  在JSP中共享数据,大体上分为两种情况,第一种是在同一个用户的不同页面之间共享数据,另一种是在不同用户之间共享数据。
  对于同一个用户的会话,要想在不同的页面之间共享数据,可以有以下几种选择:
  1.1 把数据保存在Session中
  1.2 通过Cookie
  1.3 通过隐含的表单把数据提交到下一个页面
  1.4 通过ServletContext对象
  1.5 通过application对象
  1.6 通过文件系统或者数据库
要在不同用户之间共享数据,通常的方法是:
  1.1 通过ServletContext对象
  1.2 通过application对象
  1.3 通过文件系统或数据库
可见,对于在不同用户之间共享数据的实现方法,在同一个用户的不同页面也能实现数据共享。

  在不同页面之间共享数据
1. 使用Session共享数据
     用户在浏览网页时,由于HTTP协议时一种无状态的协议,往往在不同的页面之间存在数据交换的问题,这就需要在这些不同的页面之间共享数据。在编程实现中,我们最常见的实现方法是把共享的数据保存到Session中。比如在用户登录的页面把一些用户的信息保存到Session之中,然后在其他的页面中读取用户的信息。
    这些共享的数据可以是字符串或者与Java的原始数据类型相关的对象,也可以是一个Java对象。
  下面看一个实例。用户登录时,如果验证成功,就把登录的信息保存在一个userSession类中,在其他的页面可以读取这个值。
   package com.test.ch10;
   import java.util.Date;
   
   public class UserSession
   {
     
      private boolean isLogin=false;
      private String userId;
      private Date lastLoginTime;
      private int logCount;
 
      public void setIsLogin(boolean l)
      {
         this.isLogin=l;
      }

      public void setUserId(String userId)
      {
            this.userId=userId;
      }
      
      public void  setLastLoginTime(Date d)
      {
          this.lastLoginTime=d;
       }
   
      public void setLogCount(int logCount)
      {
          this.logCount=logCount;
      } 

      public boolean isLogin()
      {
          return this.isLogin;
       }
     
       public String getUserId()
       {
           return this.userId;
        }

       public Date getLastLoginTime()
       {
             return this.lastLoginTime;          
        }
 
       public int getLogCount()
       {
         return this.logCount;
        }

    }
    
这里是一个JavaBean下面看jsp页面
   <%@page contentType="text/html;charset=gb2312" 
       language="java" import="java.sql.*",com.test.ch10.* errorPage=""%>
<html>
  <head>
     <title>Test Login Page</title>
     <meta http-equiv="Content-Type" context="text/html;charset=gb2312">
  </head>
<body>
  <%
    String name=request.getParameter("name");
    String password=request.getParameter("password");
    //连接数据库,进行登录
   int logCount=resultSet.getInt("count");
  java.util.Date lastLoginTime=resultSet.getDate("lastLogintime");
  UserSession user=new UserSession();
  user.setUserId(name);
  user.setIsLogin(true);
  user.setLastLoginTime(new java.util.Date);
  user.setLogCount(10);
  session.setAttribute("userSession",user);
  response.sendRedirect("welcome.jsp");
   %>
</body>
</html>

假设这个登录页面的处理如下:
(1) 获得用户登录信息
(2) 连接数据库,进行权限验证
(3) 如果验证通过,那么读取用户的注册信息
(4) 把用户的注册信息保存到一个userSession对象中
(5) 把userSession对象保存到Session内建对象中
(6) 把视图派发到下一个显示页面。
需要注意的是session.setAttribute("userSession",user)把userSession的一个对象设置到Session中,Session只能保存对象,不能保存原生类型。例如
session.setAttribute("count",10)
是非法的语句,如果要把值10的整数保存到Session中,需要以下的方法:
session.setAttribute("count",new Integer(10)),
然后在另一个页面中使用:
(Integer)session.getAttribute("count");
把这个整数读取出来。
接下来看weclome.jsp页面
      <%@page contentType="text/html;charset=gb2312" 
       language="java" import="java.sql.*",com.test.ch10.* errorPage=""%>
.......
 <%
   UserSession user=(UserSession)session.getAttribute("userSession");
   try{
     if(user.isLogin()){
          out.println("欢迎你,你的登录ID是:"+user.getUserId());
          out.println("你上次登录的时间是:"+user.getLastLoginTime());
          out.println("现在是你第:"+user.getLogCount()+"次登陆此网站");
        }else{
           response.sendRedirect("login.jsp");
        }
      }
   catch(Exception e){
        response.sendRedirect("login.jsp");
    }
  %>
....

可以看出,通过:
UserSession user=(UserSession)session.getAttribute("userSession");
代码来读取在前一个页面中设置的对象,然后再从这个对象中读取一些相关的值
  当然也可以使用JavaBean的形式,如在login.jsp中使用的JavBean
   ...
   <jsp:useBean id="user" class="com.test.ch10.UserSession" scope="session"/>
<%
   String name=request.getParameter("name");
    String password=request.getParameter("password");
    
  user.setUserId(name);
  user.setIsLogin(true);
  user.setLastLoginTime(new java.util.Date);
  user.setLogCount(10);
  response.sendRedirect("welcome.jsp");
%>

注意在这个代码段里面的JavaBean的范围是Session。同样,在另一个页面中也可以使用
<jsp:useBean>指令获得前面的JavaBean
   ...
   <jsp:useBean id="user" class="com.test.ch10.UserSession" scope="session"/>
<%
  try{
     if(user.isLogin())
        {
        out.println("欢迎你,你的登录ID是:"+user.getUserId());
..............              
%>

在<jsp:useBean>指令中,由于指定了它的scope为Session,如果在Session中已经有一个userSession的JavaBean,那么直接使用它;如果还没有这个JavaBean,就创建一个新的JavaBean。由于在前面的页面中已经创建了JavaBean,这里简单地去读它的值就可以了。其实这种共享数据的方式和session.setAttribute("name","value")的本质是一样

2.使用Cookie
   和使用Session不同的是,Cookie是放在客户端的。由于客户端可能考虑安全等因素会禁止使用Cookie,这样在不使用Cookie时可能会遇到一些麻烦。
下面我们来看一个使用Cookie的例子。
在客户端设置Cookie(setCookie.jsp)
  <%@ page contentType="text/html;charset=gb2312"
      langauge="java" import="java.sql.*,javax.servlet.http.*,com.test.ch10.*"errorPage=""%>
<%
    Cookie cookie=new Cookie("lastLoginTime",new java.util.Date().toLocaleString());
response.addCookie(cookie);
%>
//已经在客户端设置了Cookie,你可以在<a href="getCookie.jsp">这个</a>页面中读取这个Cookie

在这种方式中,首先创建Cookie,然后通过response.addCookie()方法把Cookie添加客户端。

下面我们看怎么在另一个页面中读取这个Cookie。
在另一个页面中读取Cookie(getCookie.jsp)
  <%@ page contentType="text/html;charset=gb2312"
      langauge="java" import="java.sql.*,javax.servlet.http.*,com.test.ch10.*"errorPage=""%>
   <%  Cookie[] cookies=request.getCookies();
       for(int i=0;i<cookies.length;i++){
            Cookie c=cookies[i];
            String name=c.getName();
          if(name.equals("lastLoginTime"))
             out.println("你上次登录的时间是:"+c.getValue());
            }
  %>

在这个页面中,首先获得客户端的所有Cookie,然后从Cookie中获得目标的Cookie以读取它的值。

3.使用隐含的表单
    这种方式通过隐含表单的形式把数据传递到下一个页面,它有两个局限性:
1. 只能在相邻的两个页面之间传递数据
2. 客户端可以通过查看网页源代码的方法获得表单中的数据,安全性不好。
简单看下它的使用方法:(不建议使用。知道就可以)
  <form action="target.jsp">
   <input type=hidden name="test" value="test"/>
   <input type=hidden name="tes2" value="test2"/>  
</form>
//在另一个页面中,通过以下的方式获得这些数据
String test=request.getParameter("test");
String test2=request.getParameter("test2");
分享到:
评论

相关推荐

    jsp开发中常用知识

    以下是一些在JSP开发中常见的知识点: 1. **JSP基本语法**:JSP是基于Java的动态网页技术,它允许在HTML页面中嵌入Java代码。JSP页面由两部分组成——静态内容和动态脚本元素。动态脚本元素包括`&lt;% %&gt;`、`&lt;%= %&gt;`和...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    包括JSP编程中常用的js技术。 1.JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单? 5. java中如何把一个目录下的文件移到另一个指定的目录? 6. ...

    成为JSP开发员9步骤

    在这个阶段不需要过多涉及Swing或Java图形界面的相关知识,因为这些在JSP开发中并不常用。相反,应该把注意力集中在Java的工作原理、逻辑思维以及JavaBean的应用上。学习Applet虽然有助于拓宽视野,但在实际项目中...

    专家门诊-JSP开发答疑200问

    本书精选了230多个实用性很强的问题和常用需求,旨在帮助读者解决在JSP应用程序开发中经常遇到的实际问题,提高程序开发效率。本书内容涵盖了搭建开发环境、JSP基础知识、JavaBean高级应用、JSP高级组件、表单验证、...

    JSP网络开发入门与实践

    本书全面、细致地介绍了JSP网络开发技术的原理和基本编程...本书不仅适合JSP网络开发技术的初学者,还能够帮助有一定编程经验的JSP开发人员解决开发中遇到的问题。同时本书也可作为高等院校计算机相关专业的参考用书。

    jsp网页开发常用代码

    根据给定的信息,我们可以总结出以下关于JSP网页开发中常用的代码知识点: ### 1. 禁止右键菜单和其他浏览器默认行为 在JSP页面中,有时我们需要禁止用户的一些默认操作,例如右键菜单、拖拽选择等。下面的代码...

    JSP中常用的技巧.ppt

    在JSP(Java Server Pages)...这些技巧是JSP开发中不可或缺的基础,掌握它们能够帮助开发者构建更高效、稳定和易于维护的Web应用程序。在实际项目中,还需要结合Java编程、Servlet技术以及Web容器的特性进行综合运用。

    jsp编程中的小技巧(仅供参考)

    在JSP(JavaServer Pages)开发过程中,经常会遇到一些需要技巧性处理的问题,本文将重点介绍两个常见的小技巧:如何获取虚拟目录的物理路径以及如何解决`response.sendRedirect`带中文的问题。此外,还会简要提及...

    jsp编程技巧集锦

    JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单? 5. java中如何把一个目录下的文件移到另一个指定的目录? 6. 制作表格线? 7...

    JSP经典开发技巧 图表系统 JFreeChat 以及MVC架构

    本篇文章将深入探讨一些JSP开发中的经典技巧,包括客户端编程、发送Email、绘制图形、文件上传、编写国际化应用,以及使用JFreeChart图表系统和MVC架构。 首先,客户端编程是Web应用的重要组成部分。动态表格的实现...

    Ajax+JSP网站开发从入门到精通

    《Ajax+JSP网站开发从入门到精通》的源代码,全书共分为16章,包括JSP的基础知识、JSP访问外部数据、JSP高级技术、Ajax概述、Ajax相关技术、Ajax开发基础、Ajax开发模式、Ajax框架、Ajax常用技巧。本书最后介绍了6个...

    JSP应用开发详解第三版完整源代码

    这份源代码包含了作者在书中所讲解的各种JSP开发实例,覆盖了从基础到高级的各种主题。 **JSP技术介绍**: JSP是Java平台上的动态网页技术,它允许开发者将静态HTML内容与动态Java代码结合,以创建数据驱动的Web...

    JSP网络开发实例自学手册.rar(明日科技)

    接着,会逐步深入到EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),这些都是简化JSP开发的工具,使代码更加简洁易读。 在实例部分,书中可能会涵盖如用户登录、注册、数据展示、表单...

    JSP系统开发与设计实例教程

    通过实际操作这些例子,你可以更好地理解和掌握JSP开发的技巧。这些实例可以帮助你在实践中学习,从简单的页面展示到复杂的业务逻辑处理,逐步提升你的开发技能。 总的来说,"JSP系统开发与设计实例教程"是一个全面...

    JSPweb开发技术与典型应用下

    JSP入门、HTTP和Servlet基础、JSP基本语法、JSP内置对象、JavaBean开发、MVC模式、JSP开发常用技巧、表达式语言、JSTL、自定义标签、JDBC、JSP实用开发技术、综合应用实例以及Struts/Hibernate/Spring初步等

    jspsmart(支持中文下载)

    7. **集成开发环境(IDE)集成**:可以与Eclipse、IntelliJ IDEA等主流IDE无缝集成,让开发者在熟悉的环境中进行JSP开发。 **三、JSpsmart的安装与配置** 1. **下载**:首先,从官方渠道或指定的资源库下载JSp...

Global site tag (gtag.js) - Google Analytics