spring mvc homepage 스프링 홈페이지 만들기 6

이번에는 로그인을 해볼예정이에요. id와 패스워드가 필요할텐데요. 전 아까 sunplan 이라고 id를 만들었어요. 패스워드는 쉽게 121212로 하였네요. 이걸 가지고 로그인 하는걸 만들어 볼께요. 

TOP.JSP파일을 수정할꺼에요. 

 <!-- Right navbar links -->
      <ul class="order-1 order-md-3 navbar-nav navbar-no-expand ml-auto">
      <c:if test="${not empty login}">			
      	<li class="nav-item">
      		<button type="button" class="btn btn-outline-primary nav-link"  onclick="goLogout()">${login.uname}님</button>&nbsp;
      	</li>
	  </c:if>
	  <c:if test="${empty login}">
	  	<li class="nav-item">
      		<input type="text" class="form-control" placeholder="아이디" id="uid">&nbsp;
      	</li>
      	<li class="nav-item">
      		<input type="password" class="form-control" placeholder="패스워드" id="upassword">&nbsp;
      	</li>
      	<li class="nav-item">
          <button type="button" class="btn btn-outline-primary" onclick="goLogin()">로그인</button>&nbsp;
        </li>	  
      	<li class="nav-item">
          <a class="nav-link" href="/user/register">가입하기</a>
        </li>
      </c:if>
        <!-- Messages Dropdown Menu -->
        <li class="nav-item dropdown">
        </li>
        <!-- Notifications Dropdown Menu -->
        <li class="nav-item dropdown">
        </li>
        <li class="nav-item">
          <a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button"><i
              class="fas fa-th-large"></i></a>
        </li>
      </ul>
    </div>
  </nav>
  <!-- /.navbar -->


  
<script>
function goLogout()
{	
	var url;
	url = '/user/logout';	
	var data = JSON.stringify({
	});
	getPostData(url,data,callback_common,false);
}
function goLogin()
{	
	var url;
	url = '/user/login';
	
	
	var data = JSON.stringify({
		uid : $("#uid").val()
		 , upw : $("#upassword").val()
	});
	getPostData(url,data,callback_common,false);
}
var callback_common = function (result)
{
	if(result['result']=='LOGIN_SUCCESS')
	{
		showmessage("알림","로그인 되었습니다..",5000,'');
		self.location = "${pageContext.request.contextPath}/";
	}
	if(result['result']=='LOGOUT_SUCCESS')
	{
		showmessage("알림","로그아웃 되었습니다..",5000,'');
		self.location = "${pageContext.request.contextPath}/";
	}
	else if(result['result']=='ID_NOT_FIND')
	{	
		showmessage("알림","아디를 확인해주세요.",5000,'');
		$("#uid").val("");
		$("#uid").focus();
	}
	else if(result['result']=='PASSWORD_FAIL')
	{	
		showmessage("알림","아디를 확인해주세요.",5000,'');
		$("#uid").val("");
		$("#uid").focus();
	}
	else
	{
		showmessage("알림",result['message'],20000,'');
		ms_alert("알림","내용이 등록/수정을 실패하였습니다");
	}
}
</script>

 <!-- Right navbar links --> 아래쪽에 로그인이 가능한 폼을 추가했어요. 

login 값의 유무에 따라 로그인 로그아웃 기능을 넣었어요. 

top.jsp
0.01MB

컨트롤러는 이렇게 추가했어요. 

	@ResponseBody
	public CommonData logout(HttpServletRequest request, HttpServletResponse response, @RequestBody CommonData dto, Model model) throws Exception{
		Map<String, String> paramMap = new HashMap<>();
		CommonData result = new CommonData();
		HttpSession session = request.getSession();
		Util_Message smsp = Util_Message.getInstance();
	   Object obj = session.getAttribute("login");
	   if (obj != null) {
		Member vo = (Member) obj;
		String ip = request.getRemoteAddr();
		dto.put("u_idx", vo.getIdx());
		dto.put("uip", ip);
		dto.put("ustate", "logout");
		service.insert(dto, "User_Mapper.user_login_history");
		System.out.println("logout.................................2");
		session.removeAttribute("login");
		session.invalidate();

		System.out.println("logout.................................3");
		Cookie loginCookie = WebUtils.getCookie(request, "loginCookie");

		if (loginCookie != null) {
			loginCookie.setPath("/"); loginCookie.setMaxAge(0);
			response.addCookie(loginCookie); 
			}
			
		}
	   result.put("result", "LOGOUT_SUCCESS");
	    return result;
	}
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	@ResponseBody
	public CommonData post_login(HttpServletRequest request, HttpServletResponse response, @RequestBody CommonData dto, Model model) throws Exception{
		Map<String, String> paramMap = new HashMap<>();
		CommonData result = new CommonData();
		HttpSession session = request.getSession();
		Util_Message smsp = Util_Message.getInstance();
	    if (session.getAttribute("login") != null) {
	      smsp.print_String("clear login data before");
	      session.removeAttribute("login"); //로그인 정보 삭제
	    }	    
	    smsp.print_CommonData(dto); //넘어온데이터 출력.
	    
	    String useCookie=dto.get("useCookie");
	    
		int cnt = service.listSearchCount(dto, "User_Mapper.user_id_check");
		if (cnt == 0)
		{
			result.put("result", "ID_NOT_FIND");
			result.put("message", "ID가 없습니다.");
			return result;
		}
		Member vo = service.select_member(dto, "User_Mapper.tb_member_select_one");
		if(vo==null)
		{
			result.put("result", "PASSWORD_FAIL");
			result.put("message", "패스워드를 확인해주세요.");
			return result;
		}
		String ip = request.getRemoteAddr();
		dto.put("u_idx", vo.getIdx());
		dto.put("uip", ip);
		dto.put("ustate", "login");
		service.insert(dto, "User_Mapper.user_login_history");
		smsp.print_String_no_line("로그인정보가 있습니다.");
		String CPath = "/";
		//SecurityMember s_mem = new SecurityMember(vo);
		model.addAttribute("userVO", vo);
		session.setAttribute("login", vo);
		if(useCookie!=null)
		{	
			if(useCookie.equals("true"))
			{
				smsp.print_String_no_line("쿠키정보를 추가합니다.");
				//쿠키...
			    //로그인 유지기간 섹션값저장
				int limit_time = 60*60*24*365;//1년일
				Date sessionLimit = new Date(System.currentTimeMillis()+(1000*limit_time));
				dto.put("sessionId",session.getId());
				dto.put("sessionLimit",sessionLimit);
				service.update(dto, "User_Mapper.keepLogin");
				Cookie loginCookie = new Cookie("loginCookie", session.getId());
				loginCookie.setPath("/");
				loginCookie.setMaxAge(limit_time);
				smsp.print_String("CPath : " + CPath);
				CPath = "/";			
				response.addCookie(loginCookie);
			}
		}
		result.put("result", "LOGIN_SUCCESS");
		return result;
	}

