카테고리 없음

0312 오전수업 (인터셉터)

unemo 2021. 3. 12. 12:23
반응형

스프링인터셉터 : 스프링mvc에잇는 모델

플로우를 끊어내는 애들이잇는데

간섭같은놈들 (ex 필터, aop) 리퀘스트를갖기이전에 뭔가하느넘들.. 간섭!

오늘배울건 여기

 

중심은 컨트롤러

컨트롤러를 기준으로

구매에 대한 요ㅔ청을 햇다 > 뭘구매햇는지 잠깐 뺴가지고 로그를 만들어놓음

그런로그들을 찍기위해서 컨트롤러를 그렇게 만들기는 어려움 (메서드내에다 만들어야하니까)

그래서 이것도 거는거임

걸면 컨트롤러 전에 혹은 뷰리졸버 넘어가기전에 (애프터) 모델에대한정보나 그런것들뺴내서

흐름을 진행못하게할수도잇고 첩자처럼 어디다가정보저장시킬수도잇음

사용자들의 구매성향을 알고싶다

구매에 대한 컨트롤러가 다 만들어져잇는데 구매성향등을 서버의 로그파일에 저장하기시작

백데이터 취합해서 로그데이터 만들기 >> 인터셉터 활용하면됨

 

로그인실패를 5번하면 못하게하려고

로긴5번잡는건 1번에서, 구매성향같은건 2번에서 잡아야함

예시

 

 

저 로그파일

저 로그파일 어디서만듦? 컨트롤러? 아님!! 인터셉터가 만듦

빅데이터플랫폼인 Flume이라는게 잇는데 그게 데이터를 읽어서 데이터 프레임을 만듦 그걸 분석기를 돌려서 결과를 얻을수잇음 극 결과만 RDBMS에 넣는거임

 

암튼 그 로그를 만드는게 인터셉텅미

필요없으면 들어내야하는데 컨트롤러 코드에 박는다? 안됨

인터셉터는 xml한장으로 끝남

 

오라클드라이버와 커먼 어쩌구 가져와야함

ojdbc 레파지토리 잊지말고 pom.xml

 

web.xml

 

데이터소스 xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:c="http://www.springframework.org/schema/c"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean    id="dataSource" 
         class="org.apache.commons.dbcp2.BasicDataSource" 
         p:driverClassName="oracle.jdbc.driver.OracleDriver"
         p:url="jdbc:oracle:thin:@localhost:1521:xe"
         p:username="JSP"
         p:password="java"
         p:maxIdle="2"
         p:maxTotal="2"
         />

 

 

로그인과 회원등록 만들거임

거기에 필요한 vo부터 시작

 

package com.spring.dto;

public class MemberVO {

	private String id;
	private String pwd;
	private String phone;
	private String email;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
	
}

 

 

등록과 로그인에 필요한 DAO만들거

package com.spring.dao;

import java.sql.SQLException;

import com.spring.dto.MemberVO;

public interface MemberDAO {

	public void insertMember(MemberVO member) throws SQLException;
	
	public MemberVO selectMember(String id) throws SQLException;
}

 

마이바티스를 안걸어서 jdbc를 써야함

어노테이션 등록... 그럼 의존주입도 @으로

package com.spring.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

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

import com.spring.dto.MemberVO;

@Repository("memberDAO")
public class MemberDaoImpl implements MemberDAO {

	@Autowired
	private DataSource dataSource;
	
	@Override
	public void insertMember(MemberVO member) throws SQLException {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = dataSource.getConnection();
			
			String sql = "insert into member(id,pwd,phone,email) values(?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, member.getId());
			pstmt.setString(2, member.getPwd());
			pstmt.setString(3, member.getPhone());
			pstmt.setString(4, member.getEmail());

			pstmt.executeUpdate();
		}catch (SQLException e) {
			throw e;
		}finally {
			if(pstmt!=null)pstmt.close();
			if(conn!=null)conn.close();
		}
	}

	@Override
	public MemberVO selectMember(String id) throws SQLException {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		String sql = null;
		
		MemberVO member = new MemberVO();
		try {
			conn = dataSource.getConnection();
			stmt = conn.createStatement();
			sql = "select * from member where id ='"+ id + "'";
					
			rs=stmt.executeQuery(sql);
			
			if(rs.next()) {
				member.setEmail(rs.getString("email"));
				member.setId(rs.getString("id"));
				member.setPhone(rs.getString("phone"));
				member.setPwd(rs.getString("pwd"));
			}
		}catch (SQLException e) {
			throw e;
		}finally {
			if(stmt!=null)stmt.close();
			if(conn!=null)conn.close();
		}
		
		
		
		return null;
	}

	

}

 

 

서비스

 

package com.spring.service;

import java.sql.SQLException;

import com.spring.dto.MemberVO;

public interface MemberService {
	public MemberVO getMember(String id) throws SQLException;
	public void regist(MemberVO member)throws SQLException;
}

 

package com.spring.service;

import java.sql.SQLException;

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

import com.spring.dao.MemberDAO;
import com.spring.dto.MemberVO;

public class MemberServiceImpl implements MemberService {

	@Autowired
	private MemberDAO memberDAO;
	
	@Override
	public MemberVO getMember(String id) throws SQLException {
		MemberVO member = memberDAO.selectMember(id);
		return member;
	}

	@Override
	public void regist(MemberVO member) throws SQLException {
		memberDAO.insertMember(member);
	}

}

fㅇㄴ

 

서블릿컨텍스트

상위를 잡아서 dao service controller 다 읽도록

 

 

리다이렉트 어트리뷰트

redirectAttrivutes 가 다름

ㅇ리다이렉트에 상태유지하려면 주소줄에 심어야하는데 그걸 대신해주느녀석이

리다이렐트어트리뷰트

얘한테는 flash어트리뷰트랑

그냥 어트리뷰트 메서드가잇는데

전자는 리다이렉트를 햇지만 리퀘스트랑 리스펀스가? 살아잇음

그냥어트리뷰트는 주소줄에 파라미터를 만들어줌

 

프래쉬 어트리뷰트는 컨트롤러에서 어댑터로 심어진다. 그걸 어댑터가 가지고있고!  브라우저에는 유알엘만 보냄

그리고 리다이렉트니까 다시 리퀘스트가 오면, 어댑터는 가지고잇던 그 flassAttribute 받은걸 그 새로운 리퀘스트에 담아서 다음컨트롤러로 줌. 그럼 그 컨트롤러에서 jsp로 갈테니까

리다이렉트 된 후에 열려지는 jsp에 오게됨

여기서 새고한번하면 이제 리퀘스트없어지는것

언제마니씀 ? 글등록후에 메인화면에서 ~~글이 등록되엇읍니다 한번뜨고 새고하면 안나옴 이럴때쓴다

아이디패스워드틀렷습니다. 한번뜨고 새고하면 안나오게할때도 써먹을수잇다

 

근데 그냥 어트리뷰트는 파라미터로 가서, 유알엘의 키밸류로 감

 

 

반응형