*index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<a href="./app/user/joinview.jsp">회원가입</a><br>
<a href="${pageContext.request.contextPath }/user/userLogin.us">로그인</a>
</body>
</html>
|
cs |
*loginView.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language="java" contentType="text/html; charset=EUC-KR"
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<c:if test="$(not empty param.flag }"> <c:if test="$not param.flag }"> <script> alert("로그인실패!!") </script> </c:if> </c:if> <form action="${pageContext.request.contextPath }/user/userLoginOk.us" method="post">
<p>
아이디<input type="text" name ="userid">
</p>
<p>
패스워드<input type="password" name ="userpw">
</p>
<p>
<input type="submit" value="로그인하기" >
</p>
</form>
</body>
</html>
|
cs |
|
|
*UserLoginOkAction.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.koreait.app.user;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.koreait.action.Action;
import com.koreait.action.ActionForward;
import com.koreait.app.user.dao.UserDAO;
public class UserLoginOkAction implements Action{
@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) {
ActionForward forward = new ActionForward();
UserDAO udao = new UserDAO();
String userid = req.getParameter("userid");
String userpw = req.getParameter("userpw");
if(udao.login(userid,userpw)) { //로그인성공시
forward.setPath("/app/user/mainview.jsp");
}else { //로그인실패시
forward.setPath("/app/user/loginview.jsp?flag=false");
}
forward.setRedirect(false);
return forward;
}
}
|
cs |
*UserFrontController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.koreait.app.user;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.koreait.action.ActionForward;
@WebServlet("*.us")
public class UserFrontController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { doProcess(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { doProcess(req,resp);
}
protected void doProcess(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
String requestURI = req.getRequestURI();
ActionForward forward = null;
if(requestURI.equals("/user/UserJoin.us")) {
forward = new UserJoinAction().execute(req, resp);
}else if(requestURI.equals("/user/userLogin.us")) {
forward = new ActionForward(false, "/app/user/loginview.jsp");
}else if(requestURI.equals("/user/userLoginOk.us")) {
forward = new UserLoginOkAction().execute(req,resp);
}
//일괄처리
if(forward != null) {
if( forward.isRedirect()) { //redirect
resp.sendRedirect(forward.getPath());
}else { //forward
RequestDispatcher disp = req.getRequestDispatcher(forward.getPath());
disp.forward(req, resp);
}
}
}
}
|
cs |
*User.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="User"> <!-- namespace수정 -->
<insert id="join" parameterType="userdto">
INSERT INTO "user" VALUES (#{userid},#{userpw},#{username},#{userphone},#{useraddr});
</insert>
<select id="login" parameterType="hashmap" resultType="_int">
SELECT count(*) FROM "user" WHERE USERID = #{userid} and USERPW = #{userpw}
</select>
</mapper>
|
cs |
*UserDAO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package com.koreait.app.user.dao;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.koreait.app.user.mybatis.SqlMapConfig;
public class UserDAO {
SqlSessionFactory factory = SqlMapConfig.getFactory();
SqlSession sqlsession;
public UserDAO() {
sqlsession = factory.openSession(true);
}
public boolean login(String userid, String userpw) {
boolean result = false;
// Mybatis에 넘겨줄 때 HASHMAP으로 던지기
HashMap<String,String> datas = new HashMap<>();
datas.put("userid", userid);
datas.put("userpw", userpw);
if((Integer)sqlsession.selectOne("user.login",datas) == 1) {
System.out.println("조회성공");
result = true; }
return result;
}
}
|
cs |
point1) 데이터베이스 없이 forward/redirect만 결정 후 페이지 이동시키는 방법
index.html에서 JSTL로 작성된 URI을 통해 로그인을 누르면 .us를 인식하여 UserFrontController로 들어오게끔 하였고 그렇게 else if문을 타서 ActionForward의 파라미터에 false와 path를 직접적으로 입력함으로서 forward에 해당값은 forward방식으로 다음은 loginview로 이동하라는 값을 넣을 수 있게 되었다.
그렇게 UserFrontController밑의 일괄처리부분으로 바로 이동하게 되고 클라이언트는 loginview화면을 볼 수 있게된다.
point2) 데이터 이동 경로
loginView.jsp ->
UserFrontController.java ->
UserLoginOkAction.java ->
UserDAO.java ->
User.xml ->
UserDAO.java ->
UserLoginOkAction.java ->
UserFrontController.java ->
mainview.jsp(로그인성공) or loginview.jsp(로그인실패)
point3) 로그인실패기능구현
로그인 페이지로 들어가는 방법은 로그인 버튼을 눌러서 로그인을 누르는 것과 로그인실패를 했을 떄 두가지 경우가 있다. 이 때 로그인 실패를 했을 때 alert창을 띄워서 로그인을 실패했다는 기능을 하는 로직이다.
이 기능은 flag=false라는 파라미터값을 활용하여 구현한다.
보라색박스에 falg는 false라는 값을 기재해주어 로그인이 실패했을 떄 loginview.jsp에 false라는 flag를 넘겨준다. 그럼 초록색박스 -> 노란색 박스순서로 검증을 거치게된다.
초록색박스의 기능은 flag의 유무 체크이다.
최초로 로그인을 하려고 해당 페이지에 접근할 땐 flag값이 비어있을 것이다. 그래서 파라미터에 있는 flag값이 비어있는지 없는지 먼저 체크를 해야한다.
그래서 만약 비어있지 않다면? 이라는 로직으로 먼저 비어있지 않은 경우에만 if문을 탈 수 있게 해주고
노란박스의 if에는 파라미터의 false여부를 두고 false라면 로그인실패 라는 alert창이 뜨게 하였다.
point4) #{pageContext.request.contextPath}
USTL을 사용하면 일반 URL과는 달리 JSTL만의 URL방법으로 표현할 수 있다.
http://localhost:9090/project01/abc.jsp | |
URL | JSTL |
http://localhost:9090/project01/abc/jsp | ${pageContext.request.requestURL} |
http | ${pageContext.request.scheme} |
localhost | ${pageContext.request.serverName} |
9090 | ${pageContext.request.serverPort} |
/project01/abc.jsp | ${pageContext.request.requestURI} |
/abc.jsp | ${pageContext.request.servletPath} |
기존 Controller를 배우기 전에는 href를 사용하여 우린 바로 jsp나 html 파일로 이동해왔다.
그러나 이러한 방법은 일종의 페이지 검증을 거칠 수 없다.
페이지가 이동되면서 forward인지 redirect인지 알 수 없으며 파라미터값을 넘기거나 받아 데이터를 가공할 수 없다는 것이다.
그래서 Controller를 배운 지금 모든 페이지는 아무리 단순한 페이지이동이더라도 바로 다른 페이지로 넘어가는게 아니라 FrontController를 한번은 거쳐서 최소한 forward,redirect의 여부라도 가지고 가야한다.
그래서 위의 예시에도 .jsp가 아닌 .us를 사용해서 FrontController로 진입하게 만들었으며 ${pageContext.request.requestURL} 는 내가 뒤에 작성할 경로는 상대경로임을 의미한다.
즉, "${pageContext.request.requestURL} 경로" 는 현재 위치한 곳을 기준으로 하여 목표로 하는(파일이 있는 곳)의 위치를 뜻한다.
'국비필기노트 > jsp' 카테고리의 다른 글
jsp_MVC2 패턴으로 게시판 만들기(전체 게시글 불러오기,게시물 총 갯수, 페이징처리) (0) | 2022.06.20 |
---|---|
jsp_MVC2 패턴으로 회원가입 만들기(+초기세팅) (0) | 2022.06.17 |
jsp_MVC2 (0) | 2022.06.16 |
jsp_DB 변천사 (0) | 2022.06.15 |
jsp_JSTL (0) | 2022.06.15 |