로그인 로그아웃 부분을 추가했어요. 

User_Controller.java
0.01MB

mapper파일도 수정을 해줘요. 

 <select id="tb_member_select_one" resultType="com.eunhocompany.domain.Member"> 
        SELECT tm1.idx
		     , tm1.uid
		     , tm1.uname
		     , tm1.uchart
		     , tm1.uemail
		     , tm1.umobile
		     , tm1.menu_lv
		     , tm1.join_pass
		     , tm1.mt_use
		FROM tb_member tm1
         where tm1.mt_use = 'Y'
           and tm1.uid = #{uid}
           and tm1.upw = #{upw}
         order by menu_lv desc
		 limit 1
    </select>
    
     <insert id="user_login_history">		
		insert into tb_login_history(
					u_idx
				  , uip
				  , ustate
				  , mt_input_wdate
				  )
		   values(  #{u_idx}
				  , #{uip}
				  , #{ustate}
				  , now()
		          )
	</insert>

 

User_Mapper.xml
0.00MB

로그인 로그아웃 을 해볼께요. 

로그인 로그아웃

로그인 로그아웃을 확인해봤어요. 

히스토리도 잘 남는지 볼께요. 

로그인 기록

다음은 게시판을 만들어볼께요. 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

QM6 LPE 연비 관련 20000KM  평균연비

2만키로

안녕하세요. QM6 타고다니다보니 어느덧 2만키로이상 타게 되었어요. 

평균연비가 거의 변화가 없네요. 

요즘 코로나로 인해 힘드시죠? 그와중에 유가는 엄청 내렸어요. 

LPG가격도 종종 500원대도 보이긴 하는데 저는 622원에 넣었네요. 

622원

LPG차량 특성상 LPG충전소가 많긴 하지만 그래도 가솔린 주유소 보다는 현실적으로 적은편이라서 매번 가득 넣어요. 

51리터를 넣어도 크게 부담이 없는 가격이네요. 

평균연비는 8.5KM 정도 나오고 있어요. 

8.5KM

예전 가솔린 승용차가 연비가 안좋아서 그런지 LPG로 변경되었지만 유류비가 크게 변화가 없는거 같아요. 

다음엔 4만KM정도에 연비 리뷰해볼께요. 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

spring mvc homepage 스프링 홈페이지 만들기 5

db연결까지 되었어요 이제 회원 가입후 로그인 기능을 추가할예정인데요. 

db생성부터 해요. 정보는 많이 받지 않을예정이에요. 

아디, 비번, 이름, 이메일, 전화번호 이렇게만 받을거에요.  전화번호는 선택사항이구요 이메일은 필수 사항이에요. 

