39일차 과제 - 추가 풀이
member 목록과 검색을 한 번에
1. 검색분류와 검색어가 없으면 목록을 조회하여 출력
2. 검색분류와 검색어가 있으면 검색을 수행하여 출력
package jdbc.test;
import java.util.List;
import jdbc.beans.MemberDao;
import jdbc.beans.MemberDto;
public class Test18_1 {
public static void main(String[] args) throws Exception {
String column = "member_id";
String keyword = "test";
// boolean isSearch = column이 있고 keyword가 있으면;
boolean isSearch = (column != null && !column.equals(""))
&& (keyword != null && !keyword.equals(""));
System.out.println("isSearch = " + isSearch);
MemberDao memberDao = new MemberDao();
List<MemberDto> list;
if(isSearch) {
list = memberDao.select(column, keyword);
}
else {
list = memberDao.list();
}
for(MemberDto memberDto : list) {
System.out.println(memberDto);
}
}
}
[8] 단일조회(R) 메소드
= 결과가 1개 또는 0개로 나오는 메소드
= 매개변수 : 시험지번호(exam_id, int)
= 반환형 : 시험지정보(ExamDto)
= select * from exam where exam_id = ?
public ExamDto select(int examId) throws Exception {
Connection con = JdbcUtils.connect(USERNAME, PASSWORD);
String sql = "select * from exam where exam_id = ?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, examId);
ResultSet rs = ps.executeQuery();
// copy
// ExamDto examDto = 객체 or null;
ExamDto examDto;
if (rs.next()) {// 있으면
examDto = new ExamDto();
examDto.setExamId(rs.getInt("exam_id"));
examDto.setStudent(rs.getString("student"));
examDto.setSubject(rs.getString("subject"));
examDto.setType(rs.getString("type"));
examDto.setScore(rs.getInt("score"));
} else {// 없으면
examDto = null;
}
con.close();
return examDto;
}
package jdbc.test;
import jdbc.beans.ExamDao;
import jdbc.beans.ExamDto;
public class Test19 {
public static void main(String[] args) throws Exception {
//exam 단일조회
//입력 : 시험지번호
int examId = 3;
//처리
ExamDao examDao = new ExamDao();
ExamDto examDto = examDao.select(examId);
//출력
if(examDto == null) {
System.out.println("해당 시험지는 존재하지 않습니다");
}
else{
System.out.println(examDto);//examDao toString 설정
}
}
}
ExamDto [examId=3, student=피카츄, subject=네트워크프로그래밍구현, type=서술형, score=60]
모듈의 결합을 통한 서비스 구현
ex : 회원가입 - 회원 가입 시 아이디 중복 검사
package jdbc.test;
import java.util.Scanner;
import jdbc.beans.MemberDao;
import jdbc.beans.MemberDto;
public class Test22 {
public static void main(String[] args) throws Exception {
//-> 아이디를 먼저 입력받아서 사용이 가능한지 확인 후 나머지 정보를 입력받겠다
MemberDao memberDao = new MemberDao();
MemberDto memberDto = new MemberDto();
Scanner sc = new Scanner(System.in);
System.out.print("아이디 : ");
String memberId = sc.nextLine();
//아이디검사
if(memberDao.get(memberId) != null) {//memberId의 단일조회 결과가 있으면(not null) = 아이디가 이미 존재한다면
System.out.println("이미 사용중인 아이디입니다");
System.exit(0);
}
memberDto.setMemberId(memberId);
System.out.print("비밀번호 : ");
memberDto.setMemberPw(sc.nextLine());
System.out.print("닉네임 : ");
memberDto.setMemberNick(sc.nextLine());
System.out.print("생년월일 : ");
memberDto.setMemberBirth(sc.nextLine());
System.out.print("이메일 : ");
memberDto.setMemberEmail(sc.nextLine());
System.out.print("전화번호 : ");
memberDto.setMemberPhone(sc.nextLine());
sc.close();
//가입
memberDao.join(memberDto);
System.out.println("가입이 완료되었습니다");
}
}
아이디 : zxcvb
비밀번호 : asdqwe123
닉네임 : 호랑이
생년월일 : 1999-09-09
이메일 : asdqwe@asd.com
전화번호 : 010-0000-0000
가입이 완료되었습니다
웹 - 서버 설치
apache-tomcat-9.0.54 설치
Download -> Tomcat 9 -> 64-bit Windows zip 다운로드
Java EE (default)로 변경
Servers -> No server are available. Click this link to create a new server... 클릭
Apache -> Tomcat v9.0 Server 선택 후 Next
Apache tomcat v9.0 설치 경로 선택 후 Finish
완료
서버 실행해보기
Dynamic Web Project로 생성
버전 확인후 Next>
src\main\java 확인 후 Finish
web01 -> src -> webapp -> hello.txt File 생성 후 hello 쓰고 저장
Servers 칸에서 마우스 오른쪽 누르기 -> Add and Remove... 누르기
실행할 프로젝트 web01 만 Add를 눌러서 Configured: 로 보내고 Finish
Servers 칸에서 마우스 오른쪽 누르기 -> Start 누르기
started, synchronized - 시작되었으며 최신 상태
started, republish - 시작되었으나 갱신이 필요한 상태
크롬창에 http://localhost:8080/web01/hello.txt 입력 후
메시지 확인 완료
웹 프로젝트 구조 예시
웹 프로젝트 구조
웹 - 동적 컨텐츠 생성
서블릿(Servlet)
사용자가 주문할 수 있는 프로그래밍 코드를 보관한 클래스
(생성과정 예시)
1. 적합한 부모 클래스를 찾아서 상속받는다(HttpServlet). - 자격 획득
2. 주문 가능하도록 주소를 설정
3. 이 파일(페이지)을 주문하면 만들어질 내용을 코드로 작성
- 부모 클래스의 service()를 재정의하여 작성한다!
Dynamic Web Project - web03 -> src/main/java -> web03 -> WelcomeServlet 생성
package web03;
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;
@WebServlet(urlPatterns = "/welcome.txt")//2 주소
public class WelcomeServlet extends HttpServlet {//1 권한 상속
@Override//3
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("hello Servlet");//결과를 서버의 콘솔에 출력
resp.getWriter().println("Hello Servlet");//결과를 사용자가 볼 화면에 출력
}
}
코드를 수정 하거나 새로 만들면 서버를 Restart를 해줘야한다
주소는 @WebServlet(urlPatterns = "/welcome.txt") -> "/welcome.txt" 만 뒤에 써주면된다 ( "/" 를 꼭 붙인다 )
-> http://localhost:8080/web03/welcome.txt
Q. 화면에 1부터 10까지 출력되도록 서블릿을 구현
package web03;
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;
@WebServlet(urlPatterns = "/number.txt")
public class NumberServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
for(int i=1; i <= 10; i++) {
resp.getWriter().println(i);
}
}
}
웹 - 서블릿 파라미터 처리
입력 - 스캐너 사용 금지
= 웹 페이지에서의 입력은 "주소"를 통해서 파라미터로 전달된다.
= 주소에 ?가 있다면 그 뒷부분을 파라미터라고 보면 된다.
= 사용자가 보낸 정보(요청정보)를 가진 객체인 req에서 파라미터를 추출하도록 지시
= req.getParameter("a") 는 파라미터 중 a와 연결된 데이터를 가져오라는 뜻(없으면 null)
= 모든 파라미터는 무조건 String으로만 읽힌다.
= 숫자로 바꾸고 싶다면 변환명령을 추가로 작성해야 한다.
= ex) 주소뒤에 "?a=10&b=20" 처럼 쓴다
= ex) http://localhost:8080/web03/plus.txt?a=10&b=20
package web03;
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;
@WebServlet(urlPatterns = "/plus.txt")
public class PlusServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int a = Integer.parseInt(req.getParameter("a"));
int b = Integer.parseInt(req.getParameter("b"));
// 계산
int total = a + b;
// 출력
resp.getWriter().println("total = " + total);
}
}
Q. 과제
## web04.servlet.SubwayServlet
접속주소 - http://localhost:8080/web04/subway.txt
사용자에게 `birth`라는 이름으로 출생년도 4자리를 파라미터로 전달받은 뒤
나이를 계산하여 나이에 맞는 지하철 요금을 화면에 출력
요금 기준은 과거에 풀었던 예제 혹은 인터넷 검색을 하여 진행
package servlet;
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;
@WebServlet(urlPatterns = "/subway.txt")
public class SubwayServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int birth = Integer.parseInt(req.getParameter("birth"));
// 처리
int age = 2021 - birth + 1;
resp.getWriter().println("age = " + age);
if (age >= 20 && age < 65) {
resp.getWriter().println("price = " + 1250);
} else if (age >= 14 && age < 20) {
resp.getWriter().println("price = " + 720);
} else if (age >= 8 && age < 14) {
resp.getWriter().println("price = " + 450);
} else {
resp.getWriter().println("price = " + 0);
}
}
}
## web04.setvlet.TotalServlet
접속주소 - http://localhost:8080/web04/total.txt
사용자에게 `begin`과 `end`라는 이름으로 각각 두개의 정수를 파라미터로 전달받은 뒤
해당하는 구간에 존재하는 모든 정수의 합계를 구하여 화면에 출력
package servlet;
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;
@WebServlet(urlPatterns = "/total.txt")
public class TotalServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int begin = Integer.parseInt(req.getParameter("begin"));
int end = Integer.parseInt(req.getParameter("end"));
int total = 0;
for (int i = begin; i <= end; i++) {
total += i;
}
resp.getWriter().print(" total = " + total);
}
}
'Java 웹 개발' 카테고리의 다른 글
21.10.12 - 웹 개발 입문 42일차 (0) | 2021.10.12 |
---|---|
21.10.11 - 웹 개발 입문 41일차 (0) | 2021.10.11 |
21.10.07 - 웹 개발 입문 39일차 (0) | 2021.10.07 |
21.10.06 - 웹 개발 입문 38일차 (0) | 2021.10.06 |
21.10.05 - 웹 개발 입문 37일차 (0) | 2021.10.05 |