๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง Spring/๐Ÿงถ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ Spring

Tiles๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ (๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…)

by Meteora_ 2021. 6. 22.
728x90

Tiles๋ฅผ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ

 

๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž…์— ํ•„์š”ํ•œ Mapper์ค€๋น„

Mybatis Mapper tag

 

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

Member.xml

 

<?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="Member">


<!-- ์•„์ด๋”” ์ค‘๋ณต์ฒดํฌ -->
<select id="getId" parameterType="java.lang.String" resultType="java.lang.Integer">
	SELECT NVL(COUNT(*), 0)
	FROM MEMBER
	WHERE ID=#{id}
</select>

<!-- ํšŒ์›๊ฐ€์ž…-->
<insert id="addmember" parameterType="bit.com.a.dto.MemberDto">
	INSERT INTO MEMBER(ID, PWD, NAME, EMAIL, AUTH)
	VALUES(#{id}, #{pwd}, #{name}, #{email}, 3)
</insert>

<!-- ๋กœ๊ทธ์ธ์‹œ ์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ -->
<select id="login" parameterType="bit.com.a.dto.MemberDto"
	resultType="bit.com.a.dto.MemberDto">
	SELECT ID, NAME, EMAIL, AUTH
	FROM MEMBER
	WHERE ID=#{id} AND PWD=#{pwd}
</select>


</mapper>

๋กœ๊ทธ์ธ

๋งจ๋จผ์ € index๋ถ€ํ„ฐ ์‹œ์ž‘

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
response.sendRedirect("login.do");
%>

</body>
</html>

MemberController

package bit.com.a.controller;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import bit.com.a.dto.MemberDto;
import bit.com.a.service.MemberService;

@Controller
public class MemberController {

	@Autowired
	MemberService service;
	
	@RequestMapping(value = "login.do", method = RequestMethod.GET)
	public String login() {	
		return "login.tiles";
	}

layouts.xml

login.tiles๋ฅผ ์„ค์ •

 

tiles tag

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>

<definition name="login.tiles" template="/WEB-INF/views/login/login.jsp">
</definition>

login.tiles(login.jsp)

 

div id="main_wrap">
	<div id="middle_wrap">
		<div id="content_wrap">
			
			<div style="width: 502px; height: 166px; margin-left: auto; margin-right: auto;
						position: relative; top: 100px;">
								
			<div class="login_title_warp">
				<div style="margin-top: 15px">
					<h2>My Home Page</h2>
				</div>			
			</div>
			
			<div id="login_wrap">
			
				<form action="loginAf.do" name="frmFrom" id="_frmFrom" method="post">
					
					<table class="content_table" style="width: 75%">
					<colgroup>
						<col style="width:30%">
						<col style="width:70%">
					</colgroup>	
					
					<tr>
						<th style="background: #eeeeee; color: #3e5fba">์•„์ด๋””</th>
						<td>&nbsp;<input type="text" id="_userid" name="id"
									size="20px" style="border: 1px solid #dddddd" placeholder="ID">
							<input type="checkbox" id="chk_save_id">ID ์ €์žฅ
						</td>
					</tr>
					<tr>
						<th style="background: #eeeeee; color: #3e5fba">ํŒจ์Šค์›Œ๋“œ</th>
						<td>&nbsp;<input type="text" id="_pwd" name="pwd"
									size="20px" style="border: 1px solid #dddddd" placeholder="Password">							
						</td>
					</tr>
					
					<tr>
						<td colspan="2" style="height: 20px; text-align: center;">
						<span>
							<a href="#none" id="_btnLogin" title="๋กœ๊ทธ์ธ">
								<img alt="" src="./image/login_btn.jpg">
							</a>
							
							<a href="#none" id="_btnRegi" title="ํšŒ์›๊ฐ€์ž…">
								<img alt="" src="./image/regi.jpg">
							</a>							
							
						</span>	
						</td>
					</tr>					
					
					</table>					
					
				</form>				
						
			</div>
			</div>		
		</div>	
	</div>
</div>

์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅํ•˜์ง€์•Š์„ ์‹œ ์ž…๋ ฅํ•˜๋ผ๋Š” ์•ˆ๋‚ด

(์ž…๋ ฅํ•˜์ง€ ์•Š์„์‹œ focus๋กœ ํ–ฅํ•˜๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์„ฑ)

๋ชจ๋‘ ๋‹ค ์ž…๋ ฅ์‹œ submitํƒœ๊ทธ๋กœ action์„ ์ง„ํ–‰ํ•œ๋‹ค (loginAf.do๋กœ ์ด๋™)

 

<script type="text/javascript">
$("#_btnRegi").click(function () {	
	location.href = "regi.do";	
});

$("#_btnLogin").click(function () {

	if($("#_userid").val().trim() == ""){
		alert('id๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์‹ญ์‹œ์˜ค');
		$("#_userid").focus();
	}
	else if($("#_pwd").val().trim() == ""){
		alert('ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์‹ญ์‹œ์˜ค');
		$("#_pwd").focus();
	}
	else{
		$("#_frmFrom").submit();	
	}	
	
});

์ฟ ํ‚ค์ €์žฅ

 

<script type="text/javascript">
let user_id = $.cookie("user_id");
if(user_id != null){	// ์ €์žฅ๋œ id๊ฐ€ ์žˆ์Œ
//	alert("์ฟ ํ‚ค ์žˆ์Œ");
	$("#_id").val( user_id );
	$("#chk_save_id").attr("checked", "checked");
//	$("#chk_save_id").prop("checked", true);
}

$("#chk_save_id").click(function() {
	
	if( $("#chk_save_id").is(":checked") ){
	//	alert('์ฒตํฌ๋จ');
		if( $("#_id").val().trim() == "" ){
			alert('id๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์‹ญ์‹œ์˜ค');
			$("#chk_save_id").prop("checked", false);			
		}else{
			// ์ฟ ํ‚ค๋ฅผ ์ €์žฅ
			$.cookie("user_id", $("#_id").val().trim(), { expires:7, path:'./'});
		}
	}
	else{
		$.removeCookie("user_id", { path:'./' });
	}
	
}); 



</script>

๋กœ๊ทธ์ธ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธํ›„ MemberController๋„์ฐฉ loginAf.do๋„์ฐฉ

@RequestMapping(value = "loginAf.do", method=RequestMethod.POST)
	public String loginAf(MemberDto dto, HttpServletRequest req) {
		
		MemberDto login = service.login(dto);
		if(login != null && !login.getId().equals("")) {
			
			req.getSession().setAttribute("login", login);
		//	req.getSession().setMaxInactiveInterval(60 * 60 * 24);
			
			return "redirect:/bbslist.do";			
		}
		else {			
			return "redirect:/login.do";
		}
		
		
	}

ํšŒ์›๊ฐ€์ž…

loginํ™”๋ฉด์—์„œ ํšŒ์›๊ฐ€์ž…์„ ๋ˆ„๋ฅผ์‹œ (์ปจํŠธ๋กค๋Ÿฌ)regi.do - > (๋ทฐ)regi.tiles

@RequestMapping(value = "regi.do", method = RequestMethod.GET)
	public String regi() {
		return "regi.tiles";
	}
<definition name="regi.tiles" template="/WEB-INF/views/login/regi.jsp">
</definition>

์•„์ด๋”” ์ฒดํฌ input์— ์›ํ•˜๋Š” ์•„์ด๋”” ์ž‘์„ฑํ›„ ์•„์ด๋””์ฒดํฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ค‘๋ณตํ™•์ธ๊ฐ€๋Šฅ ajax

regi.jsp

<div id="main_wrap">
	<div id="middle_wrap">
		<div id="content_wrap">
			
			<div style="width: 502px; height: 166px; margin-left: auto; margin-right: auto;
						position: relative; top: 100px;">
								
			<div class="login_title_warp">
				<div style="margin-top: 15px">
					<h2>ํšŒ์›๊ฐ€์ž…</h2>
				</div>			
			</div>
			
			<div id="regi_wrap">
				<form action="" method="post" id="_frmFrom" name="frmFrom">
				
				<table class = "content_table" style="width:75%">
					<colgroup>
						<col style="width:30%">
						<col style="width:70%">
					</colgroup>
				
					<tr>
						<th>์•„์ด๋”” ์ฒดํฌ</th>
						<td>
						<input type="text" name="sid" id="_id" size = "30">
						<a href="" id="_btnGetId" title="id์ฒดํฌ">
							<img alt="" src="./image/idcheck.png">
						</a>
						<!-- ์•„์ด๋”” ์‚ฌ์šฉ์—ฌ๋ถ€ -->
						<div id="_rgetid">
							
						</div>
						
						</td>
					
					
					
					</tr>	
						<tr>
							<th>์•„์ด๋””</th>
							<td>
								<input type="text" name = "id" id="_userid" size="30" readonly="readonly">
							</td>
						
						</tr>
						<tr>
							<th>ํŒจ์Šค์›Œ๋“œ</th>
							<td>
								<input type="text" name = "pwd" id="_pwd" size="30" >
							</td>
						
						</tr>
						<tr>
							<th>์ด๋ฆ„</th>
							<td>
								<input type="text" name = "name" id="_name" size="30">
							</td>
						
						</tr>
						<tr>
							<th>์ด๋ฉ”์ผ</th>
							<td>
								<input type="text" name = "email" id="_email" size="30">
							</td>
						
						</tr>
						
						<tr>
							<td colspan="2" style="height: 50px; text-align: center">
							
								<a href="#none" id="_btnRegi" title="ํšŒ์›๊ฐ€์ž…">
									<img alt="" src="./image/regi.jpg">
								</a>
							</td>
						</tr>
				
				
				
				</table>
				
				
				</form>
				
			</div>		
		</div>	
	</div>
</div>

</div>

<script type="text/javascript">
$("#_btnRegi").click(function(){
	
	
	if($("#_userid").val().trim() == ""){
		
		alert("์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์‹ญ์‹œ์˜ค");
		$("#_id").focus();
		
	}else if ($("#_pwd").val().trim() == ""){
		
		alert("๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์‹ญ์‹œ์˜ค");
		$("#_pwd").focus();
	
	}else{
		
		$("_frmFrom").attr("action","regiAf.do").submit();
		
	}
		
		
	
});

$("#_btnGetId").click(function(){
	
	$.ajax({
		type:"get",
		url: "idcheck.do",
		data:{"id":$("#_id").val()},
		success:function(data){
			if(data == 0){
				
				$("#_rgetid").css("color", "#0000ff");
				$("#_rgetid").html('์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” id์ž…๋‹ˆ๋‹ค');
				$("#_userid").html(("#_id").val());
				
			}else{
				$("#_rgetid").css("color", "#ff0000");
				$("#_rgetid").html('์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” id์ž…๋‹ˆ๋‹ค');
				$("#_id").val("");
			}
		}
		
		
		
	});
	
	
});



</script>

MemberDao

package bit.com.a.dao;

import bit.com.a.dto.MemberDto;

public interface MemberDao {

	int getId(MemberDto mem);
	boolean addmember(MemberDto mem);
	MemberDto login(MemberDto dto);
	
}

MemberDaoImpl

 

package bit.com.a.dao.impl;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import bit.com.a.dao.MemberDao;
import bit.com.a.dto.MemberDto;

@Repository	// = ์ €์žฅ์†Œ
public class MemberDaoImpl implements MemberDao {

	@Autowired		// DI
	SqlSession sqlSession;		// SqlSession sqlSession = new SqlSessiontemplate();
	
	String namespace = "Member.";
		
	@Override
	public int getId(MemberDto mem) {		
		return sqlSession.selectOne(namespace + "getId", mem);
	}
	
	@Override
	public boolean addmember(MemberDto mem) {		
		int n = sqlSession.insert(namespace + "addmember", mem);		
		return n>0?true:false;
	}

	@Override
	public MemberDto login(MemberDto dto) {
		MemberDto mem = sqlSession.selectOne(namespace + "login", dto);
		return mem;
	}
	
	
}

MemberService

package bit.com.a.service;

import bit.com.a.dto.MemberDto;

public interface MemberService {

	//List<MemberDto> allMember();
	
	int getId(MemberDto mem);
	boolean addmember(MemberDto mem);
	
	MemberDto login(MemberDto dto);
}

MemberServiceImpl

package bit.com.a.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import bit.com.a.dao.MemberDao;
import bit.com.a.dto.MemberDto;
import bit.com.a.service.MemberService;

@Service	// controller, dao ์ค‘๊ฐ„์— ์œ„์น˜.... DB๋ฐ์ดํ„ฐ ๊ฐ€๊ณต
public class MemberServiceImpl implements MemberService {

	@Autowired				
	MemberDao memberDao;	// MemberDao memberDao = new MemberDaoImpl();
	
	/*
	@Override
	public List<MemberDto> allMember() {		
		return memberDao.allMember();
	}
	*/

	@Override
	public int getId(MemberDto mem) {		
		return memberDao.getId(mem);		
	}
	
	@Override
	public boolean addmember(MemberDto mem) {		
		return memberDao.addmember(mem);		
	}

	@Override
	public MemberDto login(MemberDto dto) {		
		return memberDao.login(dto);		
	}
	
	
}

๋Œ“๊ธ€