LoginFilter
/user/*

package common.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import common.base.CommonUtil;
import user.domain.UserVO;

/**
 *    /user/*로 시작하는 요청이 올 경우 로그인체크 필터가 해당 요청을 필터링한다.
 */
@WebFilter(urlPatterns = {"/user/*","/admin/*"})
public class LoginCheckFilter implements Filter {

    public LoginCheckFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("LoginCheckFilter...");
		//세션에 저장되어 있는 loginUser를 꺼낸다.
		//만약 저장되어 있는 loginUser가 없다면 "로그인 해야 이용할 수 있어요"를 보여주고 return
		HttpServletRequest req = (HttpServletRequest)request;
		HttpSession ses= req.getSession();
		UserVO loginUser = (UserVO)ses.getAttribute("loginUser");
		if(loginUser==null) {
			String msg = "로그인 해야 이용할 수 있음";
			String loc=req.getContextPath()+"/signin.do";
			String viewPage = CommonUtil.addMsgLoc(req,msg,loc);
			RequestDispatcher disp=req.getRequestDispatcher(viewPage);
			disp.forward(req, response);
			return;
		}
		//그렇지 않으면 다음 필터로 넘긴다.
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

AdminFilter

package common.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import common.base.CommonUtil;
import user.domain.UserVO;

@WebFilter("/admin/*")
public class AdminCheckFilter implements Filter {

    /**
     * Default constructor. 
     */
    public AdminCheckFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request;
		HttpSession ses= req.getSession();
		UserVO loginUser = (UserVO)ses.getAttribute("loginUser");
		if(loginUser==null||loginUser.getMstate()!=2) {
			String msg = "관리자만 이용할 수 있음";
			String loc=req.getContextPath()+"/signin.do";
			String viewPage = CommonUtil.addMsgLoc(req,msg,loc);
			RequestDispatcher disp=req.getRequestDispatcher(viewPage);
			disp.forward(req, response);
			return;
		}
		
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

쇼핑몰

drop table upCategory;
--상위 카테고리 테이블
create table upCategory(
  upCg_code number(8) constraint upCategory_pk primary key, --상위 카테고리 코드
  upCg_name varchar2(30) not null--상위 카테고리명
);

drop sequence upCategory_seq;

create sequence upCategory_seq
start with 1 increment by 1 nocache;

drop table downCategory;

create table downCategory(
  downCg_code number(8) constraint downCategory_pk primary key, --하위 카테고리 코드
  downCg_name varchar2(30) not null, --하위 카테고리명
  upCg_code number(8) constraint upCg_code_fk references upCategory(upCg_code)
);

drop sequence downCategory_seq;

create sequence downCategory_seq nocache;

insert into upCategory values(upCategory_seq.nextval,'식품.새활용품');
insert into upCategory values(upCategory_seq.nextval,'디지털.전자가전');
commit;
select * from upcategory;


insert into downCategory values(downCategory_seq.nextval,'신선식품',1);
insert into downCategory values(downCategory_seq.nextval,'세제',1);

insert into downCategory values(downCategory_seq.nextval,'노트북',2);
insert into downCategory values(downCategory_seq.nextval,'냉장고',2);
commit;
select * from downCategory;

drop table product;

create table product(
  pnum number(8) constraint product_pk primary key, --상품번호
  upCg_code number(8) references upCategory(upCg_code),--상위 카테고리코드
  downCg_code number(8) references downCategory(downCg_code),--하위 카테고리코드
  pname varchar2(100) not null, --상품명
  pimage1 varchar2(200) default 'noimage.png',--상품이미지1
  pimage2 varchar2(200) default 'noimage.png',--상품이미지2
  pimage3 varchar2(200) default 'noimage.png',--상품이미지3
  price number(8) default 0, --상품 정가
  saleprice number(8) default 0, --판매가
  pqty number(5), --보유 수량
  point number(8) default 0, --적립 포인트
  pspec varchar2(20), --상품 스펙 (HIT, NEW, BEST ...)
  pcontents varchar2(1000), --상품 설명
  pcompany varchar2(30), --제조사
  pindate date default sysdate
);

drop sequence product_seq;
create sequence product_seq nocache;

insert into product values(product_seq.nextval,1,1,'아오리사과','apple1.png',
'apple2.png','apple3.png',20000,18000,100,50,'HIT','맛있어요,신선해요','신선농장',sysdate);
insert into product values(product_seq.nextval,1,1,'수박','water1.png',
'water2.png','water3.png',25000,15000,300,150,'HIT','맛있어요,신선해요!','신선농장',sysdate);
commit;

insert into product values(product_seq.nextval,2,3,'LG노트북','note1.png',
'note2.png','note3.png',2000000,1700000,200,500,'HIT','성능좋은 노트북','LG',sysdate);
insert into product values(product_seq.nextval,2,3,'삼성노트북','note4.png',
'note5.png','note6.png',2200000,1800000,300,550,'NEW','빠른 노트북','Samsung',sysdate);
commit;

select * from product;

MyBatis
ORM Framework (Object Relation DB Mapping)

환경설정 및 사용법

1. MyBatis Framework( 전신 iBatis) 다운로드
	
