当前位置:编程学习 > JAVA >>

关于session的用法

急~ 各位帮帮忙,可以告诉我如何在登录的时候设置session,然后再从其他方法中取出session的值吗?
假如我在登录的时候,在session里面保存了用户名,然后我想在另外一个方法中取出保存在session里面的用户名的值,再把它赋给其他变量,该怎么写代码呢?不是在jsp页面里面取,而是在java方法里面取哦~ --------------------编程问答-------------------- lz高人,太强大了 --------------------编程问答-------------------- 哎,怎么没人指导一下呢,太伤心了… --------------------编程问答-------------------- 先看看session是啥在问问题 --------------------编程问答-------------------- 你要把session传到方法里面去,类型是HttpSession,
在某个类中某个方法想得到session里的值,这个方法必须有个参数为HttpSession
例如
   public void show(HttpSession session){
    System.out.print(session.getAttribute("name"));
}

在jsp里调用就是类似
   那个类.show(session); --------------------编程问答-------------------- java里面
HttpSession session = request.getSession();
session.setAttribute("username","xuz");

jsp里面可以 
ression.getAttribute("username");

java里面可以
HttpSession session = request.getSession(); 
session.getAttribute("usrname"); --------------------编程问答-------------------- 首先你的Java类里面要继承HttpServlet或者是要有HttpSession,HttpServletRequest类型的参数。
那样就可以在java类中找到Session并且取出值来了。
 public void show(HttpServletRequest request){
   HttpSession session=request.getSession();
  String name=(String)session.getAttribute("name");
}
--------------------编程问答-------------------- java方法 ?.  需要servlet环境的.

HttpSession session=request.getSession();
String name=(String)session.getAttribute("login_name");



session.setAttribute("login_name",name); --------------------编程问答-------------------- 在jsp中,只要在登录页面写了,session.setAttribute("U","users")
在其它任何页面只要想得到session的值,session.getAttribute("U");
即可得到值为“users”,因为session贯穿于整个页面始终..... --------------------编程问答-------------------- 有时还须考虑你的程序框架来思量 --------------------编程问答-------------------- session的键值可以再服务端取出来?!!! --------------------编程问答-------------------- 恩,如果使用的是struts2你可以这样
存  :HttpSession session=ServletActionContext.getRequest().getSession();
     session.setAttribute("admin", admin);     //admin是一个对象,你也可以去他的一个属性
取  :HttpSession session=ServletActionContext.getRequest().getSession();
     Admin admin=(Admin) session.getAttribute("admin"); --------------------编程问答--------------------
设置:
HttpSession session = request.getSession();
session.setAttribute("username","xuz");
取得:
get
--------------------编程问答-------------------- 学习中........ --------------------编程问答--------------------
引用 7 楼 tonyzzp 的回复:
java方法 ?. 需要servlet环境的.

HttpSession session=request.getSession();
String name=(String)session.getAttribute("login_name");



session.setAttribute("login_name",name);


支持

纯java代码中获取session,我也想知道 --------------------编程问答-------------------- 你真吓人 --------------------编程问答--------------------
HttpSession session=ServletActionContext.getRequest().getSession();
  session.setAttribute("admin", admin);
Struts2里面可以在Java的类里拿到HttpSession --------------------编程问答-------------------- 可怜,目前只会在JSP页面中取,同学习。 --------------------编程问答-------------------- HttpServletRequest request 作为方法的输入参数

存:
request.getSession().setAttribute("admin","admin");

取:
HttpSession session = request.getSession();
session.getAttribute("admin");

就这么简单,而上面的对象 HttpServletRequest 是 javax.servlet.http.HttpServletRequest;

HttpSession  是 javax.servlet.http.HttpSession;

--------------------编程问答-------------------- String  usename = request.getParameter("usename");

HttpSession session = (HttpSession) request.getSession();

session.setAttribute("usename", usename);

如果要持久化的话使用cookie. --------------------编程问答-------------------- lz说的session,无论用什么框架,最终都是从Servlet或者Filter中取得。归根到底,只要能取得request,就能取得session。
取得session用的是request.getSession。这里有个地方要注意:如果request.getSession(false)。那么session过期的时候返回的是null,默认情况下request.getSession()等于request.getSession(true)。意思是如果session过期则自动创建一个新session。放入session用的是session.setAttribute方法。他有两个参数,前面一个参数是key,是String,后面一个参数是真正用来存放信息的对象,是object。从session中取信息的方法是session.getAttribute,他只有一个参数,就是key。
参考代码:

package org.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.test.LoginUser;

public class TestServlet extends HttpServlet {
/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, 
 HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, 
  HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

private void process(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);

// Session过期
if (session == null) {
request.getRequestDispatcher("/timeout.html").forward(request, response);
return;
}

// 取得
LoginUser user = (LoginUser)session.getAttribute("user");

// 放入
LoginUser user2 = new LoginUser();
user2.setName("test");
session.setAttribute("user", user2);
}
}


web.xml中加入
<servlet>
   <servlet-name>TestServlet</servlet-name>
   <servlet-class>org.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>TestServlet</servlet-name>
   <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>

--------------------编程问答-------------------- 在action中:
/** 把用户名存入Session中 */
ActionContext.getContext().getSession().put("userName", tempUser.getName());

