모델 1은 뷰와 로직을 모두 jsp 페이지 하나에서 처리하는 구조를 말한다
1.jsp
2.자바빈 혹은 서비스 클래스
모델 2는 모든 처리를 jsp 페이지 하나가 담당하는것 과는 달리 jsp페이지 와 서블릿,그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리한다.
자바빈 혹은 서비스 클래스 (Model)
jsp (view)
서블릿 (controller)
요청이 들어오면 요청에 대한 로직처리는 이를 처리할 모델(Model)인 서비스 클래스 혹은 자바빈이 담당하고 ,
요청 결과는 뷰(view)단인 jsp 에 출력 되며
이 모든 흐름제어는 컨트톨러인 서블릿(controller)이 담당한다.
-1.mysql -u java -p
create database 데이터베이스명;
-->create database testdb4;
-2.'java'권한 부여
grant all privileges on 데이터 베이스명 . to '아이디'@'localhost';
-->grant all privileges on testdb4 . to 'java'@'localhost';
-3.mysql -u java -p
테이블생성
create table users(
-> id VARCHAR2(12) PRIMARY KEY,
-> passwd VATCHAR2(50),
-> addr VARCHAR2(50),
-> age int,
-> email Varchar2(30),
-> gender CHAR(1),
-> name VARCHAR2(12),
-> nation VARCHAR2(16));
-4.value 추가
insert into users values('java','java','서울시',40,'aaa#naver','M','오정원','대한민국');
db:데이터 베이스 관련해서 공통적으로 수행해야하는 기능들을 정의한 패키지이다.
jdbcUtil.java :DB에 연결을 담당하는 메소드,DB작업을 처리한후 사용한 자원을 해제 시켜주는 메소드 등이 정의--> db작업을 할때 공통적으로 필요한 기능 정의
conttoller: 서블릿 정의
svc:비즈니스 로직을 구현하는 자바 파일들이 정의
dao:db에 존재하는 데이터들을 sql문장을 이용해서 다루는 클래스들 dao(data access objects)
vo:관련 있는 특정데이터 하나를 저장할수있는 형태의 클래스들이 존재하는 패키지이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id =(String)session.getAttribute("id");
if(id==null){
%>
<a href="loginForm.html">로그인</a>
<%
}else{
%>
<a href="logout">로그아웃</a>
<%
}
%>
</body>
</html>
<section id="loginFormArea">
<h1>로그인</h1>
<form action="login" method="post">
<fieldset>
<table>
<tr>
<td class="td_left">
<label for="id">아이디:</label>
</td>
<td class="td_ right">
<input type="text" name="id" id="id"/>
</td>
</tr>
<tr>
<td class="td_left">
<label for="passwd">비밀번호:</label>
</td>
<td class="td_ right">
<input type="password" name="passwd" id="passwd"/>
</td>
</tr>
</table>
<input type="submit" value="로그인" id="selectButton"/>
</fieldset>
</form>
</section
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String passwd= request.getParameter("passwd");
LoginService loginService = new LoginService();
Member loginMember = loginService.getLoginMember(id,passwd);
//로그인이 성공 되면 member 객체가 넘어오고 실패하면 null이 넘어옴
if(loginMember != null) {
HttpSession session = request.getSession();
session.setAttribute("id", id);
response.sendRedirect("index.jsp");
}else {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('로그인 실패')");
out.println("history.back()");
out.println("</script>");
}
}
}
public class LoginService{
public Member getLoginMember(String id,String passwd){
LoginDAO loginDAO =LoginDAO.getInstance();
Connection con = getConnection();
loginDAO.setConnection(con);
Member loginMember = loginDAO.selectLoginMember(id,passwd);
close(con);
return loginMember;
}
}
public class LoginDAO {
private static LoginDAO loginDAO;
private Connection con;
private LoginDAO() {
}
public static LoginDAO getInstance() {
if(loginDAO==null) {
loginDAO = new LoginDAO();
}
return loginDAO;
}
public void setConnection(Connection con) {
this.con=con;
}
public Member selectLoginMember(String id,String passwd) {
Member loginMember = null;
PreparedStatement pstmt=null;
ResultSet rs = null;
try {
pstmt=con.prepareStatement("SELECT * FROM users WHERE id=? AND passwd=?");
pstmt.setString(1, id);
pstmt.setString(2, passwd);
rs=pstmt.executeQuery();
if(rs.next()) {
loginMember= new Member();
loginMember.setAddr(rs.getString("addr"));
loginMember.setAge(rs.getInt("age"));
loginMember.setEmail(rs.getString("email"));
loginMember.setGender(rs.getString("gender"));
loginMember.setId(rs.getString("id"));
loginMember.setName(rs.getString("name"));
loginMember.setNation(rs.getString("nation"));
loginMember.setPasswd(rs.getString("passwd"));
}
}catch (Exception e) {
e.printStackTrace();
}
finally {
try {
close(rs);
close(pstmt);
}catch(Exception e){
e.printStackTrace();
}
}
return loginMember;
}
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class JdbcUtil {
public static Connection getConnection() {
Connection con = null;
try {
Context initCtx= new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds=(DataSource)envCtx.lookup("jdbc/mariaDB");
con=ds.getConnection();
con.setAutoCommit(false);
System.out.println("connect sucess");
}catch(Exception e) {
e.printStackTrace();
}
return con;
}
public static void close(Connection con) {
try {
con.close();
}catch(Exception e) {
e.printStackTrace();
}
}
public static void close(Statement stmt) {
try {
stmt.close();
}catch(Exception e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs) {
try {
rs.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void commit(Connection con) {
try{
con.commit();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void rollback(Connection con) {
try{
con.rollback();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
package vo;
public class Member {
private String name;
private String addr;
private int age;
private String nation;
private String id;
private String passwd;
private String gender;
private String email;
public String getName(String name) {
return name;
}
public void setName(String name) {
this.name= name;
}
public String getAddr(String addr) {
return addr;
}
public void setAddr(String addr) {
this.addr=addr;
}
public int getAge(int age) {
return age;
}
public void setAge(int age) {
this.age=age;
}
public String getNation(String nation) {
return nation;
}
public void setNation(String nation) {
this.nation=nation;
}
public String getId(String id) {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getPasswd(String passwd) {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd=passwd;
}
public String getGender(String gender) {
return passwd;
}
public void setGender(String gender) {
this.gender=gender;
}
public String getEmail(String email) {
return passwd;
}
public void setEmail(String email) {
this.email=email;
}
}
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LogoutServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session= request.getSession();
session.invalidate();
response.sendRedirect("index.jsp");
}
}