CREATE TABLE `tb_member` (
  `idx` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(100) DEFAULT NULL COMMENT '유저id_로그인',
  `uname` varchar(40) DEFAULT NULL COMMENT '이름',
  `uchart` varchar(40) DEFAULT NULL COMMENT '차트번호',
  `uemail` varchar(255) DEFAULT NULL COMMENT '메일',
  `umobile` varchar(100) DEFAULT NULL COMMENT '전화번호',
  `upw` varchar(255) DEFAULT NULL COMMENT '패스워드',
  `menu_lv` int(11) DEFAULT 1 COMMENT '권한레벨',
  `join_pass` varchar(50) DEFAULT 'HOME' COMMENT '가입위치(SNS,WEB등)HOME',
  `mt_use` enum('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용유무가입됨',
  `sessionKey` varchar(100) DEFAULT NULL COMMENT '섹션',
  `sessionlimit` varchar(100) DEFAULT NULL,
  `mt_input_wdate` datetime DEFAULT NULL COMMENT '입력일',
  `mt_update_wdate` datetime DEFAULT NULL COMMENT '최종수정일',
  PRIMARY KEY (`idx`),
  UNIQUE KEY `uid` (`uid`),
  KEY `sessionKey` (`sessionKey`),
  KEY `uchart` (`uchart`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='회원정보';

DB는 위 테이블을 참고해서 만드시면 될것 같아요. 요즘 SNS로그인도 많이 하니까 SNS로그인도 되게끔 만들었어요. 

CREATE TABLE `tb_login_history` (
  `idx` int(11) NOT NULL AUTO_INCREMENT,
  `u_idx` int(11) DEFAULT NULL COMMENT '멤버테이블',
  `uip` varchar(100) DEFAULT NULL COMMENT '유저ip',
  `ustate` varchar(100) DEFAULT NULL COMMENT '로그인로그아웃',
  `mt_input_wdate` datetime DEFAULT NULL COMMENT '입력시간',
  PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='로그인 정보';

로그인할때 정보를 저장해요 언제 로그인했는지 ip는 뭐였는지정도만 저장해 놓을께요. 

CREATE TABLE `common_code_table` (
  `idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유키값',
  `mt_parents_key` varchar(100) DEFAULT NULL COMMENT '코드번호(부모키)',
  `mt_code` varchar(50) DEFAULT NULL COMMENT '코드번호(자신)',
  `mt_code_value` varchar(100) DEFAULT NULL COMMENT '코드값',
  `mt_ranking` varchar(100) DEFAULT NULL COMMENT '정렬순위',
  `mt_use` enum('Y','N') DEFAULT NULL COMMENT '사용유무',
  `mt_remarks1` varchar(255) DEFAULT NULL COMMENT '비고1',
  `mt_remarks2` varchar(255) DEFAULT NULL COMMENT '비고2',
  `mt_remarks3` varchar(255) DEFAULT NULL COMMENT '비고3',
  `mt_remarks4` varchar(255) DEFAULT NULL COMMENT '비고4',
  `mt_input_wdate` datetime DEFAULT NULL COMMENT '입력일',
  `mt_input_id` varchar(100) DEFAULT NULL COMMENT '입력ID',
  `mt_group` varchar(100) DEFAULT NULL COMMENT '그룹ID',
  `mt_update_wdate` datetime DEFAULT NULL COMMENT '최종수정일',
  `mt_update_id` varchar(100) DEFAULT NULL COMMENT '최종수정ID',
  PRIMARY KEY (`idx`),
  KEY `mt_parents_key` (`mt_parents_key`),
  KEY `mt_use` (`mt_use`),
  KEY `mt_code` (`mt_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='공통코드';

 공통코드를 저장해요. 

이제 페이지가 필요로 해요. 

/AdminLTE-3.0.4/AdminLTE/pages/examples/register.html

위경로에 보면 html 파일이 있어요. 이페이지를 가지고 회원가입 페이지를 만들어 볼께요. 

register.jsp파일을 만들어요

컨트롤러를 만들어서 페이지를 열어야 하는데 컨트롤러를 모아놓을 패키지를 만들께요.

com.eunhocompany.controller 만들어 주시고요. 

servlet-context.xml 보시면 이미 등록해 놓았어요. 

<context:component-scan base-package="com.eunhocompany.controller" />

그리고 js.파일을 복사해요. 이건 제가 사용하는대로 모아 놓은거라 적당히 재작성해서 사용하시면되요. 

common.myeongsu.js
0.02MB
jsgrid.myeongsu.js
0.06MB

PNotify 이것도 사용할예정인데요. https://sciactive.com/pnotify/

 

PNotify

JavaScript notification plugin.

sciactive.com

리소스에 core폴더 만들어서 다 넣어주세요. 

animate.css 와 PNotify만 있으면 되요. 다른 파일은 신경쓰지 마세요. 

PNotify폴더 파일이구요.

pnotify.custom.css
0.01MB
pnotify.custom.js
0.07MB
pnotify.custom.min.css
0.01MB
pnotify.custom.min.js
0.07MB

animate.css폴더 내용이에요. 

파일이 많아서 core 압축해서 올려요. 

core.zip
0.07MB

그럼 bottom.jsp파일을 수정해요. 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

  <!-- Control Sidebar -->
  <aside class="control-sidebar control-sidebar-dark">
    <!-- Control sidebar content goes here -->
    <div class="p-3">
      <h5>Title</h5>
      <p>Sidebar content</p>
    </div>
  </aside>
  <!-- /.control-sidebar -->

  <!-- Main Footer -->
  <footer class="main-footer">
    <!-- To the right -->
    <div class="float-right d-none d-sm-inline">
      Anything you want
    </div>
    <!-- Default to the left -->
    <strong>Copyright &copy; 2014-2019 <a href="https://adminlte.io">AdminLTE.io</a>.</strong> All rights reserved.
  </footer>
</div>
<!-- ./wrapper -->

<!-- REQUIRED SCRIPTS -->

<!-- jQuery -->
<script src="${pageContext.request.contextPath}/resources/AdminLTE/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="${pageContext.request.contextPath}/resources/AdminLTE/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="${pageContext.request.contextPath}/resources/AdminLTE/dist/js/adminlte.min.js"></script>

<script src="${pageContext.request.contextPath}/resources/core/myjavascript/common.myeongsu.js"></script>
<!-- PNotify -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/core/PNotify/pnotify.custom.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/core/animate.css/animate.min.css">
<script src="${pageContext.request.contextPath}/resources/core/PNotify/pnotify.custom.min.js"></script>			
</body>
</html>

top.jsp 파일도 수정을 해요 메뉴에 가입하기 바로가기버튼을 추가할거에요.

아래쪽에  <!-- Right navbar links --> 있을거에요. 

	<li class="nav-item">
          <a class="nav-link" href="/user/register">가입하기</a>
        </li>

 

bottom.jsp
0.00MB
top.jsp
0.01MB

 

가입하기 버턴을 누르면 가입하는 화면으로 이동을 해요.

register.jsp파일을 수정할예정이에요.

register.jsp
0.01MB

유효성검사 부분은 https://samdo0812.tistory.com/27 여기를 참고해서 수정할께요. 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@include file="../include/top.jsp"%>


<!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper">
    <!-- Content Header (Page header) -->
    <div class="content-header">
      <div class="container-fluid">
        <div class="row mb-2">
          <div class="col-sm-6">
            <h1 class="m-0 text-dark"> 회원가입 <small>?</small></h1>
          </div><!-- /.col -->
          <div class="col-sm-6">
            <ol class="breadcrumb float-sm-right">
              <li class="breadcrumb-item"><a href="#">Home</a></li>
              <li class="breadcrumb-item active">회원가입</li>
            </ol>
          </div><!-- /.col -->
        </div><!-- /.row -->
      </div><!-- /.container-fluid -->
    </div>
    <!-- /.content-header -->

    <!-- Main content -->
    <div class="content">
      <div class="container-fluid">
        <div class="row">
          <div class="col-lg-12">
            <div class="card  card-primary card-outline">
              <div class="card-body">
                <h5 class="card-title"></h5>
                
                <div class="card-body register-card-body">
			      <p class="login-box-msg">회원정보</p>
			
			      <form action="../../index.html" method="post" id="quickForm">
			        <div class="input-group mb-3">
			          <input type="text" class="form-control" placeholder="이름" id="uname">
			          <div class="input-group-append">
			            <div class="input-group-text">
			              <span class="fas fa-user"></span>
			            </div>
			          </div>
			        </div>
			        <div class="input-group mb-3">
			          <input type="email" class="form-control" placeholder="이메일" id="uemail">
			          <div class="input-group-append">
			            <div class="input-group-text">
			              <span class="fas fa-envelope"></span>
			            </div>
			          </div>
			        </div>
			        <div class="input-group mb-3">
			          <input type="text" class="form-control" placeholder="아이디" id="uid">
			          <div class="input-group-append">
			            <div class="input-group-text">
			              <span class="fas fa-envelope"></span>
			            </div>
			          </div>
			        </div>
			        <div class="input-group mb-3">
			          <input type="password" class="form-control" placeholder="패스워드" id="upassword">
			          <div class="input-group-append">
			            <div class="input-group-text">
			              <span class="fas fa-lock"></span>
			            </div>
			          </div>
			        </div>
			        <div class="input-group mb-3">
			          <input type="password" class="form-control" placeholder="패스워드확인" id="upassword_chk">
			          <div class="input-group-append">
			            <div class="input-group-text">
			              <span class="fas fa-lock"></span>
			            </div>
			          </div>
			        </div>
			        <div class="row">
			          <div class="col-8">
			            <div class="icheck-primary">
			              <input type="checkbox" id="agreeTerms" name="terms" value="agree">
			              <label for="agreeTerms">
			               I agree to the <a href="#">terms</a>
			              </label>
			            </div>
			          </div>
			          <!-- /.col -->
			          <div class="col-4 text-right">
			            <button type="button" class="btn btn-outline-primary" onclick="goSubmit()">가입하기</button>
			          </div>
			          <!-- /.col -->
			        </div>
			      </form>
				<!-- 
			      <div class="social-auth-links text-center">
			        <p>- OR -</p>
			        <a href="#" class="btn btn-block btn-primary">
			          <i class="fab fa-facebook mr-2"></i>
			          Sign up using Facebook
			        </a>
			        <a href="#" class="btn btn-block btn-danger">
			          <i class="fab fa-google-plus mr-2"></i>
			          Sign up using Google+
			        </a>
			      </div>
			 -->
			      <a href="login.html" class="text-center">I already have a membership</a>
			    </div>

                
              </div>
            </div>
		  </div>
        </div>
        <!-- /.row -->
      </div><!-- /.container-fluid -->
    </div>
    <!-- /.content -->
  </div>
  <!-- /.content-wrapper -->
  
<script>
function goSubmit()
{	
	if(!checkz()) //유효성검사를 먼저하기.
	{
		return;
	}
	var url;
	url = '/user/regedit';
	
	
	var data = JSON.stringify({
		uid : $("#uid").val()
		 , uname : $("#uname").val()
		 , uemail : $("#uemail").val()
		 , upw : $("#upassword").val()
		 , mt_use : 'Y'
	});
	getPostData(url,data,callback_common,false);
}
var callback_common = function (result)
{
	if(result['result']=='INSERT_OK')
	{
		showmessage("알림","가입되었습니다.",5000,'');
	}
	
	else if(result['result']=='ID_DUPLICATE')
	{	
		showmessage("알림",result['message'],5000,'');
		$("#uid").val("");      
		$("#uid").focus();
	}
	else
	{
		showmessage("알림",result['message'],20000,'');
		ms_alert("알림","내용이 등록/수정을 실패하였습니다");
	}
}
function checkz() {
    var getMail = RegExp(/^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/); 
    var getCheck= RegExp(/^[a-zA-Z0-9]{4,12}$/); 
    var getName= RegExp(/^[가-힣]+$/);  

    //아이디 공백 확인
    if($("#uid").val() == ""){
      alert("아이디 입력해주세요.");
      $("#uid").focus();
      return false;
    }

    //아디 유효성 검사
    if(!getCheck.test($("#uid").val())){
      alert("형식에 맞게 입력해주세요.");
      $("#uid").val("");      
      $("#uid").focus();
      return false;
    }

    //비밀번호
    if(!getCheck.test($("#upassword").val())) {
    alert("형식에 맞춰서 PW를 입력해주세요.");
    $("#upassword").val("");
    $("#upassword_chk").val("");
    $("#upassword").focus();
    return false;
    }

    //아이디랑 비밀번호랑 같은지
    if ($("#uid").val()==($("#upassword").val())) {
    alert("비밀번호가 ID와 똑같은지 확인해주세요.");
    $("#upassword").val("");
    $("#upassword_chk").val("");
    $("#upassword").focus();
  }

    //비밀번호 똑같은지
    if($("#upassword").val() != ($("#upassword_chk").val())){ 
    alert("패스워드를 확인해주세요.");
    $("#upassword").val("");
    $("#upassword_chk").val("");
    $("#upassword").focus();
    return false;
   }

   //이메일 공백 확인
    if($("#mail").val() == ""){
      alert("이메일을 입력해주세요");
      $("#mail").focus();
      return false;
    }
         
    //이메일 유효성 검사
    if(!getMail.test($("#uemail").val())){
      alert("이메일형식에 맞게 입력해주세요")
      $("#uemail").val("");
      $("#uemail").focus();
      return false;
    }

    //이름 유효성
    if (!getName.test($("#uname").val())) {
      alert("이름을 확인해주세요.");
      $("#uname").val("");
      $("#uname").focus();
      return false;
    }
  	return true;
}
</script>
  
<%@include file="../include/bottom.jsp"%>
  

getPostData부분은 ajax를 편하게 사용하기위해서 만들어 놓은 함수에요. 

컨트롤러 부터 만들어줘요. 기존에 만들어놓은 User_controller에 추가할께요. 

package com.eunhocompany.controller;

import java.sql.SQLIntegrityConstraintViolationException;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;

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

import com.eunhocompany.domain.CommonData;
import com.eunhocompany.persistence.commonDAO;
import com.eunhocompany.service.Common_ServiceImpl;
import com.eunhocompany.service.Second_ServiceImpl;
import com.eunhocompany.util.Util_Message;

import java.util.Date;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UrlPathHelper;
import org.springframework.web.util.WebUtils;

@Controller
@RequestMapping("/user")
public class User_Controller {
	@Autowired
	private Common_ServiceImpl service;
	Util_Message smsp = Util_Message.getInstance();

	@RequestMapping(value = "/register", method = RequestMethod.GET)
	public String create(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model)
			throws Exception {
		Util_Message smsp = Util_Message.getInstance();
		String CPath = request.getContextPath().toString();
		UrlPathHelper urlPathHelper = new UrlPathHelper();
		String originalURL = urlPathHelper.getOriginatingRequestUri(request);
		smsp.print_String("OriginalURL ==>" + originalURL);

		return "/user/register";
	}
	
	@RequestMapping(value = "/regedit", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, String> regedit(@RequestBody CommonData dto) throws Exception{
		Map<String, String> paramMap = new HashMap<>();
		smsp.print_CommonData(dto);
		//AES128 aes = AES128.getInstance();
		String loginpass = dto.get("upw");
		//smsp.print_String_no_line("CONTROLLER: " + loginpass);
		//String AES_loginpass = aes.encrypt(loginpass);
		//dto.put("upw", AES_loginpass);
		int cnt =service.listSearchCount(dto, "User_Mapper.user_id_check");
		if(cnt>0)
		{
			paramMap.put("result", "ID_DUPLICATE");
			paramMap.put("message", "ID가 있어요.");
			return paramMap;
		}
		service.insert(dto, "User_Mapper.user_insert");
		paramMap.put("result", "INSERT_OK");		
		return paramMap;
	}

}

 패스워드 암호화 관련해서는 따로 할게요 

User_Controller.java
0.01MB

regedit라는 걸 post로 만들어 주고요. User_Mapper를 만들어요. 

User_Mapper.xml
0.00MB
위치에요.

db를 확인해보면 이렇게 잘 데이터가 입력이 되었어요. 

db내용

이어서 로그인관련해서 정리할께요. 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

spring mvc homepage 스프링 홈페이지 만들기 4

이번에는 DB와 데이터를 주고 받을 DOMIAN 객체와 서비스를 만들어 볼게요. 

아 그전에 전 util이라는 패키지를 만들어서 자주 사용하는 log나 가끔 정보 볼때 사용하는 명령어들을 모아놓았어요.

com.eunhocompany.util 패키지에 유틸메세지를 복사해요.

Util_Message.java
0.02MB

이파일이 에러날때 pom.xml에 바코드고나련 메이븐 설정이 빠져서 그래요. 

<!-- 구글바코드 오픈소스 -->
		 <dependency> 
		 	<groupId>com.google.zxing</groupId> 
		 	<artifactId>core</artifactId> 
		 	<version>3.4.0</version> 
		 </dependency> 
		 <!-- https://mvnrepository.com/artifact/com.google.zxing/javase --> 
		 <dependency> 
		 	<groupId>com.google.zxing</groupId> 
		 	<artifactId>javase</artifactId> 
		 	<version>3.4.0</version> 
		 </dependency>

com.eunhocompany.domain com.eunhocompany.persistence com.eunhocompany.service 패키지를 만들어주세요. 

 

CommonData.java
0.00MB
Criteria.java
0.00MB
PageMaker.java
0.00MB
Member.java
0.00MB
MemberRole.java
0.00MB
SearchCriteria.java
0.00MB

 

domain에 위 클래스를 넣어주세요. 

소스내용은 살펴보시면 돼요.

다음은 persistence 이쪽을 만들어 줄텐데요. 

 

commonDAO.java
0.00MB
first_commonDAOImpl.java
0.00MB
second_commonDAOImpl.java
0.00MB

 

db별로 만들어 주었어요. 다음은 service를 만들게요.

 

common_Service.java
0.00MB
First_ServiceImpl.java
0.00MB
Common_ServiceImpl.java
0.01MB
Second_ServiceImpl.java
0.00MB

 

db별로 서비스를 만들어주고 공통으로 사용할 것도 만들었어요. 

이제 홈컨트롤러에서 시간을 db에서 받아와서 출력해볼께요. 

package com.eunhocompany.home;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

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

import com.eunhocompany.domain.CommonData;
import com.eunhocompany.persistence.commonDAO;
import com.eunhocompany.service.Common_ServiceImpl;
import com.eunhocompany.service.Second_ServiceImpl;
import com.eunhocompany.util.Util_Message;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	
	@Autowired
	private Common_ServiceImpl service;
	
	Util_Message smsp=Util_Message.getInstance();
	/**
	 * Simply selects the home view to render by returning its name.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) throws Exception {
		//logger.info("Welcome home! The client locale is {}.", locale);
		smsp.print_String("Welcome home! The client locale is"+locale.toString());
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		CommonData test = new CommonData();
		String time = service.selectstr(test, "BasicMapper.getCurrentDateTime_second");
		
		model.addAttribute("dbserverTime", time );
		return "home";
	}
	
}

 

홈 컨트롤러를 수정했어요.  그리고 db에서 데이터 가져올때

String time = service.selectstr(test, "BasicMapper.getCurrentDateTime_second"); 이런식으로 사용하는데요. 두번째 칸에 mapper이름 그다음 id값이 들어가면되요. 

<?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="com.eunhocompany.mapper.first.BasicMapper">
	<select id="getCurrentDateTime_second" resultType="String"> 
		SELECT NOW() 
	</select>
</mapper>

바로 실행하시면 에러가 나요. 서비스랑 db부분을 등록시켜줘야되요. 

servlet-context.xml
0.00MB
root-context.xml
0.00MB

위 파일을 받아서 수정을 해요. 넣어주세요. 경로는 이래요. 

 

마지막으로 home.jsp에 수정을 해줘요.

  				<P>  The time on the server is ${serverTime}. </P>
                <P>  The time on the dbserver is ${dbserverTime}. </P>

그럼 출력결과를 확인할수 있어요. 

 

 

 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

spring mvc homepage 스프링 홈페이지 만들기 3

mysql을 설치해주세요. 헐.. 전 mariadb를 설치되어 있네요. 

mariadb10.4

음 mariadb로 설치할께요 mysql과 동일하게 접속이 되니 그냥 진행할께요. 

db를 하나 만들어요. home_page로 만들었어요. 
schemas 잘만들어지네요.

mysql workbench 프로그램으로 생성이 되니 mysql홈페이지에서 다운받아 설치하시면되요. 

SELECT HOST, USER, PASSWORD FROM USER;

CREATE USER 'eunhopapa'@'%' IDENTIFIED BY 'eunho20190000';
SELECT HOST, USER, PASSWORD FROM USER;

db를 생성해요. mariadb도 버전이 오르면서 툴에서 생성하는게 잘 안되어서 명령어로 생성해요. 

권한등을 설정할꺼에요. 
dba설정

전 모든권한을 주었어요.

이렇게 db생성이 되었습니다. 

그리고나서 toad for mysql 설치합니다. 

접속 설정

이렇게 해서 db에 접속을 해요. 잘되네요. 이제 스프링에 세팅해줄께요. 

/homepage/src/main/webapp/WEB-INF/spring/root-context.xml
/homepage/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

두파일을 수정해요.

엑셀다운로드 mybitis log 인터셉터등으로 다양한 파일을 생성해야해요. 내용은 없고 추가해주도록할게요.

interceptor를 추가해줄께요. 하나는 로그인 관련 처리할것이고 하나는 메타태그 관련정보를 다를거에요. 

AuthInterceptor.java
0.00MB
MetaInterceptor.java
0.00MB

src->main->resources 안에 아래의 파일을 추가수정해요. 

log4j.xml
0.00MB
log4jdbc.log4j2.properties
0.00MB
mybatis-config.xml
0.00MB

그리고 쿼리 관련 xml도 만들어줘요. 

BasicMapper.xml
0.00MB

WIN-INF 에다가 views.xml 파일을 복사해줘요. 

views.xml
0.00MB

그럼 실행을 해보면 별로 변한건 없이 db연결만 되었어요. 테스트는 따로 안할께요. 

그리고 jsp 파일에 <div class="container"> 부분을 모두 <div class="container-fluid"> 이렇게 변경을 해주세요

전 화면에 꽉찬 페이지를 만들고 싶어서 그래요. 

홈페이지

꽉 찬 페이지가 나오는것을 확인할수 있어요. <div class="col-lg-6"> 을 <div class="col-lg-12"> 변경해야하는것도 잊지 마세요.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

spring  mvc homepage  스프링 홈페이지 만들기 2

adminlte를 붙여볼게요. 

여기에 복사

경로는 src -> main -> webapp -> resources 에 압축을 푼 adminlte를 복사를 해요. 

※AdminLTE-3.0.4 가 길어보여서 AdminLTE로 이름 변경했어요. 

샘플소스

복사를 모두 해도 되겠지만 일단 조금씩 해볼께요. 용량이 큰지라 top-nav.html 기준으로 가져와 볼게요.

top-nav.html 파일을 메모장에서 열어요. 대충 보니까 두 군데 파일이 필요해 보이는데 2 폴더 용량이 61메가나 되네요.

모든 소스가 다 포함되어 있어서 사용하는 파일만 하나하나 복사할까 했지만 그냥 다 복사할게요.

그리고 home.jsp파일내용을 top-nav.html내용으로 수정해줍니다. 경로도 수정야 하는데요. 첨부파일을 참고해주세요.

home.jsp
0.01MB

실행하여 결과를 보면요. 

home.jsp수정후 결과

결과를 잘 보았는데요. 이제 이걸 쪼갤 예정입니다. 위쪽 메뉴 부분과 아래쪽 부분은 다른 페이지에서 공통으로 사용하는 영역이고요. 

본문 내용만 계속 수정이 이루어질 예정이기 때문에 그래요.

페이지 소스를 보니 보니 <!-- Content Wrapper. Contains page content --> 부분 위쪽과 <!-- /.content-wrapper --> 부분 아래쪽으로 나누면 될 거 같아요. 

views안에 하위 폴더를 만들어요 저는 include라는 폴더를 만들었어요. 

그리곤 home.jsp파일을 복사를 했어요. 

파일명은 top과 bottom이라고 지었어요 주석을 보니 헤더와 풋터로 해야 할 것 같은 느낌인데 그냥 진행할게요. 

top bottom.

top는 <!-- Content Wrapper. Contains page content --> 위쪽만 남기고 bottom은 <!-- /.content-wrapper -->아래쪽만남겨요.

home.jsp 파일내용도 수정을 해요. 

<!-- Content Wrapper. Contains page content --> 와  <!-- /.content-wrapper --> 사이내용만 남기고 위아래를 지워요. 

그리고 위아래로 두파일을 포함시켜요. 

<%@include file="include/top.jsp"%>
<%@include file="include/bottom.jsp"%>

그럼 이렇게 파일3개가 수정되었어요. 첨부한 파일을 참고하세요. 

home.jsp
0.00MB
top.jsp
0.01MB
bottom.jsp
0.00MB

그리고 결과를 확인해보면 이렇게 나와요. 

아까와 결과가 같지요? 

이제 로그인이라던지 가입하기 같은 걸 해볼 거예요. db를 설치하고 해야 할 텐데 

전 mysql을 사용할 예정이에요. 버전은 상관없어요. 

참고자료 book.naver.com/bookdb/book_detail.nhn?bid=9425458

 

코드로 배우는 스프링 웹 프로젝트

[코드로 배우는 스프링 웹 프로젝트]는 개발 현장에서 사용하는 도구로서 스프링을 취급하는 책으로, SPRING FRAMEWORK(이하 스프링)를 이용해서 ‘웹 프로젝트’를 어떻게 진행하는지를 설명한다. �

book.naver.com

참고 카페 cafe.naver.com/gugucoding

 

구멍가게코딩단 : 네이버 카페

안녕하세요? 구멍가게 코딩단의 활동을 위한 카페입니다.

cafe.naver.com

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

spring  mvc homepage  스프링 홈페이지 만들기 1

스프링을 이용하여 홈페이지를 제작해볼 예정입니다. 

최대한 간단하게 필요한 결과 위주로 구성해볼 예정입니다.

UI는 https://adminlte.io/themes/v3/pages/layout/top-nav.html를 이용할 예정입니다.

소스코드를 다운로드 받아주세요.
용량

압축을 해제하니 용량이 제법 많으네요. 일단 다운로드한 후 잘 보관해 놓으세요.

STS를 설치해주세요. 그리고 새로운 프로젝트를 시작해요.

스프링프로젝트생성

프로젝트를 생성을 해요. 생성할때 Spring MVC Project로 해주세요. 

서버를 실행해보세요. 톰캣서버로 실행을 할 거예요. 8 버전으로 맞추어 주세요. 

실행을 하면 이런 화면이 보일꺼에요. 

hello world

??? 표도 나오고 그러죠? 이제 utf8환경으로 세팅을 할 건데요. 세팅되어 있는 환경을 복사하는 형태로 진행할게요.

안에 내용은 따로 공부해보세요. 검색하면 잘 나와요. 

처음에 할 일은 pom.xml을 수정할 거예요. 

pom.xml

이 부분을 남기고 모두 첨부한 pom.xml과 같게 수정을 해줘요 안에 필요 없는 내용은 삭제하시면 돼요. 

pom.xml
0.01MB

다음은 web.xml을 수정할게요. 

web.xml
0.00MB

web.xml내용을 복사해주세요.

이제 jsp페이지를 수정할 거예요. 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 

내용일 텐데요 아래와 같이 수정을 해요. 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 

서버 폴더 안에 톰캣 8이 있어요 거기에 server.xml이 있는데 이걸 수정할 거예요.

<Context docBase="homepage" path="/" reloadable="true" source="org.eclipse.jst.jee.server:homepage"/></Host>

path를 지우세요. 이러면 localhost:8080으로 접속 시 바로 home.jsp내용이 나와요. 

헬로우 월드가 출력되었죠?

다음은 ADMINLTE3 네이게이션페이지를 출력해볼께요. 

 

참고자료

https://book.naver.com/bookdb/book_detail.nhn?bid=9425458

 

코드로 배우는 스프링 웹 프로젝트

[코드로 배우는 스프링 웹 프로젝트]는 개발 현장에서 사용하는 도구로서 스프링을 취급하는 책으로, SPRING FRAMEWORK(이하 스프링)를 이용해서 ‘웹 프로젝트’를 어떻게 진행하는지를 설명한다. �

book.naver.com

참고카페

https://cafe.naver.com/gugucoding

 

구멍가게코딩단 : 네이버 카페

안녕하세요? 구멍가게 코딩단의 활동을 위한 카페입니다.

cafe.naver.com

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,
<html>
<head>
	<meta charset="utf-8">
	<title>javascript</title>
	<style>
	/* Style the buttons that are used to open and close the accordion panel */
	.accordion {
	  background-color: #eee;
	  color: #444;
	  cursor: pointer;
	  padding: 18px;
	  width: 100%;
	  text-align: left;
	  border: none;
	  outline: none;
	  transition: 0.4s;
	}
	
	/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */
	.active, .accordion:hover {
	  background-color: #ccc;
	}
	
	/* Style the accordion panel. Note: hidden by default */
	.panel {
	  padding: 0 18px;
	  background-color: white;
	  display: none;
	  overflow: hidden;
	}
	</style>	
	
</head>
<body>
		<button class="accordion">Section 1</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
		
		<button class="accordion">Section 2</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
		
		<button class="accordion">Section 3</button>
		<div class="panel">
		  <p>Lorem ipsum...</p>
		</div>
</body>
<script>
		var acc = document.getElementsByClassName("accordion"); //아코디언클래스리스트를 가져온다.
		var i;
		
		for (i = 0; i < acc.length; i++) {
		  acc[i].addEventListener("click", function() { //클릭이벤트를 추가한다. 
		    /* Toggle between adding and removing the "active" class,
		    to highlight the button that controls the panel */
		    this.classList.toggle("active"); //클래스를 추가하거나 삭제함. 
		
		    /* Toggle between hiding and showing the active panel */
		    var panel = this.nextElementSibling; //현재 아코디언의 다음노트를 가져온다. panel이 옴 
		    if (panel.style.display === "block") { //출력모드가 블럭인지 none인지 체크한다.
		      panel.style.display = "none";
		    } else {
		      panel.style.display = "block";
		    }
		  });
		}
	</script>
</html>

이번소스는 아코디언이에요. 

아코디언

var acc = document.getElementsByClassName("accordion"); //아코디언클래스리스트를 가져온다.

acc갯수 만큼 for문을 돌려요. 

클릭이벤트를 추가해주면 되요.

 acc[i].addEventListener("click", function() { //클릭이벤트를 추가한다. 
		    /* Toggle between adding and removing the "active" class,
		    to highlight the button that controls the panel */
		    this.classList.toggle("active"); //클래스를 추가하거나 삭제함. 
		
		    /* Toggle between hiding and showing the active panel */
		    var panel = this.nextElementSibling; //현재 아코디언의 다음노트를 가져온다. panel이 옴 
		    if (panel.style.display === "block") { //출력모드가 블럭인지 none인지 체크한다.
		      panel.style.display = "none";
		    } else {
		      panel.style.display = "block";
		    }
		  });

https://www.w3schools.com/ 여기사이트 소스를 참고했어요.

 

 

W3Schools Online Web Tutorials

HTML Example:

This is a heading

This is a paragraph.

Try it Yourself » CSS Example: body {   background-color: lightblue; } h1 {   color: white;   text-align: ce

 

www.w3schools.com

 

 

W3Schools Online Web Tutorials

HTML Example:

This is a heading

This is a paragraph.

Try it Yourself » CSS Example: body {   background-color: lightblue; } h1 {   color: white;   text-align: ce

 

www.w3schools.com

 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

자바스크립트를 이용한 상단으로 이동하는 코드에요.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
	<meta charset="utf-8">
	<title>css</title>
	<style>
	[align] {
		background-color: black;
		color: white;
	}
	div[align="right"] {
		background-color: green;
		color: white;
	}
	</style>	
	
</head>
<body>
	<div align="left" id="one">
		HELLO.
	</div>
	<button id ="target" type="button">PUSH</button>
	<div id ="two">
		HELLO.
	</div>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
		<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	<pre>
Sample blog post
January 1, 2014 by Mark

This blog post shows a few different types of content that’s supported and styled with Bootstrap. Basic typography, images, and code are all supported.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Heading
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Example code block
Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Sub-heading
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

Vestibulum id ligula porta felis euismod semper.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Maecenas sed diam eget risus varius blandit sit amet non magna.
Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

Another blog post
December 23, 2013 by Jacob

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.

Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

New feature
December 14, 2013 by Chris

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
Donec id elit non mi porta gravida at eget metus.
Nulla vitae elit libero, a pharetra augue.
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
	</pre>
	
	<a id="GOTO_TOP" href="#">GOTO_TOP</a>
</body>
<script>
		var back_top = document.getElementById('GOTO_TOP');
		var docElem = document.documentElement,
		offset,
		scrollPos,
		docHeight;
		
		docHeight = Math.max(docElem.offsetHeight, docElem.scrollHeight); //페이지 길이
		console.log(docHeight);
		//scrollPos = docElem.scrollTop; //스크린 탑의 위치 
		//console.log(scrollPos);
		if(docHeight != 'undefined')
		{
			offset = window.innerHeight; //웹브라우저 창의 뷰창의 높이 
			console.log(offset); 
		}
		window.addEventListener('scroll',function(event){
			scrollPos =event.srcElement.scrollingElement.scrollTop; //현재위치.
			// document.documentElement.scrollTop; //스크린 탑의 위치 
			console.log(scrollPos); //현재 위치. 
			console.log('출력 현재 위치.');
			
			if(offset< scrollPos)
			{
			 	back_top.className= 'visible';
			}
			else
			{
				back_top.className= '';
			}
			
				},false);
		back_top.addEventListener('click',function(e){
			e.preventDefault(); //이전이벤트를 초기화;
			scrollToTop();
			// document.body.scrollTop = document.documentElement.scrollTop = 0;
		},false);
		function scrollToTop()
		{
			//var scrollInterval = setInterval(할일,시간);		
			var scrollInterval = setInterval(function(){
			if(scrollPos>0)
			{
				window.scrollBy(0,-55);//스크롤이동 
			}
			else
			{
				clearInterval(scrollInterval); //인터발 멈춤
			}
															},15);
			//document.body.scrollTop = document.documentElement.scrollTop = 0;
		}
	</script>
</html>

본문내용을 길게 적었어요. 부트스트랩 샘플페이지 내용을 긁어와서 4-5번 붙여 넣었어요. 

아래쪽에 A태그로 버튼을 만들어줬어요. 

window.addEventListener('scroll',function(event){

윈도우에 스크롤이벤트시 리스너를 만들어 줬어요. 스크롤 이벤트 발생시 들어와요. 

back_top.addEventListener('click',function(e){

A태그 클릭시 이벤트 리스너도 만들어줬어요. 

scrollToTop() FUNCTION을 호출하는데 

여기선 인터벌로 시간마다 호출되게 해줬어요. 

특정조껀이 되면 인터발을 멈추었어요. 

			var scrollInterval = setInterval(function(){
			if(scrollPos>0)
			{
				window.scrollBy(0,-55);//스크롤이동 
			}
			else
			{
				clearInterval(scrollInterval); //인터발 멈춤
			}

한번에 탑으로 이동하고 싶다면 

document.body.scrollTop = document.documentElement.scrollTop = 0;

이렇게 적어주시면 되요. 

 IE에선 작동하지 않아요. 

JQUERY 코드를 추천드려요. 

function sms_goTop_Function()
{
   var delay = 0;
   $("html, body").animate({ scrollTop: 0 }, delay, scroll_menu_calibration);
   return false;
}
var scroll_menu_calibration = function ()
{
	
}

이상입니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

1. HTML 이벤트 핸들러 사용

추천하진 않는다.

 

2.이벤트 리스너를 등록하여 사용하기

※스크립트가 실행될때 문서가 모두 로드된후 실행되어야 하기때문에 태그 아래쪽에 스크립트를 추가해요.

<html>
<head>
	<meta charset="utf-8">
	<title>css</title>
	<style>
	[align] {
		background-color: black;
		color: white;
	}
	div[align="right"] {
		background-color: green;
		color: white;
	}
	</style>	
	
</head>
<body>
	<div align="left" id="one">
		안녕하세요.
	</div>
	<button id ="target" type="button">누르기</button>
	<div id ="two">
		안녕하세요.
	</div>
</body>
<script>
	
		var one = document.getElementById('one');
		var two1 = document.getElementById('two');
		var t = document.getElementById('target');
		one.addEventListener('click',function(){one.style.color='blue';},false );
		one.addEventListener('mouseover',function(){one.style.background='yellow';},false );//마우스가 올라왔을때
		one.addEventListener('mouseout',function(){one.style.background='#ff0000';},false );//마우스가 나갔을때
		
		two1.addEventListener('mousedown',function(){one.style.background='0000ff';},false ); //마우스 다운업이 안되네 
		two1.addEventListener('mouseup',function(){one.style.background='000fff';},false );  
		two1.addEventListener('mouseover',function(){two1.innerHTML='마우스올라옴'},false );
		two1.addEventListener('mouseout',function(){two1.innerHTML='마우스나감';},false ); 
		
		//two1.addEventListener('click',function(){two1.style.color='red';},false);
	    //t.addEventListener('click', function(event){alert('Hello world, '+event.target.value);});
	    t.addEventListener('mousedown',function(){one.style.background='0000ff';},false ); //마우스 다운업이 안되네 
		t.addEventListener('mouseup',function(){one.style.background='000fff';},false );  
	</script>
</html>

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,