20220406 복습

2022 - 0406 - 복습

response.setContentType("text/html;charset=UTF-8");
response.getWriter().append("Served at: ").append(request.getContextPath());

[싱글톤]
ProductDAO pDao = ProductDAO.getInstance();

[연가보 (연결 > 가져오기 > 보내기)]
List<ProductVO>productList = pDao.selectAllProduct();
request.setAttribute("productList", productList);

[페이지 이동]
RequestDispatcher rd = request.getRequestDispatcher("product/productList.jsp");
rd.forward(request,response);

//doGet(request, response);
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("post 전송");

//업로드 코드
ServletContext context = getServletContext();
String path = context.getRealPath("img"); //Context로 서블릿이 이미지 실제 경로를 찾게 해줌.
String encType="UTF-8";
int sizeLimit=20*1024*1024; //20MB

MultipartRequest multi = new MultipartRequest(request, path, sizeLimit, encType, new DefaultFileRenamePolicy());

String productId = multi.getParameter("produtId");
String pname = multi.getParameter("pname");
int unitPrice = Integer.parseInt(multi.getParameter("unitPrice"));
String description = multi.getParameter("description");
String manufacturer = multi.getParameter("manufacturer");
String category = multi.getParameter("category");
int unitInStock = Integer.parseInt(multi.getParameter("unitInStock"));
String conditions = multi.getParameter("conditions");
String upfile = multi.getFilesystemName("upfile");

//VO 객체
ProductVO pVO = new ProductVO();
pVO.setProductId(productId);
pVO.setPname(pname);
pVO.setUnitPrice(unitPrice);
pVO.setDescription(description);
pVO.setManufacturer(manufacturer);
pVO.setCategory(category);
pVO.setUnitInStock(unitInStock);
pVO.setConditions(conditions);
pVO.setUpfile(upfile);

     ProductDAO pDao=ProductDAO.getInstance();
     if( pDao.insertProduct() ) {
          System.out.println("등록 성공");
          //response.sendRedirect("productList.do");
     }else {
          System.out.println("등록 실패");
     }



static Connection conn = null;
static PreparedStatement pstmt = null;
static String jdbc_driver="com.mysql.cj.jdbc.Driver";
static String jdbc_url="jdbc:mysql://localhost:3306/db53";
static String id="root";
static String pw="123456";

     public static Connection connect() {
          try {
               Class.forName(jdbc_driver);
               conn = DriverManager.getConnection(jdbc_url,id,pw);
          }catch(ClassNotFoundException e){

          }catch(SQLException e) {

          }
          return conn;
     }

     public static void disconnect() {
          if(pstmt != null) {
               try {
                    pstmt.close();
               } catch (SQLException e) {
                    e.printStackTrace();
               }
          }
          if(conn != null) {
               try {
                    conn.close();
               } catch (SQLException e) {
                    e.printStackTrace();
               }
          }
     }



function checkKey(event){

     if (event.keyCode >= 48 && event.keyCode <= 57) { //숫자키만 입력
          return true;
     } else {
          event.returnValue = false;
          alert('숫자만 입력해주세요.');
     }
}

function productCheck(){

     if(document.myform.productId.value.length == 0){
          alert('상품번호를 입력해주세요.');
          myform.productId.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.productId.value.length < 4 || document.myform.productId.value.length >= 5 ){
          alert('상품번호는 4자리로 입력해주세요.');
          myform.productId.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.pname.value.length == 0){
          alert('상품명를 입력해주세요.');
          myform.pname.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.unitPrice.value.length == 0){
          alert('상품가격을 입력해주세요.');
          myform.unitPrice.focus();
          return false; //페이지 이동 x
     }
     if( isNaN(document.myform.unitPrice.value) ){
          alert('상품가격을 숫자로 입력해주세요.');
          myform.unitPrice.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.description.value.length == 0){
          alert('상품설명을 입력해주세요.');
          myform.description.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.manufacturer.value.length == 0){
          alert('제조사를 입력해주세요.');
          myform.manufacturer.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.category.value.length == 0){
          alert('카테고리를 입력해주세요.');
          myform.category.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.unitInStock.value.length == 0){
          alert('상품수량을 입력해주세요.');
          myform.unitInStock.focus();
          return false; //페이지 이동 x
     }
     if( isNaN(document.myform.unitInStock.value) ){
          alert('상품수량을 숫자로 입력해주세요.');
          myform.unitInStock.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.conditions.value.length == 0){
          alert('상품상태를 입력해주세요.');
          myform.conditions.focus();
          return false; //페이지 이동 x
     }
     if(document.myform.upfile.value.length == 0){
          alert('첨부파일을 등록해주세요.');
          myform.upfile.focus();
          return false; //페이지 이동 x
     }

     return true;
}


