session의 두 가지 작은 사례
1. 사용자 로그인 사례
html 페이지에 로그인하여 제출한 후 파라미터를 로그인을 처리하는 servlet에 가져다 줍니다. 이 servlet은 로그인한 사용자 이름과 비밀번호를 얻고 이 정보를session에 저장합니다. 다른 servlet은 처리할 때session에서 사용자의 정보를 받아서 로그인 여부를 판단하고 해당하는 동작을 수행합니다.주로 우리가 흔히 볼 수 있는 장면을 모의해 봅시다: 로그인 후 웹 페이지에: 즐겁게 드세요, xxx.
우선 환영 페이지 index를 보겠습니다.jsp(여기는 간단한 시뮬레이션일 뿐, 뒤에 jsp의 라벨을 배우면 더욱 인성화할 수 있다)
<%@page import="login.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>welcome page</title>
</head>
<body>
:
<%
User user = (User)session.getAttribute("user");
if(user != null)
out.write(user.getUsername());
%>
<br/>
<a href="/test/login.html"> </a>
</body>
</html>
세션에서user를 받지 못하면 로그인하지 않았다는 뜻입니다. 로그인 연결을 클릭하면 로그인 페이지login으로 넘어갑니다.html:
<!DOCTYPE html>
<html>
<head>
<title>form.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action="/test/servlet/LoginServlet" method="post">
:<input type="text" name="username"/><br/>
:<input type="password" name="password"/><br/>
<input type="submit" value=" "/>
</form>
</body>
</html>
제출을 클릭하면 로그인 요청을 처리하기 위해 LoginServlet에 넘깁니다. 다음은 LoginServlet을 보겠습니다.java:
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = DB.find(username, password);
if(user == null) {
out.write(" , !");
return;
}
// session ,
// , servlet , session user
//User user = (User)request.getSession().getAttribute("user");
//if(user != null)...
request.getSession().setAttribute("user", user); // jsp user
response.sendRedirect("/test/index.jsp"); // index.jsp
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
//
class DB {
private static List<User> list = new ArrayList();
static {
list.add(new User("aaa", "123"));
list.add(new User("bbb", "123"));
list.add(new User("ccc", "123"));
list.add(new User("ddd", "123"));
}
//
public static User find(String username, String password) {
for(User user : list) {
if(user.getUsername().equals(username) && user.getPassword().equals(password)) {
return user;
}
}
return null;
}
}
마지막으로 User를 첨부합니다.java류, 간단해...
public class User {
private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. 사용자 중복 제출 방지
jsp를 사용하지 않았기 때문에, 이 실례에서 하나의 servlet으로 폼 페이지를 출력하고, 다른 servlet은 폼을 처리합니다.프로그램 내에서 구체적인 사고방식을 쓴다.
/*
*
* : ,
* javascript
* , ,
* , , servlet
*/
public class FormServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String token = TokenProcessor.getInstance().makeToken();//
request.getSession().setAttribute("token", token);//
//
out.println("<form action='/test/servlet/DoFormServlet' method='post'>");
out.println("<input type='hidden' name='token' value='" + token + "'/>");//
out.println(" :<input type='text' name='username'/>");
out.println("<input type='submit' value=' '/>");
out.println("</form>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
class TokenProcessor {
/*
* , 。 。
* :( )
* 1.
* 2.
* 3. ,
*/
private TokenProcessor(){}
private static final TokenProcessor instance = new TokenProcessor();
public static TokenProcessor getInstance() {
return instance;
}
//
public String makeToken() {
String token = (System.currentTimeMillis() + new Random().nextInt(9999999)) + "";
/*
* : , ,128 -16
* 。
* md5 。
*/
try {
MessageDigest md = MessageDigest.getInstance("md5");// md5
byte md5[] = md.digest(token.getBytes());// token , ,
/*
* return,
* md5 ,new String(md5) , , gb2312
*
*/
//return new String(md5);
/*
* base64 : 。
* : 3 4 ,
* : 01010000 01010011 01100101 24
* 4 , 6 , 2 0,
* base64 : 00010100 00000101 00001101 00100101
* , 0, 63, 64 , base64
* 0-63 , 。
*/
BASE64Encoder encoder = new BASE64Encoder();// import , :
/*
* 1( ):
* project build path JRE System Library, JRE System Library, 。
* 2:
* Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
* Deprecated and trstricted API -> Forbidden reference (access rules): -> warning
*/
return encoder.encode(md5);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);// ,
// , ;
// : , 。
}
}
}
사용자가 제출한 후에 DoForm Servlet에 맡겨 처리할 것입니다. DoForm Servlet을 보십시오.java:
//
public class DoFormServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
boolean b = isToken(request); //
if(b == false) {
System.out.println(" !");
return;
}
// , session
request.getSession().removeAttribute("token");
System.out.println(" !");
}
private boolean isToken(HttpServletRequest request) {
String clientToken = request.getParameter("token");// token
if(clientToken == null)
return false;
String serverToken = (String)request.getSession().getAttribute("token");// token
if(serverToken == null)// , ,serverToken null
return false;
if(!clientToken.equals(serverToken))
return false;
return true;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
과정은 이렇다. 사용자가 로그인하기 전에 서버 쪽에서 하나의 Token이 되어 이 Token을session에 저장하고 이를 숨겨진 필드로 브라우저에 전화를 걸어 사용자가 로그인하도록 한다. 분명히 사용자가 로그인하면 이 Token을 가져온다.서버 측에서 요청을 처리하기 전에 클라이언트가 가져온 Token과session에 저장된 것이 같은지 판단합니다. 그렇다면session에 있는token을 삭제하고 요청을 처리합니다. 이때session에는 이token이 없습니다. 사용자가 되돌아와서 다시 제출할 때 서버 측에서 판단할 것입니다. 이때false로 되돌아와서 다시 제출하지 말라고 알립니다.
이상은 두 가지 작은 실례로session지식을 공고히 하기 위한 것입니다. 잘못된 점이 있으면 댓글로 바로잡아 주십시오~
_____________________________________________________________________________________________________________________________________________________
-----즐겁게 나누고 함께 진보하자!
-------더 많은 기사 보기:http://blog.csdn.net/eson_15
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
5분 안에 JSP 배우기Java 생태계는 지난 20년 동안 많이 발전했으며 이는 시장에서 변함없이 인기를 얻고 있음으로 알 수 있습니다. 글쎄, 이것은 다른 프로그래밍 언어 중 하나에 대한 탄탄한 배경이 있거나 새로운 개발자이지만 시간이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.