获取
ActionContext.getContext().getSession().get("userName"); --------------------编程问答-------------------- java代码和jsp有很大区别吗? --------------------编程问答-------------------- HttpSession session=request.getSession();
String name=(String)session.getAttribute("login_name");
  然后在把 name 发送到你需要用到的 业务类中。 --------------------编程问答-------------------- HttpSession session = (HttpSession) request.getSession();

session.setAttribute("usename", usename); --------------------编程问答-------------------- LZ的意思,是否是自己生成,并管理Session?而不是用现成的BS架构? --------------------编程问答--------------------
引用 5 楼 dr_lou 的回复:
java里面
HttpSession session = request.getSession();
session.setAttribute("username","xuz");

jsp里面可以 
ression.getAttribute("username");

java里面可以
HttpSession session = request.getSession(); 
……


一般就这么用的 --------------------编程问答-------------------- java方法 ?. 需要servlet环境的.

HttpSession session=request.getSession();
String name=(String)session.getAttribute("login_name");



session.setAttribute("login_name",name); --------------------编程问答--------------------
引用 20 楼 rainsilence 的回复:
lz说的session,无论用什么框架,最终都是从Servlet或者Filter中取得。归根到底,只要能取得request,就能取得session。
取得session用的是request.getSession。这里有个地方要注意:如果request.getSession(false)。那么session过期的时候返回的是null,默认情况下request.getSession()等于reque……


正如上所说,纯java是无法拿到Servlet中的几大对象的,若真需要拿,有这么一种常规的方法:因为得不到,所以只有传递过来,而得到request,就得到session,所以只要拿到request即可,此类定义一个变量用于记住request,并且定义一个带参的构造函数来接受该变量,示例代码如下:
package play.itcast.demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class ObtainSession {
private HttpServletRequest request;
public ObtainSession(HttpServletRequest request)
{
this.request = request;
}

public void test(){
this.request.getSession();
}
}
--------------------编程问答-------------------- 学习中··· --------------------编程问答-------------------- 这边set,那边get --------------------编程问答--------------------        其实LZ的想法很简单。
   在登录的时候在servlet里面。
你可以这样做。HttpSession session=request.getSession();
    用你的JavaBean 封装你的用户(user)对象。然后再,
session.setAttribute("user",user);

然后再你需要在其他servlet用到这个用户对象时,你可以
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");

你如果在java类中要用的话。那么你可以把这个对象在servlet
里面取出来然后当做参数传过去。你就可以用了。

如果在jsp页面想得到session里面的用户对象的话。你可以
User user=(User)session.getAttribute("user");
直接得到。



--------------------编程问答-------------------- --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习一下 说的都挺好  --------------------编程问答-------------------- Jsp中Session是隐含对象,可以直接使用。
Java类中需要通过调用方法得到Session对象。 --------------------编程问答-------------------- package com.hotel;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class getSession {

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, res);
}

protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
req.setCharacterEncoding("GBK");
res.setCharacterEncoding("GBK");
String msg="";
String action = req.getParameter("action");
HttpSession session=req.getSession(true);
if(action.equals("login"))
{
session.removeAttribute("uname");
String uname=req.getParameter("uname").trim();
String pwd=req.getParameter("pwd").trim();
String sqla="select * from users where uname='"+uname+"'";
if(DB.isExist(sqla))
{
String sql="select pwd from users where uname='"+uname+"'";
String password=DB.getInfo(sql).trim();
if(pwd.equals(password))
{
session.setAttribute("uname",uname);  //set session
res.sendRedirect("index.jsp");
    }
else
{
msg=uname+"密码不正确!!!<br><br>"+
       "<a href=login.jsp>重新登陆</a>";
req.setAttribute("msg",msg);
req.getRequestDispatcher("info.jsp").forward(req,res);
}
   }
else
{
msg=uname+"此用户名不存在!!!<br><br>"+
     "<a href=login.jsp>重新登陆</a>";
req.setAttribute("msg",msg);
req.getRequestDispatcher("info.jsp").forward(req,res);
}
   }
else if(action.equals("changePwd"))
{
String uname=(String)session.getAttribute("uname");//get session
String currentPwd=req.getParameter("currentPwd").trim();
String newPwd=req.getParameter("newPwd").trim();
String sqla="select pwd from users where uname='"+uname+"'";
String pwdFromDB=DB.getInfo(sqla);
if(currentPwd.equals(pwdFromDB))
{
String sqlb="update users set pwd='"+newPwd+"' where uname='"+uname+"'";
DB.update(sqlb);
msg="密码修改成功!!!下一次请用新密码登陆。<br>";
}
else
{
msg="您输入的密码不正确,修改失败!!!<br><a href=changeMyInfo.jsp>返回继续修改???";
}
req.setAttribute("msg", msg);
req.getRequestDispatcher("info.jsp").forward(req, res);
}

 }
} --------------------编程问答--------------------
引用 22 楼 xuhuanchao 的回复:
java代码和jsp有很大区别吗?



非常赞同 --------------------编程问答-------------------- 学到东西了,谢谢各位! --------------------编程问答-------------------- 这么多正确答案,呵呵 --------------------编程问答-------------------- 为了得分 --------------------编程问答--------------------
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,