1 Cookie
1.1 概述
服务器脚本向浏览器发送一组Cookie。例如:姓名、年龄或识别号码等。
浏览器将这些信息存储在本地计算机上,以备将来使用。
当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。
1.2 创建并设置
1.2.1 创建
Cookie cookie1 = new Cookie("username", username);
// 为名字和姓氏创建 Cookie
Cookie name = new Cookie("name",URLEncoder.encode(username, "UTF-8")); // 中文转码
1.2.2 设置有效时间
cookie1.setMaxAge(10*24*60*60);
1.2.3 设置关联路径
cookie1.setPath(request.getContextPath());
1.2.4 写入cookie
response.addCookie(cookie1);
1.3 得到并使用
1.3.1 得到cookie
得到一个数组
Cookie[] cookies = request.getCookies();
后面步骤通过for遍历得到每一个cookie
1.3.2 遍历cookie
1.3.3 得到cookie的name和value
String cookieName = cookie.getName();
String cookieValue =cookie.getValue();
1.3.4 根据name得到value
if ("username".equals(cookieName)) {
username= cookieValue;
}
补充:
假如记录的用户名和密码,不要被固始思维困扰,此时就不要请求作用域(ognl)的数据,传入的是上面在cookie获得的参数,
还有一点很重要,假如从cookie获得用户名和密码,不要吝啬servlet(action),就不要写在原来那个需要登录访问的servlet(action),再建一个servlet,重复原来的部分功能都可以
2 十天免登录原始
2.1 先搭建登录环境
2.1.1 Jsp
2.1.1.1 login.jsp
<body>
<form action="LoginServlet" method="post">
用户名:<input type="text" name="username"/> <br />
密码:<input type="password" name="password" /> <br />
<input type="checkbox" name="day10" value="ok"/>十天 <br />
<input type="submit" value="提交"/>
</form>
</body>
2.1.1.2 成功页面one.jsp
<body>
登录陈宫<%=session.getAttribute("username") %>
</body>
2.1.1.3 失败页面fair.jsp
<body>
失败
</body>
2.1.2 Servlet
2.1.2.1 登录UserServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
System.out.println(user.getUsername());
//连接数据库验证用户密码
UserService userService = new UserService();
boolean flag = userService.login(user);
//登录成功跳转,失败跳到失页面
if (flag) {
request.getSession().setAttribute("username", user.getUsername());
response.sendRedirect("one.jsp");
} else {
response.sendRedirect("fair.jsp");
}
}
2.1.3 Service
public boolean login(User user) {
UserDao userDao = new UserDao();
return userDao.login(user);
}
2.1.4 Dao
public boolean login(User user) {
Connection conn = new DbUtil().getDBConn();
PreparedStatement pstmt;
ResultSet res;
boolean flag = false;
try {
String sql = "SELECT * FROM t_user WHERE username = ? AND PASSWORD = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
res = pstmt.executeQuery();
if (res.next()) {
flag = true;
}
System.out.println(flag);
return flag;
} catch (SQLException e) {
e.printStackTrace();
return flag;
}
}
2.1.5 Bean
2.1.6 Utils
//连接数据库 登录界面
public class DbUtil {
String url = "jdbc:mysql://localhost:3306/cookie" ;
String username = "root" ;
String password = "root" ;
Connection con = null ;
public Connection getDBConn(){
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection(url,username,password);
return con;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
2.2 Cookie修改
2.2.1 实现思路
获得cookie的username和password,然后servlet重新请求,说白了就是新建一个servlet
新建是servlet作为程序的入口
2.2.2 Sevlet—修改UserServlet
String day10 = request.getParameter("day10");
System.out.println(day10);
if ("ok".equals(day10)) {
//创建cookie
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("password", password);
//设置有效时间
cookie1.setMaxAge(10*24*60*60);
cookie2.setMaxAge(10*24*60*60);
//设置关联路径
cookie1.setPath(request.getContextPath());
cookie2.setPath(request.getContextPath());
//发送cookie给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
2.2.3 Servlet—isLogin,
程序入口改为这个
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request获取所有cookie
Cookie[] cookies = request.getCookies();
String username = null;
String password = null;
if (cookies != null) {
//遍历cookie
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
if ("username".equals(cookieName)) {
username = cookieValue;
}
if ("password".equals(cookieName)) {
password = cookieValue;
}
}
}
if (username != null && password != null) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
//连接数据库验证用户密码
UserService userService = new UserService();
boolean flag = userService.login(user);
//登录成功跳转
if (flag) {
request.getSession().setAttribute("username", user.getUsername());
response.sendRedirect("one.jsp");
} else {
response.sendRedirect("fair.jsp");
}
} else {
response.sendRedirect("login.jsp");
}
}
注意:此时属性封装的不是页面数据,而是cookie的数据,所以需要新的servlet,准确的点说,不在同一个方法
3 Struts中
3.1 Action
3.2 实现思路:
和原始方式大同小异,重新来个action,程序入口改为这个
3.3 修改UserAction
3.4 修改IndexAction
3.5 Struts.xml
源代码文件:http://download.csdn.net/detail/qq_26553781/9825051