MVC model 2 pattern
Model View Controller
Logger (로깅)
public class EmpDao {
Logger log = Logger.getGlobal();
Connection conn;
Statement stmt;
ResultSet rs;
public EmpDao() {
String url = "jdbc:mysql://localhost:3306/lecture";
String user = System.getenv("MYSQL_USER");
String password = System.getenv("MYSQL_PW");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<EmpDto> getList() throws SQLException {
String sql = "select * from emp";
List<EmpDto> list = null;
list = new ArrayList<EmpDto>();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
EmpDto bean = new EmpDto();
bean.setEmpno(rs.getInt("empno"));
bean.setEname(rs.getNString("ename"));
bean.setSal(rs.getInt("sal"));
bean.setMgr(rs.getInt("mgr"));
bean.setComm(rs.getInt("comm"));
bean.setHiredate(rs.getTimestamp("hiredate"));
bean.setDeptno(rs.getInt("deptno"));
// System.out.println(bean);
// System.err.append("에러발생!");
// log.info(bean.toString());
list.add(bean);
}
} finally {
if(rs!=null) rs.close();
if(stmt!=null)stmt.close();
if(conn!=null) conn.close();
}
// info < warning < severe
log.setLevel(Level.INFO); // 개발용
// log.setLevel(Level.WARNING);
// log.setLevel(Level.SEVERE); // 배포용
// 눈에 보이지 않으나 파일에 저장되는 log
log.config("config list size:"+list.size());
log.fine("fine list size:"+list.size());
log.finer("finer list size:"+list.size());
log.finest("finest list size:"+list.size());
// console에 찍혀서 눈에 보이는 log
log.severe("심각 list size:"+list.size());
log.warning("경고 list size:"+list.size());
log.info("정보 list size:"+list.size());
return list;
}
}
PreparedStatement
프로시저를 이용한 쿼리문 생성
문자열에 대한 보안을 위해 생겨났으며, 속도 성능도 훨씬 좋다.
쿼리 injection 공격에 대한 방어가 된다.
검증하는 것 없이 받은 모양 그대로 만들기 때문에 보다 빠르다.
public int pushList(int empno, String ename, int sal) throws SQLException {
String sql = "insert into emp (empno, ename, hiredate, sal) values(?,?,now(),?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, empno);
pstmt.setString(2, ename);
pstmt.setInt(3, sal);
return pstmt.executeUpdate();
} finally {
if(pstmt!=null) pstmt.close();
if(conn!=null) conn.close();
}
}
procedure
DELIMITER $$
create procedure proc_emp_ins (
v_empno int,
v_ename varchar(50),
v_sal int)
begin
insert into emp (empno, ename, hiredate, sal)
values (v_empno, v_ename, now(), v_sal);
end $$
DELIMITER ;
CALL proc_emp_ins(7777, 'user7', 700);
RequestDispatcher
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// model
EmpDao dao = new EmpDao();
try {
List<EmpDto> list = dao.getList();
req.setAttribute("empList", list);
} catch (SQLException e) {
e.printStackTrace();
}
// view resolver
RequestDispatcher rd = null;
rd = req.getRequestDispatcher("index.jsp");
rd.forward(req, resp);
}
Test
public class DaoTest {
static EmpDto target = new EmpDto();
static EmpDao dao = new EmpDao();
public static void main(String[] args) throws SQLException {
target.setEmpno(8888);
target.setEname("user");
target.setSal(800);
// 입력테스트
getListTest();
pushListTest();
// 수정테스트
getOneTest();
editOneTest();
getOneTest();
// 삭제 테스트
deleteOneTest();
try {
getOneTest();
} catch (Exception e) {
System.out.println("삭제 성공");
}
}
public static void deleteOneTest() throws SQLException {
System.out.println(dao.deleteOne(target.getEmpno()) > 0);
}
public static void editOneTest() throws SQLException {
target.setEname("user8");
System.out.println(dao.editOne(target.getEmpno(),
target.getEname(),
target.getSal(),
target.getComm(),
target.getMgr()) > 0);
}
public static void getOneTest() throws SQLException {
EmpDto bean = dao.getOne(target.getEmpno());
System.out.println(bean!=null);
System.out.println(bean.getEname().equals(target.getEname()));
}
public static void pushListTest() throws SQLException {
System.out.println(dao.pushList(target.getEmpno(),
target.getEname(),
target.getSal()) > 0);
}
public static void getListTest() throws SQLException {
List<EmpDto> list = dao.getList();
// for(EmpDto bean : list) {
// System.out.println(bean.toString());
// }
System.out.println(list!=null);
System.out.println(list.size()>0);
}
}
Maven 프로젝트 생성 및 tomcat 배포
설치 후 환경변수 등록
MVN_HOME\bin
설치 확인
mvn --version
프로젝트 생성
mvn archetype:generate ^
-DarchetypeGroupId=org.apache.maven.archetypes ^
-DarchetypeArtifactId=maven-archetype-webapp ^
-DgroupId=com.bit.day47 ^
-DartifactId=mvn01
패키징하여 war 파일 생성
mvn package
target 폴더안의 war파일을 tomcat webapp 폴더에 넣어서 배포완료
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2023.02.15 Java Web 5 (maven, 어노테이션, mongoDB) (0) | 2023.02.15 |
---|---|
TIL 2023.02.14 Java Web 5 (SPA, libs, CORS, web.xml, modal) (0) | 2023.02.14 |
TIL 2023.02.09 jQuery3 Servlet (0) | 2023.02.09 |
TIL 2023.02.08 jQuery 2 (0) | 2023.02.08 |
TIL 2023.02.07 JSON, jQuery (0) | 2023.02.07 |