		http://blog.mybatis.org/

	Product메뉴 선택하여

	mybatis-3.4.1.zip 파일을 다운로드 받자

2. 압축을 풀어서 mybatis-3.4.1.jar파일을

	MyMVC/WebContent/WEB-INF/lib/ 아래 붙여넣기
	

3.  JavaResources/src에 config패키지를 만들어서
	해당 패키지에 mybatis-config.xml 파일을 두자.

==========mybatis-config.xml=======================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 타입 별칭 설정============================  -->

	<!-- 데이터베이스 트랜잭션 관리자 설정=========== -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver"
				 value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" 
				value="jdbc:oracle:thin:@192.168.10.150:1521:ORCL" />
				<property name="username" value="king" />
				<property name="password" value="tiger" />
			</dataSource>
		</environment>
	</environments>
	<!-- 매퍼 정의================================ -->
	<mappers>
		<!-- <mapper resource="org/mybatis/example/BlogMapper.xml" /> -->
		
		<mapper resource="board/model/BoardMapper.xml"/>
		
	</mappers>
</configuration>

===================================================

4.  board.model패키지에 BoardMapper.xml을 아래와 같이 작성
=======BoardMapper.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="board.model.BoardMapper">
	<select id="totalCount" resultType="int">
		select count(*) cnt from board
	</select>
</mapper>
======================================================

5. board.model패키지에 BoardDAOMyBatis클래스를 작성하자.'

=========BoardDAOMyBatis.java=========================
package board.model;

import org.apache.ibatis.io.*;
import org.apache.ibatis.session.*;
import java.util.*;
import java.io.*;

public class BoardDAOMyBatis {

	//어떤 mapper를 사용할지 정함(네임스페이스 지정 필수)
	private final String NS="board.model.BoardMapper";
	
