5월 ~ 7월) 웹/mvc
66 ~ 67Day - 기사 링크 / 책검색 / [mvc] 로그인페이지 만들기 ( 모델1 )
첼로그
2023. 7. 7. 20:28
모델1
프로그램 먼저 설치 해주기.
commons-code & commons-logging & commons-httpclinent 다운로드 및 lib에 넣기
홈페이지 https://downloads.apache.org/ Index of / downloads.apache.org commons-code https://downloads.apache.org/commons/codec/binaries/ commons-httpclinent https://downloads.apache.org/httpcomponents/commons-httpclient/binary/ commons-logging https://
chellog.tistory.com
src > main > webapp > rss)
rss_reader .jsp - (실행문)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- RSS 서비스를 제공하는 웹프로그램을 AJAX 기능으로 요청하여 실행결과를 응답받아
클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- RSS(Really Simple Syndication 또는 Rich Site Summary) : 블로그, 뉴스, 기업정보 등과 같이
자주 업데이트 되는 사이트의 컨텐츠를 보다 쉽게 사용자에게 제공하기 위한 만들어진 서비스 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
</head>
<body>
<h1>RSS Reader</h1>
<hr>
<div id="display"></div>
<script type="text/javascript">
$.ajax({
type: "get",
//문제점)현재 실행중인 웹프로그램과 동일한 서버의 웹프로그램은 AJAX 기능으로 요청하여
//실행결과를 응답받아 처리 가능하지만 다른 서버의 웹프로그램을 AJAX 기능으로 요청할
//경우 에러(에러코드 : 0) 발생
//url: "https://www.khan.co.kr/rss/rssdata/kh_sports.xml",
//해결법)다른 서버의 웹프로그램을 프록시 기능으로 요청하여 응답하는 프로그램을 작성하여
//AJAX 기능으로 프록시 프로그램 요청하여 실행결과를 응답받아 처리 가능
url: "rss_proxy.jsp",
dataType: "xml",
success: function(xmlDoc) {
var channelTitle=$(xmlDoc).find("channel").children("title").text();
var html="<h2>"+channelTitle+"</h2>";
html+="<ul>";
$(xmlDoc).find("item").each(function() {
var title=$(this).find("title").text();
var link=$(this).find("link").text();
var date;
if($(this).find("pubDate").length!=0) {
date=$(this).find("pubDate").text();
} else {
date=$(this).find("dc\\:date").text();
}
html+="<li><a href='"+link+"' target='_blank'>"+title+"["+date+"]</a></li>";
});
html+="</ul>";
$("#display").html(html);
},
error: function(xhr) {
alert("에러코드 = "+xhr.status);
}
});
</script>
</body>
</html>
rss_proxy .jsp
<%@page import="org.apache.commons.httpclient.methods.GetMethod"%>
<%@page import="org.apache.commons.httpclient.HttpClient"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 가상의 클라이언트(브라우저)를 이용하여 다른 서버의 웹프로그램을 요청하고 실행결과를
제공받아 클라이언트에게 그대로 전달하여 응답하는 JSP 문서 --%>
<%-- => HttpClient 객체를 사용하여 프록시(Proxy) 기능을 제공하는 웹프로그램 작성 --%>
<%-- => https://apache.org 사이트에서 필요한 라이브러리 파일을 다운로드 받아 프로젝트 빌드 처리 --%>
<%-- => commons-httpclient-3.1.jar, commons-codec-1.16.jar, commons-logging-1.2.jar --%>
<%
//요청 웹프로그램의 URL 주소 저장
String url="https://www.khan.co.kr/rss/rssdata/kh_sports.xml";
//HttpClient 객체 생성 - 가상의 브라우저 기능을 제공하기 위한 객체
HttpClient client=new HttpClient();
//GetMethod 객체 생성 - 가상의 브라우저를 사용하여 GET 방식으로 웹프로그램을 요청하기 위한 객체
// => PostMethod 객체 : 가상의 브라우저를 사용하여 POST 방식으로 웹프로그램을 요청하기 위한 객체
GetMethod method=new GetMethod(url);
try {
//HttpClient.executeMethod(Method method) : 가상의 브라우저를 사용하여 웹프로그램을 요청하는 메소드
// => 가상의 브라우저로 요청한 웹프로그램 실행에 대한 상태코드(StatusCode - int) 반환
int statusCode=client.executeMethod(method);
//클라이언트에게 응답하기 위한 프록시 프로그램의 response 객체 초기화
response.reset();
//프록시 프로그램의 출력스트림(out 객체) 초기화
out.clearBuffer();
//프록시 프로그램을 요청한 클라이언트에게 상태코드 전달
response.setStatus(statusCode);
if(statusCode==HttpServletResponse.SC_OK) {//정상적인 실행결과를 응답받은 경우 - 상태코드 : 200
//Method.getResponseBodyAsString() : 요청에 대한 실행결과가 저장된 리스폰즈 메세지
//몸체부의 결과값을 문자열로 반환하는 메소드
// => 결과값을 반환받아 원하는 문자형태(캐릭터셋)으로 변경하여 저장
String result=new String(method.getResponseBodyAsString().getBytes("8859_1"),"utf-8");
//프록시 프로그램을 요청한 클라이언트에게 실행결과에 대한 문서형태(MimeType)를 전달
response.setContentType("text/xml; charset=utf-8");
//프록시 프로그램을 요청한 클라이언트에게 실행결과를 전달
out.println(result);
}
} finally {
//가상의 브라우저를 사용하여 접속된 웹서버의 연결 해제
//Method.releaseConnection() : 웹서버 접속을 해제하는 메소드
if(method!=null) method.releaseConnection();
}
%>
src > main > webapp > rss)
books_xml.jsp - (실행문)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- [http://www.itwill.xyz/books_two.jsp] 문서를 AJAX 기능으로 요청하여 실행결과를
XML 데이타로 응답받아 태그를 변경하여 클라이언트에게 전달하는 JSP 문서 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
</head>
<body>
<h1>jQuery AJAX</h1>
<hr>
<div id="bookList"></div>
<script type="text/javascript">
$.ajax({
type: "get",
url: "http://www.itwill.xyz/books.jsp",
dataType: "xml",
success: function(xmlDoc) {
var count=$(xmlDoc).find("book").length;
if(count==0) {
$("#bookList").html("<p>검색된 교재가 하나도 없습니다.");
return;
}
var html="<p>검색된 교재가 "+count+"권 있습니다.</p>";
html+="<ol>";
$(xmlDoc).find("book").each(function() {
var title=$(this).find("title").text();
var author=$(this).find("author").text();
html+="<li><b>"+title+"</b>["+author+"]</li>";
});
html+="</ol>";
$("#bookList").html(html);
},
error: function(xhr) {
alert("에러코드 = "+xhr.status);
}
});
</script>
</body>
</html>
books .jsp
<?xml version="1.0" encoding="utf-8"?>
<%@ page language="java" contentType="text/xml; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 책정보를 XML 형식의 데이타로 제공하는 JSP 문서 --%>
<%
//리스폰즈 메세지 헤더에 [Access-Control-Allow-origin] 속성을 HttpXMLRequest 객체로
//접속 가능한 서버로 속성값으로 변경하면 AJAX 기능으로 요청 가능한 웹프로그램으로 사용
response.setHeader("Access-Control-Allow-origin", "http://localhost:8000");
%>
<books>
<book>
<title>Java의 정석</title>
<author>남궁성</author>
</book>
<book>
<title>JSP 웹프로그래밍</title>
<author>오정임</author>
</book>
<book>
<title>스프링 입문</title>
<author>유이치</author>
</book>
</books>
[ mvc ]
++ jdbcDAO .java
++ ojdbc11
++ context .xml
sql 테이블만들기
create table userinfo(userid varchar2(100) primary key, password varchar2(100)
, name varchar2(200), email varchar2(300), status number(1));
commit;
src >main>java > xyz.itwill.dto)
UserinfoDTO.java (sql 테이블만들기)
package xyz.itwill.dto;
//create table userinfo(userid varchar2(100) primary key, password varchar2(100)
// , name varchar2(200), email varchar2(300), status number(1));
// commit;
public class UserinfoDTO {
private String userid;
private String password;
private String name;
private String email;
private int status;
public UserinfoDTO() {
// TODO Auto-generated constructor stub
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
src >main>java > xyz.itwill.dao)
JdbcDAO.java
package xyz.itwill.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
//JDBC 기능을 제공하는 DAO 클래스가 상속받아 사용하기 위해 작성된 부모클래스 - 추상클래스
// => WAS 프로그램에 의해 관리되는 DataSource 객체를 제공받아 필드에 저장 - 정적영역에 작성하여 한번만 실행
// => DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
// => 매개변수로 전달받은 JDBC 관련 객체를 제거하는 메소드
public abstract class JdbcDAO {//상속만을 목적으로 작성된 클래스
private static DataSource dataSource;
static {
try {
dataSource=(DataSource)new InitialContext().lookup("java:comp/env/jdbc/oracle");
} catch (NamingException e) {
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public void close(Connection con) {
try {
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close(Connection con, PreparedStatement pstmt) {
try {
if(pstmt!=null) pstmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
try {
if(rs!=null) rs.close();
if(pstmt!=null) pstmt.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
UserinfoModelOneDAO.java
package xyz.itwill.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import xyz.itwill.dto.UserinfoDTO;
public class UserinfoModelOneDAO extends JdbcDAO {
private static UserinfoModelOneDAO _dao;
private UserinfoModelOneDAO() {
// TODO Auto-generated constructor stub
}
static {
_dao=new UserinfoModelOneDAO();
}
public static UserinfoModelOneDAO getDAO() {
return _dao;
}
//회원정보를 전달받아 USERINFO 테이블의 회원정보로 삽입하고 삽입행의 갯수를 반환하는 메소드
public int insertUserinfo(UserinfoDTO userinfo) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="insert into userinfo values(?,?,?,?,?)";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, userinfo.getUserid());
pstmt.setString(2, userinfo.getPassword());
pstmt.setString(3, userinfo.getName());
pstmt.setString(4, userinfo.getEmail());
pstmt.setInt(5, userinfo.getStatus());
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]insertUserinfo() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
//회원정보를 전달받아 USERINFO 테이블에 저장된 회원정보를 변경하고 변경행의 갯수를 반환하는 메소드
public int updateUserinfo(UserinfoDTO userinfo) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="update userinfo set password=?, name=?, email=?, status=? where userid=?";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, userinfo.getPassword());
pstmt.setString(2, userinfo.getName());
pstmt.setString(3, userinfo.getEmail());
pstmt.setInt(4, userinfo.getStatus());
pstmt.setString(5, userinfo.getUserid());
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]updateUserinfo() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
//아이디를 전달받아 USERINFO 테이블에 저장된 회원정보를 삭제하고 삭제행의 갯수를 반환하는 메소드
public int deleteUserinfo(String userid) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="delete from userinfo where userid=?";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, userid);
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]deleteUserinfo() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
//아이디를 전달받아 USERINFO 테이블에 저장된 회원정보를 검색하여 DTO 객체로 반환하는 메소드
public UserinfoDTO selectUserinfo(String userid) {
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
UserinfoDTO userinfo=null;
try {
con=getConnection();
String sql="select * from userinfo where userid=?";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, userid);
rs=pstmt.executeQuery();
if(rs.next()) {
userinfo=new UserinfoDTO();
userinfo.setUserid(rs.getString("userid"));
userinfo.setPassword(rs.getString("password"));
userinfo.setName(rs.getString("name"));
userinfo.setEmail(rs.getString("email"));
userinfo.setStatus(rs.getInt("status"));
}
} catch (SQLException e) {
System.out.println("[에러]selectUserinfo() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt, rs);
}
return userinfo;
}
//USERINFO 테이블에 저장된 모든 회원정보를 검색하여 List 객체로 반환하는 메소드
public List<UserinfoDTO> selectUserinfoList() {
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
List<UserinfoDTO> userinfoList=new ArrayList<>();
try {
con=getConnection();
String sql="select * from userinfo order by userid";
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
UserinfoDTO userinfo=new UserinfoDTO();
userinfo.setUserid(rs.getString("userid"));
userinfo.setPassword(rs.getString("password"));
userinfo.setName(rs.getString("name"));
userinfo.setEmail(rs.getString("email"));
userinfo.setStatus(rs.getInt("status"));
userinfoList.add(userinfo);
}
} catch (SQLException e) {
System.out.println("[에러]selectUserinfoList() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt, rs);
}
return userinfoList;
}
}
src >main > webapp >model_one > css)
user .css
A:link { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:none;}
A:visited { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:none;}
A:active { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:none;}
A:hover { color: #BEA12C; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:underline;}
A.user:link { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:underline;}
A.user:visited { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:underline;}
A.user:active { color: #333333; font-family: "µ¸¿ò", "±¼¸²"; font-size: 12px; text-decoration:underline;}
td {font-family:µ¸¿ò; font-size:12px; color:#333333; line-height:18px;}
.title {font-family:µ¸¿ò; font-size:12pt; color:#000000; line-height:22px;}
/* Form css */
.text { font-family:µ¸¿ò; font-size:8pt; color:#333333;}
.textarea { font-family:µ¸¿ò; font-size:8pt; color:#333333;}
.password { font-family:µ¸¿ò; font-size:8pt; color:#333333;}
.file { font-family:µ¸¿ò; font-size:8pt; color:#333333;}
.select { font-family:µ¸¿ò; font-size:8pt; color:#333333;}
main >webapp > model_one)
user_error .jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 에러메세지를 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- => [메인으로] 태그를 클릭한 경우 [user_login.jsp] 문서 요청 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
<style type="text/css">
body {
text-align: center;
}
.message {
color: red;
font-size: 1.5em;
}
</style>
</head>
<body>
<h1>에러페이지</h1>
<hr>
<p class="message">프로그램 실행에 예기치 못한 오류가 발생하였거나 비정상적인 방법으로
프로그램을 요청하여 오류가 발생 하였습니다.</p>
<button type="button" onclick="location.href='user_login.jsp';">메인으로</button>
</body>
</html>
user_list .html → user_list .jsp(바꿔줌)
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- USERINFO 테이블에 저장된 모든 회원정보를 검색하여 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- => 로그인 사용자만 요청 가능한 JSP 문서 --%>
<%-- => 회원정보에서 [회원이름] 태그를 클릭한 경우 [user_view.jsp] 문서 요청 - 아이디 전달 --%>
<%-- => [회원등록] 태그를 클릭한 경우 [user_write.jsp] 문서 요청 - 관리자에게만 링크 제공 --%>
<%-- => [로그아웃] 태그를 클릭한 경우 [user_logout_action.jsp] 문서 요청 --%>
<%
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 상태의 사용자인 경우 - 비정상적인 요청
if(loginUserinfo==null) {
response.sendRedirect("user_error.jsp");
return;
}
List<UserinfoDTO> userinfoList=UserinfoModelOneDAO.getDAO().selectUserinfoList();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>MVC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/user.css" type="text/css">
</head>
<body bgcolor=#FFFFFF text=#000000 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
<br>
<table width=780 border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="20"></td>
<td>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="f4f4f4" height="22"> <b>회원관리 - 회원목록</b></td>
</tr>
</table>
<br>
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td width=190 align=center bgcolor="E6ECDE" height="22">아이디</td>
<td width=200 align=center bgcolor="E6ECDE">이름</td>
<td width=200 align=center bgcolor="E6ECDE">이메일</td>
</tr>
<% for(UserinfoDTO userinfo : userinfoList) { %>
<tr>
<td width=190 align=center bgcolor="ffffff" height="20">
<%=userinfo.getUserid() %>
</td>
<td width=200 align=center bgcolor="ffffff">
<a href="user_view.jsp?userid=<%=userinfo.getUserid() %>" class="user">
<%=userinfo.getName() %>
</a>
</td>
<td width=200 align=center bgcolor="ffffff">
<%=userinfo.getEmail() %>
</td>
</tr>
<% } %>
</table>
<br>
<table border="0" cellpadding="0" cellspacing="1" width="590">
<tr>
<td align="right">
<% if(loginUserinfo.getStatus()==9) { %>
<input type="button" value="회원등록" onclick="location.href='user_write.jsp';"/>
<% } %>
<input type="button" value="로그아웃" onclick="location.href='user_logout_action.jsp';"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
user_login .html → user_login .jsp (바꿔줌)
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 비로그인 상태의 사용자인 경우 - 사용자로부터 로그인정보를 입력받기 위한 JSP 문서 --%>
<%-- => [로그인] 태그를 클릭한 경우 [user_login_action.jsp] 문서 요청 - 입력값 전달 --%>
<%-- 로그인 상태의 사용자인 경우 - 환영메세지를 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%-- => [회원목록] 태그를 클릭한 경우 [user_list.jsp] 문서 요청 --%>
<%-- => [로그아웃] 태그를 클릭한 경우 [user_logout_action.jsp] 문서 요청 --%>
<%-- => [회원등록] 태그를 클릭한 경우 [user_write.jsp] 문서 요청 - 관리자에게만 링크 제공 --%>
<%
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
session.removeAttribute("message");
}
String userid=(String)session.getAttribute("userid");
if(userid==null) {
userid="";
} else {
session.removeAttribute("userid");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>MVC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/user.css" type="text/css">
<script language="JavaScript">
function userLogin() {
if ( f.userid.value == "" ) {
alert("아이디를 입력하십시요.");
f.userid.focus();
return;
}
if ( f.password.value == "" ) {
alert("비밀번호를 입력하십시요.");
f.password.focus();
return;
}
f.action = "user_login_action.jsp";
f.submit();
}
</script>
</head>
<body bgcolor=#FFFFFF text=#000000 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
<br>
<table width=780 border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="20"></td>
<td style="color: red;"><%=message%></td>
</tr>
<tr>
<td width="20"></td>
<td>
<!--contents-->
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="f4f4f4" height="22"> <b>회원관리 - 로그인</b></td>
</tr>
</table>
<br>
<% if(loginUserinfo==null) {//비로그인 상태의 사용자인 경우 %>
<!-- login Form -->
<form name="f" method="post">
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">사용자 아이디</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="text" style="width:150" name="userid" value="<%=userid%>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">비밀번호</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="password" style="width:150" name="password">
</td>
</tr>
</table>
</form>
<br>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=center>
<input type="button" value="로그인" onClick="userLogin();">
</td>
</tr>
</table>
<% } else {//로그인 상태의 사용자인 경우 %>
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td align=center bgcolor="E6ECDE" height="22">
<%=loginUserinfo.getName() %>님, 환영합니다.
</td>
</tr>
</table>
<br>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=center>
<button type="button" onclick="location.href='user_list.jsp';">회원목록</button>
<button type="button" onclick="location.href='user_logout_action.jsp';">로그아웃</button>
<% if(loginUserinfo.getStatus()==9) { %>
<button type="button" onclick="location.href='user_write.jsp';">회원등록</button>
<% } %>
</td>
</tr>
</table>
<% } %>
</td>
</tr>
</table>
</body>
</html>
user_login_action .jsp
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 로그인정보를 전달받아 USERINFO 테이블에 저장된 회원정보와 비교하여 인증 처리 후
[user_login.jsp] 문서를 요청하는 URL 주소를 클라이언트에게 전달하여 응답하는 JSP 문서 --%> --%>
<%
if(request.getMethod().equals("GET")) {
response.sendRedirect("user_error.jsp");
return;
}
String userid=request.getParameter("userid");
String password=request.getParameter("password");
UserinfoDTO userinfo=UserinfoModelOneDAO.getDAO().selectUserinfo(userid);
if(userinfo==null || !userinfo.getPassword().equals(password)) {//인증 실패
session.setAttribute("message", "입력된 아이디가 잘못 되었거나 비밀번호가 맞지 않습니다.");
session.setAttribute("userid", userid);
response.sendRedirect("user_login.jsp");
return;
}
//인증 성공 - 세션에 권한 관련 객체를 속성값으로 저장
session.setAttribute("loginUserinfo", userinfo);
response.sendRedirect("user_login.jsp");
%>
user_logout_action .jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 로그아웃 처리 후 [user_login.jsp] 문서를 요청하는 URL 주소를 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
//session.removeAttribute("loginUserinfo");
session.invalidate();
response.sendRedirect("user_login.jsp");
%>
user_modify .html → user_modify .jsp (바꿔줌) (관리자만 요청가능한 jsp 문서
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 아이디를 전달받아 USERINFO 테이블에 저장된 회원정보를 검색하여 입력태그의 초기값으로
설정한 후 사용자로부터 변경값을 입력받기 위한 JSP 문서 - 관리자만 요청 가능한 JSP 문서 --%>
<%-- => [수정] 태그를 클릭한 경우 [user_modify_action.jsp] 문서 요청 - 입력값(회원정보) 전달 --%>
<%-- => [목록] 태그를 클릭한 경우 [user_list.jsp] 문서 요청 --%>
<%
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 상태의 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
response.sendRedirect("user_error.jsp");
return;
}
if(request.getParameter("userid")==null) {//전달값이 없는 경우 - 비정상적인 요청
response.sendRedirect("user_error.jsp");
return;
}
String userid=request.getParameter("userid");
UserinfoDTO userinfo=UserinfoModelOneDAO.getDAO().selectUserinfo(userid);
if(userinfo==null) {//검색된 회원정보가 없는 경우 - 비정상적인 요청
response.sendRedirect("user_error.jsp");
return;
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>MVC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/user.css" type="text/css">
<script language="JavaScript">
function userModify() {
if ( f.name.value == "" ) {
alert("이름을 입력하십시요.");
f.name.focus();
return false;
}
f.action = "user_modify_action.jsp";
f.submit();
}
</script>
</head>
<body bgcolor=#FFFFFF text=#000000 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
<br>
<table width=780 border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="20"></td>
<td>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="f4f4f4" height="22"> <b>회원관리 - 회원정보수정</b></td>
</tr>
</table>
<br>
<form name="f" method="post">
<input type="hidden" name="userid" value="<%=userinfo.getUserid()%>">
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">아이디</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<%=userinfo.getUserid() %>
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">비밀번호</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="password" style="width:150" name="password">
<span style="color: red;">** 비밀번호를 변경하지 않을 경우 입력하지 마세요.</span>
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이름</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="text" style="width:240" name="name" value="<%=userinfo.getName() %>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이메일 주소</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<% if(userinfo.getEmail()!=null) { %>
<input type="text" style="width:240" name="email" value="<%=userinfo.getEmail() %>">
<% } else { %>
<input type="text" style="width:240" name="email">
<% } %>
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">회원등급</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<select name="status">
<option value="1" <% if(userinfo.getStatus()==1) { %>selected<% } %>>일반회원</option>
<option value="9" <% if(userinfo.getStatus()==9) { %>selected<% } %>>관리자</option>
</select>
</td>
</tr>
</table>
</form>
<br>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=center>
<input type="button" value="수정" onClick="userModify();">
<input type="button" value="목록" onClick="location.href='user_list.jsp';">
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
user_view .html → user_view .jsp (바꿔줌) 72번줄 )이메일이 null이 아닐때만 가져다가 출력하세요
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>MVC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/user.css" type="text/css">
<script language="JavaScript">
function userRemove(userid) {
if (confirm("정말로 삭제 하시겠습니까?") ) {
location.href='user_remove_action.jsp?userid='+userid;
}
}
</script>
</head>
<body bgcolor=#FFFFFF text=#000000 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
<br>
<table width=780 border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="20"></td>
<td>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="f4f4f4" height="22"> <b>회원관리 - 회원정보</b></td>
</tr>
</table>
<br>
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">아이디</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
abc
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이름</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
홍길동
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이메일</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
abc@daum.net
</td>
</tr>
</table>
<br>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=center>
<input type="button" value="수정" onClick="location.href='user_modify.jsp?userid=abc';">
<input type="button" value="삭제" onClick="userRemove('abc');">
<input type="button" value="목록" onClick="location.href='user_list.jsp';">
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
user_write .html → user_write .jsp (바꿔줌)
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 - 관리자만 요청 가능한 JSP 문서 --%>
<%-- => [회원등록] 태그를 클릭한 경우 [user_write_action.jsp] 문서 요청 - 입력값(회원정보) 전달 --%>
<%-- => [로그인] 태그를 클릭한 경우 [user_login.jsp] 문서 요청 --%>
<%
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 상태의 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
response.sendRedirect("user_error.jsp");
return;
}
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
session.removeAttribute("message");
}
UserinfoDTO userinfo=(UserinfoDTO)session.getAttribute("userinfo");
if(userinfo==null) {
userinfo=new UserinfoDTO();
userinfo.setUserid("");
userinfo.setPassword("");
userinfo.setName("");
userinfo.setEmail("");
userinfo.setStatus(1);
} else {
session.removeAttribute("userinfo");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>MVC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel=stylesheet href="css/user.css" type="text/css">
<script language="JavaScript">
function userCreate() {
if ( f.userid.value == "" ) {
alert("아이디를 입력하십시요.");
f.userid.focus();
return;
}
if ( f.password.value == "" ) {
alert("비밀번호를 입력하십시요.");
f.password.focus();
return;
}
if ( f.name.value == "" ) {
alert("이름을 입력하십시요.");
f.name.focus();
return;
}
f.action = "user_write_action.jsp";
f.submit();
}
</script>
</head>
<body bgcolor=#FFFFFF text=#000000 leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>
<br>
<table width=780 border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="20"></td>
<td style="color: red;"><%=message%></td>
</tr>
<tr>
<td width="20"></td>
<td>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td bgcolor="f4f4f4" height="22"> <b>회원관리 - 회원등록</b></td>
</tr>
</table>
<br>
<form name="f" method="post">
<table border="0" cellpadding="0" cellspacing="1" width="590" bgcolor="BBBBBB">
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">아이디</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="text" style="width:150" name="userid" value="<%=userinfo.getUserid()%>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">비밀번호</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="password" style="width:150" name="password" value="<%=userinfo.getPassword()%>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이름</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="text" style="width:240" name="name" value="<%=userinfo.getName()%>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">이메일</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<input type="text" style="width:240" name="email" value="<%=userinfo.getEmail()%>">
</td>
</tr>
<tr>
<td width=100 align=center bgcolor="E6ECDE" height="22">회원등급</td>
<td width=490 bgcolor="ffffff" style="padding-left:10px;">
<select name="status">
<option value="1" <% if(userinfo.getStatus()==1) { %>selected<% } %>>일반회원</option>
<option value="9" <% if(userinfo.getStatus()==9) { %>selected<% } %>>관리자</option>
</select>
</td>
</tr>
</table>
</form>
<br>
<table width=590 border=0 cellpadding=0 cellspacing=0>
<tr>
<td align=center>
<input type="button" value="회원등록" onClick="userCreate();">
<input type="button" value="로그인" onClick="location.href='user_login.jsp';">
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
user_write_action .html → user_write_action .jsp (바꿔줌)
- 회원정보 삽입 및 로그인을 요청하는 url 주소를 전달하여 응답하는문서
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 회원정보를 전달받아 USERINFO 테이블의 회원정보로 삽입하고 [user_login.jsp] 문서를
요청하는 URL 주소를 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
if(request.getMethod().equals("GET")) {
response.sendRedirect("user_error.jsp");
return;
}
request.setCharacterEncoding("utf-8");
String userid=request.getParameter("userid");
String password=request.getParameter("password");
String name=request.getParameter("name");
String email=request.getParameter("email");
int status=Integer.parseInt(request.getParameter("status"));
UserinfoDTO userinfo=new UserinfoDTO();
userinfo.setUserid(userid);
userinfo.setPassword(password);
userinfo.setName(name);
userinfo.setEmail(email);
userinfo.setStatus(status);
int rows=UserinfoModelOneDAO.getDAO().insertUserinfo(userinfo);
if(rows>0) {//회원등록이 성공한 경우
response.sendRedirect("user_login.jsp");
} else {//회원등록이 실패한 경우 - 전달받아 아이디에 대한 PK 제약조건 위반으로 인해 발생
session.setAttribute("message", "이미 사용중인 아이디를 입력 하였습니다.");
session.setAttribute("userinfo", userinfo);
response.sendRedirect("user_write.jsp");
}
%>
7월 10일 (67Day)
user_modify_action .jsp
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 회원정보를 전달받아 USERINFO 테이블에 저장된 회원정보를 변경하고 [user_view.jsp] 문서를
요청하는 URL 주소를 클라이언트에게 전달하여 응답하는 JSP 문서 - 아이디 전달 --%>
<%
if(request.getMethod().equals("GET")) {
response.sendRedirect("user_error.jsp");
return;
}
request.setCharacterEncoding("utf-8");
String userid=request.getParameter("userid");
String password=request.getParameter("password");
String name=request.getParameter("name");
String email=request.getParameter("email");
int status=Integer.parseInt(request.getParameter("status"));
UserinfoDTO userinfo=new UserinfoDTO();
userinfo.setUserid(userid);
//비밀번호 전달값이 없는 경우 - 기존 회원정보의 비밀번호로 필드값 변경
if(password==null || password.equals("")) {
userinfo.setPassword(UserinfoModelOneDAO.getDAO().selectUserinfo(userid).getPassword());
} else {//비밀번호 전달값이 없는 경우 - 전달값(비밀번호)으로 필드값 변경
userinfo.setPassword(password);
}
userinfo.setName(name);
userinfo.setEmail(email);
userinfo.setStatus(status);
UserinfoModelOneDAO.getDAO().updateUserinfo(userinfo);
response.sendRedirect("user_view.jsp?userid="+userid);
%>
user_remove_action .jsp
<%@page import="xyz.itwill.dao.UserinfoModelOneDAO"%>
<%@page import="xyz.itwill.dto.UserinfoDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 아이디를 전달받아 USERINFO 테이블에 저장된 회원정보를 삭제하고 [user_list.jsp] 문서를
요청하는 URL 주소를 클라이언트에게 전달하여 응답하는 JSP 문서 - 관리자만 요청 가능한 JSP 문서 --%>
<%-- => 현재 로그인 관리자가 자신의 회원정보를 삭제한 경우 [user_logout_action.jsp] 문서를
요청하는 URL 주소를 클라이언트에게 전달하여 응답 --%>
<%
UserinfoDTO loginUserinfo=(UserinfoDTO)session.getAttribute("loginUserinfo");
//비로그인 상태의 사용자이거나 로그인 사용자가 관리자가 아닌 경우 - 비정상적인 요청
if(loginUserinfo==null || loginUserinfo.getStatus()!=9) {
response.sendRedirect("user_error.jsp");
return;
}
if(request.getParameter("userid")==null) {//전달값이 없는 경우 - 비정상적인 요청
response.sendRedirect("user_error.jsp");
return;
}
String userid=request.getParameter("userid");
UserinfoModelOneDAO.getDAO().deleteUserinfo(userid);
//로그인 상태의 사용자 아이디와 삭제 처리된 사용자 아이디가 같은 경우
if(loginUserinfo.getUserid().equals(userid)) {//관리자가 자신의 계정을 삭제한 경우
response.sendRedirect("user_logout_action.jsp");
} else {
response.sendRedirect("user_list.jsp");
}
%>
7월 7일
아직 구현 안해놔서 에러뜸.
++