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 순회
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);
}
}
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 경로 설정시 . 대신 /로 파일 경로 구분
항상 중요한건 설정이 다 끝나고, 세션이 제대로 받아지는지 확인하고 코드 작성해야한다.