일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 시계열 모델링
- custom vision
- Q-Q 플롯
- 선형 판별 분석 LDA
- 군집화 시각화 방법
- ARMA 모델링
- 상자 그림
- 계절성 모델
- 주성분 줄이기
- 데이터 수집 및 전처리
- 날짜 시간 데이터 전처리
- 명목형 데이터
- Z-점수 기반 이상치 탐지
- 데이터 종류에 따른 분석 방법
- Python
- 데이터의 차원 축소
- 상관 분석
- ARIMA 모델링
- 범주형 데이터
- 다변량 분석
- 순서형 데이터
- 주성분 분석
- 상위포지션
- 데이터 분석 프로세스
- 시계열 특성을 고려한 이상치 탐지
- 시계열 상관 분석
- 다중상관분석
- 지수평활법
- 최소-최대 정규화
- R과 Python
- Today
- Total
me made it !
[JSP] 20230313 JSP 모델 1 방식으로 게시판 만들기 본문
mvc 패턴 /
package example1230;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class MemberDao{
//멤버변수 전역
private Connection conn;
public MemberDao(){ //MemberDao 생성할 때 Dbconn 객체도 생성시킴 => conn객체 생성
Dbconn dbconn = new Dbconn();
this.conn = dbconn.getConnection();
}
public int memberInsert(String memberId, String memberPwd, String memberName , String memberPhone , String memberEmail , String memberGender , String memberAddr , String memberBirth){
int value = 0;
PreparedStatement pstmt= null;
String sql ="INSERT INTO member1230(midx,memberId,memberPwd,memberName,memberPhone,memberEmail,memberGender,memberAddr,memberBirth,ip)"+
"VALUES(midx_seq.nextval,?,?,?,?,?,?,?,?,null)";
// 구문 쿼리클래스
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,memberId);
pstmt.setString(2,memberPwd);
pstmt.setString(3,memberName);
pstmt.setString(4,memberPhone);
pstmt.setString(5,memberEmail);
pstmt.setString(6,memberGender);
pstmt.setString(7,memberAddr);
pstmt.setString(8,memberBirth);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return value;
}
@SuppressWarnings("finally")
public ArrayList<MemberVo> memberSelectAll() {
ArrayList<MemberVo> alist = new ArrayList<MemberVo>();
String sql = "select midx, memberid, membername, delyn, writeday from member1230 order by midx desc";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) { //커서의 다음 값이 존재하면 참
MemberVo mv = new MemberVo(); //MemberVo 객체 생성해서
mv.setMidx(rs.getInt("midx")); //rs 값들을 옮겨담는다
mv.setMemberid(rs.getString("memberid"));
mv.setMembername(rs.getString("membername"));
mv.setDelyn(rs.getString("delyn"));
mv.setWriteday(rs.getString("writeday"));
alist.add(mv); //alist 클래스 안에 MemberVo 객체를 하나씩 추가한다
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return alist;
}
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import = "example1230.MemberDao" %>
<%
request.setCharacterEncoding("UTF-8");
String memberId = request.getParameter("memberId");
String memberPwd = request.getParameter("memberPwd");
String memberName = request.getParameter("memberName");
String memberPhone = request.getParameter("memberPhone");
String memberEmail = request.getParameter("memberEmail");
String memberGender = request.getParameter("memberGender");
String memberAddr = request.getParameter("memberAddr");
String memberBirth = request.getParameter("memberBirth");
MemberDao md= new MemberDao();
md.memberInsert(memberId,memberPwd,memberName,memberPhone,memberEmail,memberGender,memberAddr,memberBirth);
String path = request.getContextPath()+"./memberList.jsp";
response.sendRedirect(path);
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "example1230.*" %>
<%@page import = "java.util.*" %>
<%
MemberDao md = new MemberDao();
ArrayList <MemberVo> alist = md.memberSelectAll();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
회원목록
<table border=1>
<tr>
<td>회원번호</td>
<td>회원아이디</td>
<td>회원이름</td>
<td>탈퇴여부</td>
<td>가입일</td>
</tr>
<% for (MemberVo mv : alist) {%>
<tr>
<td><%=mv.getMidx() %></td>
<td><%=mv.getMemberid() %></td>
<td><%=mv.getMembername() %></td>
<td><%=mv.getDelyn() %></td>
<td><%=mv.getWriteday() %></td>
</tr>
<%} %>
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//자동실행영역
});
function check(){
//alert("각 값이 있는지 체크하는 구문을 만들어보세요");
if ($("#memberId").val() == ""){
alert("아이디를 입력하세요");
$("#memberId").focus();
return;
}else if ($("#memberPwd").val() == ""){
alert("비밀번호를 입력하세요");
$("#memberPwd").focus();
return;
}else if ($("#memberPwd2").val() == ""){
alert("비밀번호 확인을 입력하세요");
$("#memberPwd2").focus();
return;
}else if ($("#memberPwd").val() != $("#memberPwd2").val()){
alert("비밀번호가 일치하지 않습니다");
$("#memberPwd2").val("");
$("#memberPwd2").focus();
return;
}else if ($("#memberName").val() == ""){
alert("이름을 입력하세요");
$("#memberName").focus();
return;
}else if ($("#memberPhone").val() == ""){
alert("전화번호를 입력하세요");
$("#memberPhone").focus();
return;
}else if ($("#memberEmail").val() == ""){
alert("이메일을 입력하세요");
$("#memberEmail").focus();
return;
}else if ($("#memberBirth").val() == ""){
alert("생년월일을 입력하세요");
$("#memberBirth").focus();
return;
}else if ($.isNumeric($("#memberBirth").val()) ==false){
alert("숫자만입력하세요");
$("#memberBirth").val("");
$("#memberBirth").focus();
return;
}
// else if ($("#memberIdCheck").val() != "Y"){
// alert("아이디 중복체크를 하세요");
// $("#memberId").focus();
// return;
// }
var fm = document.frm;
//이 경로로 데이터를 감추어서 전송한다
fm.action ="memberJoinAction.jsp";
fm.method = "post";
fm.submit();
return;
}
function idCheck(){
// alert("아이디 체크창입니다.");
let memberId = $("#memberId").val();
$.ajax({
url: "json3.jsp",
method: "POST",
data: {"memberId": memberId },
dataType: "json",
success : function(data){
if (data.idYn =="Y"){
alert("사용가능한 아이디입니다.");
$("#memberIdCheck").val("Y");
}else{
alert("사용불가한 아이디 입니다");
}
},
error : function(request,status,error){
alert("다시 시도하시기 바랍니다.");
}
});
return;
}
</script>
</head>
<body>
회원가입 페이지
<form name="frm" id="frm">
<table style="border:1px solid #CCC;width:500px">
<tr>
<td>아이디</td>
<td>
<input type="text" name="memberId" id="memberId">
<input type="button" id="memberIdCheck" value="아이디 중복체크" onclick="idCheck();">
</td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="memberPwd" id="memberPwd"></td>
</tr>
<tr>
<td>비밀번호 확인</td>
<td><input type="password" name="memberPwd2" id="memberPwd2"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="memberName" id="memberName"></td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="memberPhone" id="memberPhone"></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="text" name="memberEmail" id="memberEmail"></td>
</tr>
<tr>
<td>성별</td>
<td>
<input type="radio" name="memberGender" id="memberMale" value="남성" checked>남성
<input type="radio" name="memberGender" id="memberFeMale" value="여성">여성
</td>
</tr>
<tr>
<td>주소</td>
<td>
<select name="memberAddr" id="memberAddr">
<option value="서울">서울</option>
<option value="대전">대전</option>
<option value="전주" selected>전주</option>
</select>
</td>
</tr>
<tr>
<td>생년월일</td>
<td>
<input type="text" name="memberBirth" id="memberBirth">
(ex 19990101)
</td>
</tr>
<tr>
<td></td>
<td><input type="button" name="btn" id="btn" value="확인" onclick="check();"></td>
</tr>
</table>
</form>
</body>
</html>
package example1230;
import java.sql.Connection;
import java.sql.DriverManager;
public class Dbconn {
private String url= "jdbc:oracle:thin:@127.0.0.1:1521:xe";
private String user="system";
private String password="1234";
public Connection getConnection() {
Connection conn= null ;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password); //연결객체 생성
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import ="java.sql.*" %>
<%
//공통으로 사용하는 파일입니다
String url= "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String user="system";
String password="1234";
Class.forName("oracle.jdbc.driver.OracleDriver"); //동적로딩 - 메모리에 올린다
Connection conn = DriverManager.getConnection(url, user, password); //DB와 접속시킨다.
out.println("연결객체주소는?"+conn);
%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import ="java.sql.*" %>
<%!
public int memberInsert(Connection conn, String memberId, String memberPwd, String memberName , String memberPhone , String memberEmail , String memberGender , String memberAddr , String memberBirth){
int value = 0;
PreparedStatement pstmt= null;
String sql ="INSERT INTO member1230(midx,memberId,memberPwd,memberName,memberPhone,memberEmail,memberGender,memberAddr,memberBirth,ip)"+
"VALUES(midx_seq.nextval,?,?,?,?,?,?,?,?,null)";
// 구문 쿼리클래스
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,memberId);
pstmt.setString(2,memberPwd);
pstmt.setString(3,memberName);
pstmt.setString(4,memberPhone);
pstmt.setString(5,memberEmail);
pstmt.setString(6,memberGender);
pstmt.setString(7,memberAddr);
pstmt.setString(8,memberBirth);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return value;
}
%>
package example1230;
//Value Object 값을 담는 객체 (DTO)
public class MemberVo {
private int midx;
private String memberid;
private String memberpwd;
private String membername;
private String memberphone;
private String memberemail;
private String membergender;
private String memberaddr;
private String memberbirth;
private String delyn;
private String writeday;
private String ip;
public int getMidx() {
return midx;
}
public void setMidx(int midx) {
this.midx = midx;
}
public String getMemberid() {
return memberid;
}
public void setMemberid(String memberid) {
this.memberid = memberid;
}
public String getMemberpwd() {
return memberpwd;
}
public void setMemberpwd(String memberpwd) {
this.memberpwd = memberpwd;
}
public String getMembername() {
return membername;
}
public void setMembername(String membername) {
this.membername = membername;
}
public String getMemberphone() {
return memberphone;
}
public void setMemberphone(String memberphone) {
this.memberphone = memberphone;
}
public String getMemberemail() {
return memberemail;
}
public void setMemberemail(String memberemail) {
this.memberemail = memberemail;
}
public String getMembergender() {
return membergender;
}
public void setMembergender(String membergender) {
this.membergender = membergender;
}
public String getMemberaddr() {
return memberaddr;
}
public void setMemberaddr(String memberaddr) {
this.memberaddr = memberaddr;
}
public String getMemberbirth() {
return memberbirth;
}
public void setMemberbirth(String memberbirth) {
this.memberbirth = memberbirth;
}
public String getDelyn() {
return delyn;
}
public void setDelyn(String delyn) {
this.delyn = delyn;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
▶DAO(Data Access Object) : 데이터베이스 접근 객체
하나의 회원정보를 불러오거나 입력할 때 사용
Connection = 연결
PreparedStatement = 설정 및 실행
ResultSet = 결과값
String sql | 실제로 DB에서 입력할 쿼리문을 'sql' 변수에 미리 담아둡니다 |
conn.preparedStatement(sql) | 미리 설정한 'sql'을 셋팅하는 코드 |
pstmt.setString(1,userID) | 쿼리문의 '1'번째 물음표에 'userID'를 대입시키는 것 |
rs = pstmt.executeQuery() | 셋팅이 끝난 쿼리문을 실행시키고 나온 결과값을 'rs'에 저장 |
rs.next() | 결과 값이 존재한다면 해당 결과값을 얻을 수 있다 |
package example1230.controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
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 example1230.domain.MemberVo;
import example1230.service.MemberDao;
@WebServlet("/MemberController")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String uri = request.getRequestURI();
System.out.println("전체 주소는? "+uri);
String projectName = request.getContextPath();
int projectLength = projectName.length();
String str = uri.substring(projectLength); //실제 가상경로이름 추출
System.out.println("가상경로는? "+str);
if(str.equals("/member/memberList.do")) { //추출한 가상경로가 이 문자열과 같나요?
System.out.println("가상경로로 들어옴");
MemberDao md = new MemberDao();
ArrayList <MemberVo> alist = md.memberSelectAll();
request.setAttribute("alist", alist); //내부이동은 자원을 공유할 수 있다
// 내부 이동
RequestDispatcher rd = request.getRequestDispatcher("/member/memberList.jsp");
rd.forward(request, response);
}else if(str.equals("/member/memberJoin.do")) {
System.out.println("memberJoin.do");
RequestDispatcher rd = request.getRequestDispatcher("/member/memberJoin.jsp");
rd.forward(request, response);
}else if(str.equals("/member/memberJoinAction.do")) {
String memberId = request.getParameter("memberId");
String memberPwd = request.getParameter("memberPwd");
String memberName = request.getParameter("memberName");
String memberPhone = request.getParameter("memberPhone");
String memberEmail = request.getParameter("memberEmail");
String memberGender = request.getParameter("memberGender");
String memberAddr = request.getParameter("memberAddr");
String memberBirth = request.getParameter("memberBirth");
MemberDao md= new MemberDao();
md.memberInsert(memberId,memberPwd,memberName,memberPhone,memberEmail,memberGender,memberAddr,memberBirth);
String path = request.getContextPath()+"/member/memberList.do";
response.sendRedirect(path);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
어노테이션 @ webServlet() 을 이용해서 클래스를 새로 만듦
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>example1230.controller.MemberController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
▶가상경로 만들기
▶배포 서술자(web.xml)
배포 서술자는 웹 애플리케이션의 환경설정 정보를 담은 파일입니다. WAS가 처음 구동될 때 이 파일을 읽어 설정 내용을 톰캣에 적용하게 됩니다. 서블릿 설정, 필터 설정, 웰컴 파일 목록, 오류 페이지 처리와 같은 설정을 할 수 있습니다.
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/member/memberJoin.do">회원가입하기</a>
</body>
</html>
package example1230.domain;
//Value Object 값을 담는 객체 (DTO)
public class MemberVo {
private int midx;
private String memberid;
private String memberpwd;
private String membername;
private String memberphone;
private String memberemail;
private String membergender;
private String memberaddr;
private String memberbirth;
private String delyn;
private String writeday;
private String ip;
public int getMidx() {
return midx;
}
public void setMidx(int midx) {
this.midx = midx;
}
public String getMemberid() {
return memberid;
}
public void setMemberid(String memberid) {
this.memberid = memberid;
}
public String getMemberpwd() {
return memberpwd;
}
public void setMemberpwd(String memberpwd) {
this.memberpwd = memberpwd;
}
public String getMembername() {
return membername;
}
public void setMembername(String membername) {
this.membername = membername;
}
public String getMemberphone() {
return memberphone;
}
public void setMemberphone(String memberphone) {
this.memberphone = memberphone;
}
public String getMemberemail() {
return memberemail;
}
public void setMemberemail(String memberemail) {
this.memberemail = memberemail;
}
public String getMembergender() {
return membergender;
}
public void setMembergender(String membergender) {
this.membergender = membergender;
}
public String getMemberaddr() {
return memberaddr;
}
public void setMemberaddr(String memberaddr) {
this.memberaddr = memberaddr;
}
public String getMemberbirth() {
return memberbirth;
}
public void setMemberbirth(String memberbirth) {
this.memberbirth = memberbirth;
}
public String getDelyn() {
return delyn;
}
public void setDelyn(String delyn) {
this.delyn = delyn;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
package example1230.service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import example1230.dbconn.Dbconn;
import example1230.domain.MemberVo;
public class MemberDao{
//멤버변수 전역
private Connection conn;
public MemberDao(){ //MemberDao 생성할 때 Dbconn 객체도 생성시킴 => conn객체 생성
Dbconn dbconn = new Dbconn();
this.conn = dbconn.getConnection();
}
public int memberInsert(String memberId, String memberPwd, String memberName , String memberPhone , String memberEmail , String memberGender , String memberAddr , String memberBirth){
int value = 0;
PreparedStatement pstmt= null;
String sql ="INSERT INTO member1230(midx,memberId,memberPwd,memberName,memberPhone,memberEmail,memberGender,memberAddr,memberBirth,ip)"+
"VALUES(midx_seq.nextval,?,?,?,?,?,?,?,?,null)";
// 구문 쿼리클래스
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,memberId);
pstmt.setString(2,memberPwd);
pstmt.setString(3,memberName);
pstmt.setString(4,memberPhone);
pstmt.setString(5,memberEmail);
pstmt.setString(6,memberGender);
pstmt.setString(7,memberAddr);
pstmt.setString(8,memberBirth);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return value;
}
@SuppressWarnings("finally")
public ArrayList<MemberVo> memberSelectAll() {
ArrayList<MemberVo> alist = new ArrayList<MemberVo>();
String sql = "select midx, memberid, membername, delyn, writeday from member1230 order by midx desc";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) { //커서의 다음 값이 존재하면 참
MemberVo mv = new MemberVo(); //MemberVo 객체 생성해서
mv.setMidx(rs.getInt("midx")); //rs 값들을 옮겨담는다
mv.setMemberid(rs.getString("memberid"));
mv.setMembername(rs.getString("membername"));
mv.setDelyn(rs.getString("delyn"));
mv.setWriteday(rs.getString("writeday"));
alist.add(mv); //alist 클래스 안에 MemberVo 객체를 하나씩 추가한다
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return alist;
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "example1230.domain.*" %>
<%@page import = "java.util.*" %>
<%
ArrayList <MemberVo> alist = (ArrayList<MemberVo>)request.getAttribute("alist");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
회원목록
<table border=1>
<tr>
<td>회원번호</td>
<td>회원아이디</td>
<td>회원이름</td>
<td>탈퇴여부</td>
<td>가입일</td>
</tr>
<% for (MemberVo mv : alist) {%>
<tr>
<td><%=mv.getMidx() %></td>
<td><%=mv.getMemberid() %></td>
<td><%=mv.getMembername() %></td>
<td><%=mv.getDelyn() %></td>
<td><%=mv.getWriteday() %></td>
</tr>
<%} %>
</table>
</body>
</html>
https://developer.mozilla.org/ko/docs/Glossary/MVC
MVC - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN
MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고
developer.mozilla.org
https://cocoon1787.tistory.com/733
[개발상식] MVC 패턴이란? (Model-View-Controller)
🚀 이번 포스팅은 개발자 면접에서 자주 나오는 질문 중의 하나인 "MVC패턴"에 대한 내용입니다. MVC패턴의 의미와 사용해야 하는 이유, 사용 예시 등등에 대해 알아보겠습니다. 💡 MVC 패턴이란?
cocoon1787.tistory.com
'TIL > JSP' 카테고리의 다른 글
[JSP] 20230315 JAVA 게시판에 글쓰기 (0) | 2023.03.15 |
---|---|
[JSP] 20230314 JSP 모델2 방식으로 게시판 만들기 (0) | 2023.03.14 |
[JSP] JSP 개발 환경 구축 (0) | 2023.03.14 |
[JSP] 20230310 JSP try- catch, DTO(VO)와 DAO (0) | 2023.03.10 |
[JSP] 20230309 JSP servlet, JDBC를 사용한 DB연동 (0) | 2023.03.09 |