JavaWeb基础知识总结. (12)

我们已经学习过HttpServletRequest、ServletContext,它们都是域对象,现在我们又学习了一个HttpSession,它也是域对象。它们三个是Servlet中可以使用的域对象,而JSP中可以多使用一个域对象,明天我们再讲解JSP的第四个域对象。

l HttpServletRequest:一个请求创建一个request对象,所以在同一个请求中可以共享request,例如一个请求从AServlet转发到BServlet,那么AServlet和BServlet可以共享request域中的数据;

l ServletContext:一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用中共享,只要不启动服务器,那么ServletContext中的数据就可以共享;

l HttpSession:一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据;

下载是session的域方法:

l void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:session.setAttribute(“xxx”, “XXX”),在session中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

l Object getAttribute(String name):用来获取session中的数据,当前在获取之前需要先去存储才行,例如:String value = (String) session.getAttribute(“xxx”);,获取名为xxx的域属性;

l void removeAttribute(String name):用来移除HttpSession中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

l Enumeration getAttributeNames():获取所有域属性的名称;

2 登录案例

需要的页面:

l login.jsp:登录页面,提供登录表单;

l index1.jsp:主页,显示当前用户名称,如果没有登录,显示您还没登录;

l index2.jsp:主页,显示当前用户名称,如果没有登录,显示您还没登录;

Servlet:

l LoginServlet:在login.jsp页面提交表单时,请求本Servlet。在本Servlet中获取用户名、密码进行校验,如果用户名、密码错误,显示“用户名或密码错误”,如果正确保存用户名session中,然后重定向到index1.jsp;

当用户没有登录时访问index1.jsp或index2.jsp,显示“您还没有登录”。如果用户在login.jsp登录成功后到达index1.jsp页面会显示当前用户名,而且不用再次登录去访问index2.jsp也会显示用户名。因为多次请求在一个会话范围,index1.jsp和index2.jsp都会到session中获取用户名,session对象在一个会话中是相同的,所以都可以获取到用户名!

login.jsp

<%@ page language=http://www.likecs.com/"java" import=http://www.likecs.com/"java.util.*" pageEncoding=http://www.likecs.com/"UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>login.jsp</title>

</head>

<body>

<h1>login.jsp</h1>

<hr/>

<form action=http://www.likecs.com/"/day06_4/LoginServlet" method=http://www.likecs.com/"post">

用户名:<input type=http://www.likecs.com/"text" name=http://www.likecs.com/"username" /><br/>

<input type=http://www.likecs.com/"submit" value=http://www.likecs.com/"Submit"/>

</form>

</body>

</html>

 

index1.jsp

<%@ page language=http://www.likecs.com/"java" import=http://www.likecs.com/"java.util.*" pageEncoding=http://www.likecs.com/"UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>index1.jsp</title>

</head>

<body>

<h1>index1.jsp</h1>

<%

String username = (String)session.getAttribute("username");

if(username == null) {

out.print("您还没有登录!");

else {

out.print("用户名:" + username);

}

%>

<hr/>

<a href=http://www.likecs.com/"/day06_4/index2.jsp">index2</a>

</body>

</html>

 

index2.jsp

<%@ page language=http://www.likecs.com/"java" import=http://www.likecs.com/"java.util.*" pageEncoding=http://www.likecs.com/"UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>index2.jsp</title>

</head>

<body>

<h1>index2.jsp</h1>

<%

String username = (String)session.getAttribute("username");

if(username == null) {

out.print("您还没有登录!");

else {

out.print("用户名:" + username);

}

%>

<hr/>

<a href=http://www.likecs.com/"/day06_4/index1.jsp">index1</a>

</body>

</html>

 

LoginServlet

public class LoginServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

String username = request.getParameter("username");

if(username.equalsIgnoreCase("itcast")) {

response.getWriter().print("用户名或密码错误!");

else {

HttpSession session = request.getSession();

session.setAttribute("username", username);

response.sendRedirect("/day06_4/index1.jsp");

}

}

}

 
3 session的实现原理

session底层是依赖Cookie的!我们来理解一下session的原理吧!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html