servlert生成session传到jsp,servlert从jsp页面获取session的值

今天更是进一步理解了对象的含义。是的,楼主是条单身狗。但是我还是更深一步的理解了面向对象中对象的含义呀(呸,卖什么萌。。。。。。)。

首先做个简单的例子,jsp页面偏爱于el标签。el标签真的很舒服的说,虽然学的不行。

login的servlert

public class Login extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		String uname = request.getParameter("username");
		String pword = request.getParameter("password");
		
		List list = Db.getAll();//这里并没有新建一个对象,但是下面static定义的内容已经加载了
		for(UserBean u: list)
		{
			if(u.getUname().equals(uname) && u.getPword().equals(pword))
			{
				request.getSession().setAttribute("user", u);
                                response.sendRedirect("index.jsp");
				return;
			}
			
			out.write("erererererer");
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request,response);
	}

}

//新建一个类,类里先放一些用户的信息,方便登录验证,暂时替代了SQL的相同部分
class Db
{
	public static List list = new ArrayList();
	//方便在没有创建对象的情况下来进行调用(方法/变量)。
	static{
		list.add(new UserBean("a","1"));
		list.add(new UserBean("b","1"));
		list.add(new UserBean("c","1"));
		
	}
	public static List getAll()
	{
		return list;
	}
}

对应的登录jsp页面


    
帐号:
密码:

登录成功的页面

 
    欢迎您,${user.uname} 
退出登录
要知道session在生成了之后会一直存在的,所以在其他的页面也都可以直接显示出来登录名


    欢迎您,${user.uname}
  
当然具体会有一些操作session的方法和内容,这些等待我这个渣渣去学习。

对应的退出servlert

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		HttpSession session = request.getSession(false);
		if(session == null)
		{
			response.sendRedirect("index.jsp");
			return;
		}
		session.removeAttribute("user");
		response.sendRedirect("index.jsp");
	}
对应的userbean

public class UserBean {

	private String uname;
	
	private String pword;
	
	public UserBean(String uname,String pword)
	{
		this.uname = uname;
		this.pword = pword;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getPword() {
		return pword;
	}

	public void setPword(String pword) {
		this.pword = pword;
	}
	
	
}
当然大多数时候我们需要获取到当前的用户信息,比如当前的用户名,密码。

正常的获取servlert的方法是

HttpSession session =request.getSession();
session.getAttribute("user");
这个时候我们就获取到了user这个对象。为了获取对象中包含的用户名,我们需要强制转换,然后get我们需要的值

((UserBean)session.getAttribute("user")).getUname();

这个过程中,对于面向对象的理解会更好一点。

当然其实有一个方法就不需要这么麻烦了。

在创建session的时候,只把登录名放进去。

if(u.getUname().equals(uname) && u.getPword().equals(pword))
  {
    request.getSession().setAttribute("username", u.getUname());
    response.sendRedirect("index.jsp");
    return;
  }
然后获取的时候就直接获取

System.out.println(session.getAttribute("username"));

这样子就可以了

但是实际上,不可能只在session里放一个名字的。



你可能感兴趣的:(JAVA)