	//세션팩토리를 얻는 메소드 구성
	private SqlSessionFactory getSessionFactory(){
		String resource="common/config/mybatis-config.xml";
		InputStream is=null;
		try {
			is=Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		SqlSessionFactory fac
		=new SqlSessionFactoryBuilder().build(is); 
		return fac;
	}//----------------------------------
	
	/**[게시판 목록 관련] 총 게시글 수 가져오기*/
	public int getTotalCount(){
		SqlSession ses=this.getSessionFactory().openSession();
		int count=ses.selectOne(NS+".totalCount");
		if(ses!=null) ses.close();
		return count;
	}//----------------------------------
}////////////////////////////////////

======================================================

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Ajax
Json

JSON이란? - Javascript Object Notation
자바스크립트에서 이용하는 객체 형태로 데이터를 표현하는 방식
JSON객체에는 문자열, 배열, 숫자, boolean, null 값만 들어갈 수 있다.

jsonTest.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:include page="/top.jsp"/>
<script type="text/javascript">
	$(function(){
		$('#bt1').click(function(){
			$.ajax({
				type:'get',
				url:'jsonData.jsp',
				dataType:'json',
				cache:false,
				success:function(res){
					//alert(JSON.stringify(res));
					showData(res);
				},error:function(err){
					alert("error: "+err.status);
				}
			})
		});
		
		$('#bt2').click(function(){
			$.ajax({
				type:'get',
				url:'jsonData2.jsp',
				dataType:'json',
				cache:false,
				success:function(res){
					//alert(JSON.stringify(res));
					showList(res);
				},error:function(err){
					alert("error: "+err.status);
				}
			})
		});
		
		$('#bt3').click(function(){
			$.ajax({
				type:'get',
				url:'jsonData3.jsp',
				dataType:'json',
				cache:false,
				success:function(res){
					//alert(JSON.stringify(res));
					showList2(res);
				},error:function(err){
					alert("error: "+err.status);
				}
			})
		})
	})
	//단일 객체로 받아올 경우
	var showData=function(data){
		var str ="<table class='table table-bordered'>";
			str+="<tr>";
			str+="<th>도서명</th><th>출판사</th><th>가격</th><th>출판일</th>"
			str+="</tr>";
			str+="<tr>";
			str+="<td>"+data.title;
			str+="<br><img src='../images/"+data.bimage+"' class='img img-thumbnail'";
			str+="</td>";
			str+="<td>"+data.publish+"</td>";
			str+="<td>"+data.price+"</td>";
			str+="<td>"+data.published+"</td>";
			str+="</tr>";
			str+="</table>"
			$('#msg').html(str);
	}
	var showList=function(data){
		var str ="<table class='table table-bordered'>";
		str+="<tr>";
		str+="<th>도서명</th><th>출판사</th><th>가격</th><th>출판일</th>"
		str+="</tr>";
		str+="<tr>";
		//2) 배열로 받아올 경우 => 반복문 돌린다.
		//$.each(배열,function(index, item){})
		
		/* for(var i=0;i<data.length;i++){			
			str+="<td>"+data[i].title;
			str+="<br><img src='../images/"+data[i].bimage+"' class='img img-thumbnail'";
			str+="</td>";
			str+="<td>"+data[i].publish+"</td>";
			str+="<td>"+data[i].price+"</td>";
			str+="<td>"+data[i].published+"</td>";
			str+="</tr>";
		} */
		$.each(data,function(i,book){
			str+="<td>"+book.title+i;
			str+="<br><img src='../images/"+book.bimage+"' class='img img-thumbnail'";
			str+="</td>";
			str+="<td>"+book.publish+"</td>";
			str+="<td>"+book.price+"</td>";
			str+="<td>"+book.published+"</td>";
			str+="</tr>";
		});
		str+="</table>"
		$('#msg').html(str);
	}
	var showList2=function(data){
		var str ="<table class='table table-bordered'>";
		str+="<tr>";
		str+="<th>도서명</th><th>출판사</th><th>가격</th><th>출판일</th>"
		str+="</tr>";
		str+="<tr>";
		$.each(data.book_all,function(i,book){
			str+="<td>"+book.title+i;
			str+="<br><img src='../images/"+book.bimage+"' class='img img-thumbnail'";
			str+="</td>";
			str+="<td>"+book.publish+"</td>";
			str+="<td>"+book.price+"</td>";
			str+="<td>"+book.published+"</td>";
			str+="</tr>";
		});
		str+="</table>"
		$('#msg').html(str);
	}
</script>
<div class="text-left p-5">
	<h1>JSON형태로 데이터를 받아봅시다</h1>
	<button id="bt1">JSON형태로 받기1</button>
	<button id="bt2">JSON형태로 받기2</button>
	<button id="bt3">JSON형태로 받기3</button>
	<button id="bt4">JSON형태로 받기4-DB에서 가져오기</button>
	<button id="bt5">JSON형태로 받기5-라이브러리 사용하기</button>
	<button id="bt6">JSON형태로 받기6-라이브러리 사용하기</button>
	<hr>
	<div id="msg" style="margin-top: 20px">
	
	</div>
</div>
<jsp:include page="/foot.jsp"/>

jsonData.jsp (단일객체)

<%@ page language="java" contentType="application:json; charset=UTF-8"
    pageEncoding="UTF-8"%>
{
	"isbn":"887799",
	"title":"Ajax입문",
	"publish":"에이콘출판사",
	"price":35000,
	"published":"2020-07-29",
	"bimage":"a.jpg"
}

jsonData2.jsp (배열)

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
[
	{
		"isbn":"887799",
		"title":"Ajax입문",
		"publish":"에이콘출판사",
		"price":35000,
		"published":"2020-07-29",
		"bimage":"a.jpg"
	},
	{
	"isbn":"117799",
	"title":"JSP입문",
	"publish":"생능출판사",
	"price":25000,
	"published":"2020-06-29",
	"bimage":"b.jpg"
	},
	{
	"isbn":"227799",
	"title":"Java입문",
	"publish":"힌빛출판사",
	"price":35000,
	"published":"2018-07-29",
	"bimage":"c.jpg"
	}
]

jsonData3.jsp (객체가 배열)

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
{"book_all":[
	{
		"isbn":"887799",
		"title":"Ajax입문",
		"publish":"에이콘출판사",
		"price":35000,
		"published":"2020-07-29",
		"bimage":"a.jpg"
	},
	{
	"isbn":"117799",
	"title":"JSP입문",
	"publish":"생능출판사",
	"price":25000,
	"published":"2020-06-29",
	"bimage":"b.jpg"
	},
	{
	"isbn":"227799",
	"title":"Java입문",
	"publish":"힌빛출판사",
	"price":35000,
	"published":"2018-07-29",
	"bimage":"c.jpg"
	}
]
}

 

+ Recent posts