Acorn academy 12/28 서블릿 요청, 응답처리 실습

Bae Seong Jun·2023년 12월 28일

Acorn academy

목록 보기
27/70

Enumeration으로 request 데이터 받아서 사용하기
hasMoreElements()
nextElement()
getParameter()

request.getParameterNames()를 통해 모든 값을 받아서 반환.
Enumeration으로 받아서 처리
권장되는 방법은 아님

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		Enumeration<String> keys=request.getParameterNames();
		
		PrintWriter out = response.getWriter();
		
		out.print("<html><body>");
		while(keys.hasMoreElements()) {
			String key = keys.nextElement();
			String value = request.getParameter(key);
			out.print(key + ": " + value + "<br>");
		}
		out.print("</html></body>");
		}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Map으로 데이터 받기
<키, 벨류>
<name, value>
name 하나에 여러개의 value값이 전달될 수 있음.
따라서 키는 String, value는 String[] 문자열 배열로 받아서 처리함.
따라서 Map<String, String[]> map = request.getParameterMap();

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Set;

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("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public LoginServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
//		String userid = request.getParameter("userid");
//		String passwd = request.getParameter("passwd");
//		String fruits[] = request.getParameterValues("fruit");
//		
//		for (String fruit : fruits) {
//			System.out.println(fruit);
//		}
		
		
		// 모든 값을 맵<name, value[]>로 받아서 사용하기
		Map<String, String[]> map = request.getParameterMap();
		
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		// Map의 키값을 Set<String>으로 받기
		Set<String> keys = map.keySet();
		// 키를 기준으로 foreach문을 돌아서 values를 받아서 하나씩 찍어보기
		for (String key : keys) {
			String[] values = map.get(key);
			String mesg = "";
			for (String value : values) {
				mesg += value + " ";
			}
			out.print(key + " ======= " + mesg + "<br>");
		}
		out.print("</html></body>");
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

}

자바 워크샵 8번
html파일에서 servlet 파일에 3가지 정보를 전달
전달된 값은 servlet 파일에서 Product객체로 재구성함.
해당 Product 객체를 <id, Product> 형태의 HashMap에 저장함.
- 해당 Map은 데이터가 유지되어야하므로 멤버변수로 선언 및 초기화.
Map에 전달받은 id와 같은 key가 없으면 put
있으면 수량만 변경
map의 value 순회

  • .ketset을 통하여 key에 foreach를 돌려서 순회
  • .values()를 통하여 value값들을 foreach를 돌려서 순회
package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Set;

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 com.dto.Product;

@WebServlet("/productReg")
public class ProductRegistrationServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private HashMap<String, Product> products = new HashMap<String, Product>();
	
    public ProductRegistrationServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		String mesg = "";
		
		try {
			String name = request.getParameter("name");
			String id = request.getParameter("id");
			int amount = Integer.parseInt(request.getParameter("amount"));
			
			Product temp = products.get(id);
			if(temp==null) {
				products.put(id, new Product(name, id, amount));
			}else {
				//products.replace(id, new Product(name, id, products.get(id).getAmount() + amount));
				temp.setAmount(temp.getAmount()+amount);
			}
//			System.out.println(products);
			mesg += "<table border=\"1\">\r\n"
					+ "		<b>상품입력 결과</b>\r\n"
					+ "		<hr>"
					+ "        	<tr>\r\n"
					+ "				<th>상품명</th>\r\n"
					+ "				<th>상품아이디</th>\r\n"
					+ "				<th>수량</th>\r\n"
					+ "			</tr>";
			
//			Set<String> keys = products.keySet();
//			for (String key : keys) {
//				Product p = products.get(key);
//				mesg += "<tr>"
//						+"<td>"+p.getName() + "</td>"
//						+"<td>"+p.getId() + "</td>"
//						+"<td>"+p.getAmount() + "</td>"
//						+"</tr>";
//			}
//			
//			mesg += "</table>\r\n"
//					+ "		<a href=\"productForm.html\">상품 입력하기</a>";
			for(Product p : products.values()) {
				mesg += "<tr>"
				+"<td>"+p.getName() + "</td>"
				+"<td>"+p.getId() + "</td>"
				+"<td>"+p.getAmount() + "</td>"
				+"</tr>";
			}
	
			mesg += "</table>\r\n"
					+ "		<a href=\"productForm.html\">상품 입력하기</a>";

			
		} catch (Exception e) {
			out.println("입력항목확인 요망<br>");
		}
		
		
		out.println("<html><body>");
		out.println(mesg);
		out.println("</body></html>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

기존 서블릿 활용 프로젝트에 DB연동

web-inf -> lib에 oracle 6g.jar 넣어주기
prepared statements 사용하기!
drive 4가지는 서블릿 멤버변수단에
드라이버 로딩은 init

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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("/EmpListServlet")
public class EmpListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public  String driver="oracle.jdbc.driver.OracleDriver";
    public  String url = "jdbc:oracle:thin:@localhost:1521:xe";
    public  String userid = "scott";
    public  String passwd = "tiger";
	

    @Override
	public void init() throws ServletException {
		super.init();
		try {
			Class.forName(driver);
			System.out.println("드라이버 로딩성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public EmpListServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		String mesg = "";
		
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			con = DriverManager.getConnection(url, userid, passwd);
			//System.out.println(con);
			String sql = "select * from emp";
			
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			mesg+= "	<table border=\"1\">\r\n"
					+ "		<tr>\r\n"
					+ "			<th>사원번호</th>\r\n"
					+ "			<th>사원이름</th>\r\n"
					+ "			<th>월급</th>\r\n"
					+ "			<th>입사일</th>\r\n"
					+ "			<th>부서번호</th>\r\n"
					+ "		</tr>";
			
			while(rs.next()) {
				mesg+= "<tr>"; 
				mesg += "<td>" + rs.getInt("empno") + "</td>";
				mesg += "<td>" + rs.getString("ename") + "</td>";
				mesg += "<td>" + rs.getInt("sal") + "</td>";
				mesg += "<td>" + rs.getDate("hiredate") + "</td>";
				mesg += "<td>" + rs.getInt("deptno") + "</td>";
				mesg+= "</tr>";		
			}
			
			mesg+= "	</table>";
				
			out.println("<html><body>" + mesg + "</body></html>");
		} catch (SQLException e) {
			e.printStackTrace();
			
		} finally {
			try {
				if(rs!=null)rs.close();
				if(pstmt!=null)pstmt.close();
				if(con!=null)con.close();
				
			} catch (SQLException e) {
				e.printStackTrace();
				
			}
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

dto의 멤버변수는 소문자로 작성해야함

워크샵 13번

프로젝트마이바티스설정스탭
1. 프로젝트 생성, driver build path지정
2. 패키지 생성,
3. Jdbc.properties파일의 4가지 정보 설정 후 파일
붙이기
4. 모델클래스 파일만이라도생성, mapper.xml 빈
껍데기파일만생성후
패키지에붙여넣기
5. Configuration . Xml에서 properties, alias,
mapper지정
6. MySqlSessionFactory 파일 붙여넣기
7. 서비스에서 MySqlSessionFactory사용하기

Configuration.xml 설정
1. mapper,
2. properties,
3. typeAliases 등 설정
4. 4가지정보 properties key명 그대로 입력

  • mapper, properties 는 경로까지 입력해야함

  • factory에서 Configuration.xml의 경로설정

  • resource 경로 설정시 . 대신 /로 파일 경로 구분

항상 중요한건 설정이 다 끝나고, 세션이 제대로 받아지는지 확인하고 코드 작성해야한다.

profile
코딩 프로?

0개의 댓글