< 서블릿 기초 >

Servlet이 컨트롤러 역할을 한다.
URL Mappings에서 서블릿 이름 수정 가능.
(보통 서블릿의 이름을 노출시키지 않는다)

인코딩 & out

PrintWriter out = response.getWriter();
out.println("jsp와 달리 객체를 생성해서 사용해야함.");

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

JSTL(Jsp Standard Tag Library)

main -> webapp -> WEB-INF -> lib 폴더 안에
cos.jar / jstl.jar / standard.jar 넣어주기

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     <c:forEach var="product" items="${productList}">
     ${product.idx }
     </c:forEach>
(for반복문을 태그로 사용. 향상된 for문 X )

+ 코드

<a href="/DWP_0405_03/productWrite.do">상품 등록</a> --- 링크
<img src=./img/ style="width:100px;height:100px;"></img> --- 이미지
<form method="post" name="myform" enctype="multipart/form-data"> --- 업로드 폼
</form>
<label for="formGroupExampleInput" class="form-label">상품번호</label> --- LABEL
<input type="text" class="form-control" id="productId" name="productId"> --- input TEXT
<button class="btn btn-success" type="submit" onclick="return productCheck()">등록</button> --- 버튼(유효성)
<button class="btn btn-danger" type="reset" >리셋</button> --- 버튼(리셋)
<button class="btn btn-dark" type="button" onclick="location.href='productList.do'">목록</button> --- 버튼(링크)


패키지 클래스 설명


com.jslhrd.minishop.controller

ProductListServlet.java
ProductWriteServlet.java
ProductUpdateServlet.java
ProductDeleteServlet.java
(ctl.jsp역할의 컨트롤러)
- URL Mapping -
productList.do
productWrite.do
productUpdate.do
productDelete.do


com.jslhrd.member.controller

LoginServlet.java
JoinServlet.java
LogoutServlet.java
MemberUpdateServlet.java
(ctl.jsp역할의 컨트롤러)
- URL Mapping -
login.do
join.do
logout.do
memberUpdate.do
com.jslhrd.minishop.DAO ProductDAO.java
MemberDAO.java
(조회,추가,갱신,삭제 등)
(로그인, 중복확인 등)





com.jslhrd.minishop.DTO
ProductVO.java
(상품 정보 저장)
private int idx;
private String productId;
private String pname;
private int unitPrice;
private String description;
private String manufacturer;
private String category;
private int unitInStock;
private String conditions;
private String upfile;
MemberVO.java
(회원 정보 저장)
private int idx;
private String name;
private String userid;
private String pwd;
private String email;
private String phone;
private String admin;
// 교과서에 없지만 추가.
private String avatar;
private String last_login;
private int failed_login;
util DBManager.java
(DB연결/ 연결해제)

Webapp / product

Webapp / member
product 폴더

productList.jsp
productWrite.jsp
productUpdate.jsp
productDelete.jsp
member 폴더

login.jsp
join.jsp
main.jsp
memberUpdate.jsp


Webapp / script

Webapp / css


product.js
member.js
shopping.css
(스크립트 사용)
유효성 검사.
onKeyPress=""
alert('');
event.keyCord
isNaN();

(css로 스타일 꾸미기)