<시험 풀이>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>회원 가입 양식</title>
<style>
div{
height: 185px;
width: 370px;
border: 1px solid black;
padding-top: 20px;
padding-left: 20px;
margin-top:25px;
}
p{
background-color: white;
font: 14px black;
position: absolute;
top: 2px;
left: 20px;
}
td{
font-size: 14px;
}
.id{
margin: 5px 0;
margin-left: 10px;
}
.pw{
margin: 5px 0;
margin-left: 10px;
}
.pwRe{
margin: 5px 0;
margin-left: 10px;
}
.radio{
margin: 5px 0px 5px 0px;
}
.rLable{
margin: 5px 0px 5px 2px;
margin-left: 12px;
}
.btn-chk{
font-size: 12px;
}
.btn-reset{
font-size: 12px;
position: absolute;
left: 177px;
margin: 10px 0;
}
.btn-submit{
font-size: 12px;
position: absolute;
left: 233px;
margin: 10px 0;
}
</style>
</head>
<body>
<div>
<p >회원 가입 양식</p>
<form id="f_test" action="test" method="get">
<table>
<tr>
<td>아이디</td>
<td>
<input class="id" id="id" type="text" size="20px">
<input class="btn-chk" id="btn-chk" type="button" value="중복확인">
<!--
button -> type: submit(화면전환)
input[button] -> type:button
a -> 타입대신 href(페이지이동 or 함수호출-화면전환x)
location.href=hashchange
아이디 중복확인은 버튼이 눌릴때마다 이벤트가 적용되야 하므로
반드시 addEventListener로 처리해야한다(onclick으로하면 마지막 한번만 처리됨!)
-->
</td>
</tr>
<tr>
<td>비밀번호</td>
<td>
<input class="pw" type="password" size="20px"></input>
</td>
</tr>
<tr>
<td>비밀번호확인</td>
<td>
<input class="pwRe" type="password" size="20px"></input>
</td>
</tr>
<tr>
<td class="loc">지역</td>
<td>
<label class="rLable" for="loc1">서울</label>
<input name="radio" class="radio" type="radio" id="loc1" value="서울"></input>
<label class="rLable" for="loc2">부산</label>
<input name="radio" class="radio" type="radio" id="loc2" value="부산"></input>
<label class="rLable" for="loc3">대구</label>
<input name="radio" class="radio" type="radio" id="loc3" value="대구"></input>
</td>
</tr>
</table>
<input class="btn-reset" id="btn-reset" type="reset" value="초기화"></input>
<input class="btn-submit" id="btn-submit" type="button" value="회원가입"></input>
</form>
</div>
<script>
// 중복확인 버튼을 눌렀을 때
const check = document.querySelector('#btn-chk');
check.addEventListener('click', ()=>{
const regEx = /^[a-z][a-zA-z0-9!@#]{5,11}$/; // 영문소문자로 시작하고 영문,숫자,!@#만 들어가는 6~12자
const user = document.querySelector('#id') // 아이디 입력하는 텍스트필드
let str = user.value // 사용자가 텍스트필드에 입력한 아이디 읽기
let isFlag = false; // 유효성테스트 결과 담기
// 입력값이 null이 아니고 길이가 있다면 정규식 유효성테스트
if(str.length !== null && str.length > 0){
isFlag = regEx.test(str)
}
// 삼항연산자 - true면 녹색, false면 빨강
isFlag ? user.style.backgroundColor = 'green' : user.style.backgroundColor ='red'
}) // end of 중복확인
// radio 선택값 가져오기
const locs = document.querySelectorAll('.radio')
let user = "";
for(let i = 0; i<locs.length; i++){
locs[i].addEventListener('click', ()=>{
user = locs[i].value
})
}
// 회원가입 버튼을 눌렀을 때
const btnJoin = document.querySelector('#btn-submit')
btnJoin.addEventListener('click', ()=>{
if(user === "" || user.length === 0){
window.alert("지역을 선택해주세요")
return
}
console.log("after => " + user); // 지역을 선택하지 않으면 위의 return떄문에 출력x
}) // end of 회원가입
// 초기화 버튼 - 배경색, user배열 초기화
document.getElementById('btn-reset').addEventListener('click', ()=>{
document.getElementById('id').style.backgroundColor = 'white';
user = "";
}) // end of 초기화
</script>
</body>
</html>
<MyBatis, Servlet, JSP 프로젝트 - TestServlet>
package com.mvc.controller;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.mvc.dao.TestDao;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = Logger.getLogger(TestServlet.class);
// 사용자정의메소드 doService
public void doService(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
logger.fatal("doService 호출");
logger.debug("doService 호출");
logger.info("doService 호출"); // 주로 사용할것
logger.warn("doService 호출");
logger.error("doService 호출");
TestDao tDao = new TestDao();
List<Map<String,Object>> mList = tDao.getBookMember();
/*
* 페이지 이동
* 페이지 이동 getMemberList.jsp
*
* 페이지의 물리적인 경로는 어디를 바라보고 있는가?
* web.xml -> servlet-mapping[/test/test.do] -> url-pattern
*
* 경로명/요청을 처리하는 이름.do
* 뒤에 온 확장자 .do는 의미없다
* 왜? -> 해당 요청을 인터셉트해서 해당 업무를 담당하는 클래스에 연결(FrontController.java설계 - 각 업무별 XXXController 필요함)을 해야함
* 페이지 처리는 JSP에게 맡김
* 서블릿은 요청을 받아서 업무 담당자에게 연결(매핑, 매칭)
*
* 이것을 어떻게 나눌 것인가?
* 요청은 업무담당자나 사용자 선택에 따라 결정
* 결정에 대응하는 클래스 FrontController 연결
* FrontController에서 실제 업무를 담당하는 XXXController에 전달할 때
* 요청객체와 응답객체 또한 전달되어야 한다 -> doGet, doPost, doPut, doDelete로 주입받음(톰캣이, 요청이 일어나면 주입해준다)
*
*
* 요청객체(request)로 무엇을 누릴 수 있는가? - request의 타입은 HttpServletRequest
* 1. 사용자가 입력한 값을 듣기 위해(요청할때) 필요(서버기준)
* request.getParameter("XXX"); -> mem_id, mem_name, mem_address 등이 될 수 있음
*
* 2. 세션을 생성할 때 사용함
* HttpSession session = request.getSession(); -> 세션객체생성
*
* http 프로토콜이 비상태 프로토콜이므로 상태값을 관리하는 별도의 메카니즘이 필요함
* 쿠키와 세션(시간을 지배함) <- List, Map <- 객체배열[{}] <- 배열 <- 원시형타입 (완결편이 쿠키와 세션)
*
* request.getParameter("") 리턴타입 String -> request가 소유
* session.getAttribute("") 리턴타입 Object -> 더 강력, session 소유
*
*
* 응답객체(response)로 무엇을 누릴 수 있는가? - response의 타입은 HttpServletresponse
* 1. 마임타입을 결정한다
* response.setContentType();
* 서블릿인데 json, html,xml이 될 수 있다
* response.setContentType("application/json")
* response.setContentType("text/html")
* response.setContentType("text/xml")
*
* 2. 페이지이동
* response.sendRedirect("페이지이름") -> 페이지이동이 일어남(주소창이 바뀜)
* -> 기존의 요청이 끊어지고 새로운 요청이 발생함 -> 계속 유지하고있는 것처럼 보여져야함
* -> 그러니 쿠키나 세션에 담아둔다(왜냐하면 비상태 프로토콜이니까)
*
* 쿠키 - 문자열(객체 못받음), 로컬PC에 저장됨(노출될 수 있다, 보안취약)
* 세션 - 캐시메모리에 저장됨(객체 받음, 노출 어렵다)
*/
/*
* 아래 코드를 만나기 전까지는 http://localhost:9000/test/test.do를 보여주다가
* 아래의 코드를 만나면 http://localhost:9000/test/getMemberList.jsp를 요청함
*
* 테스트 시나리오
* 방법1) TestServlet.java소스에서 오른쪽 버튼을 눌러 실행시킴
* 방법2) 브라우저 주소창에 http://localhost:9000/test/test.do 요청
*/
res.sendRedirect("./getMemberList.jsp");
// String cTime = tDao.testDate();
// logger.info("today: " + cTime);
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doService(req, res);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doService(req, res);
}
}
<MyBatis, Servlet, JSP프로젝트 - web.xml에 TestServlet추가>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
<!--
web.xml(배치서술자 Deployment Descriptor)은 톰캣에서 제공해준다 -> 위치는 WEB-INF 아래
서버가 처음 로딩 시 web.xml 파일을 읽어들여 환경설정에 대해 어플리케이션을 배치하게 됨
-->
<!-- context-param에 등록한 정보는 톰캣서버가 기동할 때 생성되서 서버가 죽을때까지 쭉 기억한다 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4.properties</param-value>
</context-param>
<!--
자바로 웹서비스X / 서블릿은 가능 -> URL을 적을 수 있어서 -> xml에 등록가능(URL사용위해 서블릿을 배치)
서블릿과 서블릿매핑은 항상 같이있어야한다
URL을 등록(url-pattern) - URL이 있어야 요청할 수 있음
servlet보다 servlet-mapping을 먼저 읽는다
-->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.mvc.controller.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test/test.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.day1.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/day1/hello.kh</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DeptServlet</servlet-name>
<servlet-class>com.day1.DeptManager</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeptServlet</servlet-name>
<url-pattern>/jEasyUI/dept/insertAction.do</url-pattern>
</servlet-mapping>
</web-app>
<!--
Deployment Descriptor 배치서술자 spring maven방식 빌드 -> pom.xml파일에 등록
web.xml문서를 수정하면 반드시 서버를 내렸다가 다시 기동할 것(주의!)
-->
<MyBatis, Servlet, JSP프로젝트 - test.xml>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.mapper.TestMapper">
<!-- 현재날짜 가져오는 쿼리문 -->
<select id="testDate" parameterType="java.util.HashMap"
resultType="java.lang.String">
SELECT to_char(sysdate, 'YYYY-MM-DD HH:MI:SS') FROM dual
</select>
<!-- 회원정보 가져오는 쿼리문 -->
<select id="getBookMember" parameterType="java.util.HashMap"
resultType="map">
SELECT mem_no, mem_id, mem_pw, mem_name
FROM book_member
WHERE mem_id = #{mem_id}
OR mem_pw = #{mem_pw}
</select>
</mapper>
<MyBatis, Servlet, JSP프로젝트 - TestDao>
package com.mvc.dao;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import com.util.MyBatisCommonFactory;
public class TestDao {
Logger logger = Logger.getLogger(TestDao.class);
MyBatisCommonFactory mcf = new MyBatisCommonFactory();
/**
* 회원정보 가져오기
*
* @return
*/
public List<Map<String, Object>> getBookMember() {
List<Map<String, Object>> mList = null;
SqlSessionFactory sqlSessionFactory = null;
SqlSession sqlSession = null;
try {
sqlSessionFactory = mcf.getSqlSessionFactory();
sqlSession = sqlSessionFactory.openSession();
Map<String, Object> pMap = new HashMap<>();
pMap.put("mem_id", "tomato");
pMap.put("mem_pw", "123");
// 파라미터로 pMap(tomato(String), 123(String)) 넘기기
mList = sqlSession.selectList("getBookMember", pMap);
logger.info(mList); // 3건 조회(조건으로 or 썼기에)
/*
* [{MEM_ID=tomato, MEM_PW=123, MEM_NAME=토마토, MEM_NO=1}
* , {MEM_ID=kiwi, MEM_PW=123, MEM_NAME=키위, MEM_NO=2}
* , {MEM_ID=banana, MEM_PW=123, MEM_NAME=바나나, MEM_NO=3}]
*/
} catch (Exception e) {
e.printStackTrace();
}
return mList;
};
/**
* 현재시간 가져오기
*
* @return
*/
public String testDate() {
String cTime = null;
SqlSessionFactory sqlSessionFactory = null;
SqlSession sqlSession = null;
try {
sqlSessionFactory = mcf.getSqlSessionFactory();
sqlSession = sqlSessionFactory.openSession();
Map<String, Object> pMap = new HashMap<>();
pMap.put("mem_id", "tomato");
pMap.put("mem_pw", "123");
cTime = sqlSession.selectOne("testDate", pMap);
} catch (Exception e) {
e.printStackTrace();
}
return cTime;
}
}
<MyBatis, Servlet, JSP프로젝트 - MyBatisCommonFactory>
package com.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
public class MyBatisCommonFactory {
Logger logger = Logger.getLogger(MyBatisCommonFactory.class);
// MyBatis는 자바와 오라클 서버 사이에 위치하면서 DB연계를 지원하는 매핑서비스이다.
// 물리적으로 떨어져있는 서버와의 통신을위해 드라이버 클래스 로딩, 연결 통로 확보 코드가 반복적으로 작성됨
// 이것을 전담하는 SqlSessionFactory를 지원하고있음(MyBatis가)
// 스프링에선 SqlSessionFactoryBean
public SqlSessionFactory sqlSessionFactory = null;
//SqlSessionFactory객체를 생성해 주는 메소드 입니다.
public void init() {
try {
// xml문서에 드라이버 클래스명, URL주소, 계정정보 담음
// 더하여 쿼리문을 xml문서에 따로 등록해서 관리하므로
// 쿼리문을 담고있는 xml문서의 물리적인 위치를 설정문서에 등록함
String resource = "com\\util\\MyBatisConfig.xml";
System.out.println("resource");
Reader reader = Resources.getResourceAsReader(resource);
logger.info("before sqlSessionFactory : "+sqlSessionFactory);
// 싱글톤패턴에서 객체 생성하기
if(sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
}
logger.info("after sqlSessionFactory : "+sqlSessionFactory);
System.out.println("after sqlSessionFactory : "+sqlSessionFactory);
} catch (Exception e) {
logger.info("[[ Exception ]] "+e.toString());
System.out.println("[[ Exception ]] "+e.toString());
}
}// end of init
public SqlSessionFactory getSqlSessionFactory() {
System.out.println("11");
init();
return sqlSessionFactory;
}
public static void main(String[] args) {
System.out.println("test");
MyBatisCommonFactory mcf = new MyBatisCommonFactory();
mcf.getSqlSessionFactory();
}
}
<MyBatis, Servlet, JSP프로젝트 - MyBatisConfig에 text.xml 추가>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver"
value="oracle.jdbc.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:orcl11" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/mapper/test.xml" />
<mapper resource="com/util/book.xml" />
<mapper resource="com/util/member.xml" />
</mappers>
</configuration>
<MyBatis, Servlet, JSP프로젝트 - webapp/test에 있는 getMemberList.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록</title>
</head>
<body>
<h3>회원목록</h3>
</body>
</html>
<마임타입 - MimePlainServlet>
package com.day1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 서블릿은 java라도 브라우저에 출력할 수 있다 - 화면을 그리는데 서블릿을 사용함(마임타입때문에 가능!)
*/
@WebServlet("/plain.do") // 웹에서 접근 가능한 맵핑 주소 설정
public class MimePlainServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/plain;charset=UTF-8");
// 메소드를 통해서 객체 생성하는 코드
PrintWriter out = res.getWriter();
out.print("<h2>안녕하세요</h2>"); // 마임타입이 plain이면 태그 안먹음!
}
}
<마임타입 - MimeHtmlServlet>
package com.day1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 서블릿은 java라도 브라우저에 출력할 수 있다 - 화면을 그리는데 서블릿을 사용함(마임타입때문에 가능!)
*/
@WebServlet("/html.do") // 웹에서 접근 가능한 맵핑 주소 설정
public class MimeHtmlServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
// 메소드를 통해서 객체 생성하는 코드
PrintWriter out = res.getWriter();
out.print("<h2>안녕하세요</h2>"); // 마임타입 html 이면 태그잘됨!
}
}
<마임타입 - MimeJSONServlet>
package com.day1;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.google.gson.Gson;
/*
* 서블릿은 java라도 브라우저에 출력할 수 있다 - 화면을 그리는데 서블릿을 사용함(마임타입때문에 가능!)
*/
@WebServlet("/json.do") // 웹에서 접근 가능한 맵핑 주소 설정
public class MimeJSONServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("application/json;charset=UTF-8");
// 메소드를 통해서 객체 생성하는 코드
PrintWriter out = res.getWriter();
List<Map<String, Object>> mList = new ArrayList<>();
Map<String, Object> rMap = new HashMap<>();
rMap.put("mem_id", "tomato");
rMap.put("mem_pw", "111");
rMap.put("mem_name", "토마토");
mList.add(rMap);
rMap = new HashMap<>();
rMap.put("mem_id", "kiwi");
rMap.put("mem_pw", "222");
rMap.put("mem_name", "키위");
mList.add(rMap);
rMap = new HashMap<>();
rMap.put("mem_id", "banana");
rMap.put("mem_pw", "333");
rMap.put("mem_name", "바나나");
mList.add(rMap);
// out.print(mList); -> 이렇게 그냥출력하면 json형식x(:이 아니라 =으로 출력됨!)
Gson g = new Gson();
String temp = g.toJson(mList);
out.print(temp); // Gson사용해 Json형식으로 출력되게함
}
}
<마임타입 - MimeXMLServlet>
package com.day1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 서블릿은 java라도 브라우저에 출력할 수 있다 - 화면을 그리는데 서블릿을 사용함(마임타입때문에 가능!)
*/
@WebServlet("/xml.do") // 웹에서 접근 가능한 맵핑 주소 설정
public class MimeXMLServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/xml;charset=UTF-8");
// 메소드를 통해서 객체 생성하는 코드
PrintWriter out = res.getWriter();
StringBuilder sb = new StringBuilder();
sb.append("<records>");
sb.append("<record>");
sb.append("<mem_id>tomato</mem_id>");
sb.append("<mem_pw>111</mem_pw>");
sb.append("<mem_name>토마토</mem_name>");
sb.append("</record>");
sb.append("<record>");
sb.append("<mem_id>kiwi</mem_id>");
sb.append("<mem_pw>222</mem_pw>");
sb.append("<mem_name>키위</mem_name>");
sb.append("</record>");
sb.append("<record>");
sb.append("<mem_id>banana</mem_id>");
sb.append("<mem_pw>333</mem_pw>");
sb.append("<mem_name>바나나</mem_name>");
sb.append("</record>");
sb.append("</records>");
out.print(sb.toString());
}
}
<servlet, jsp 연결(세션 활용 값 넘기기) - MimeHtmlServlet2>
package com.day1;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
/*
* 서블릿은 java라도 브라우저에 출력할 수 있다 - 화면을 그리는데 서블릿을 사용함(마임타입때문에 가능!)
*
* <서블릿을 경유하여 응답페이지를 jsp로 가져가는 실습>
* 처음부터 mimeHtmlResult.jsp를 직접 호출하는 것이 아니라,
* 아래에있는 url, 즉 /day1/html2.do로 요청했을 때
* 아래의 코드 res.sendRedirect("./mimeHtmlResult.jsp");를 만나서
* 주소창이 변경되는 것을 관찰한 뒤 서블릿에서 세션에 담은 정보를
* mimeHtmlResult.jsp 페이지에서 유지되는지 확인하는 실습이다
*/
@WebServlet("/day1/html2.do") // 웹에서 접근 가능한 맵핑 주소 설정
public class MimeHtmlServlet2 extends HttpServlet {
Logger logger = Logger.getLogger(MimeHtmlServlet.class);
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
logger.info("doGet 호출");
// String
String myName = new String("이순신");
// int
int age = 35;
// Map
Map<String, Object> rMap = new HashMap<>();
rMap.put("mem_id", "tomato");
rMap.put("mem_pw", "111");
rMap.put("mem_name", "토마토");
// List<Map>
List<Map<String, Object>> mList = new ArrayList<>();
if(rMap != null) {
rMap.clear();
}
rMap = new HashMap<>();
rMap.put("mem_id", "tomato");
rMap.put("mem_pw", "111");
rMap.put("mem_name", "토마토");
mList.add(rMap);
rMap = new HashMap<>();
rMap.put("mem_id", "kiwi");
rMap.put("mem_pw", "222");
rMap.put("mem_name", "키위");
mList.add(rMap);
rMap = new HashMap<>();
rMap.put("mem_id", "banana");
rMap.put("mem_pw", "333");
rMap.put("mem_name", "바나나");
mList.add(rMap);
// 세션을 이용해 이름값을 jsp로 넘겨줌
HttpSession session = req.getSession();
session.setAttribute("myName", myName);
session.setAttribute("age", age);
session.setAttribute("rMap", rMap);
session.setAttribute("mList", mList);
res.sendRedirect("./mimeHtmlResult.jsp");
}
}
<servlet, jsp 연결(세션 활용해 값 넘기기) - mimeHtmlResult.jsp>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Map"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MimeHtmlServlet2 응답페이지</title>
</head>
<body>
<h2>MimeHtmlServlet2 응답페이지</h2>
<%
// 스크립틀릿 안에서 선언한 변수는 지역변수이다
// a.jsp -> a_jsp.java로 변환됐을때 service메소드 안에 들어가니까
String myName = null;
myName = (String) session.getAttribute("myName");
out.print(myName);
out.print("<hr>");
Integer age = null;
age = (Integer) session.getAttribute("age");
out.print(age);
out.print("<hr>");
Map<String, Object> rMap = (Map<String, Object>) session.getAttribute("rMap");
// NullPointerException 방어코드
if (rMap != null) {
Object keys[] = rMap.keySet().toArray();
for (int i = 0; i < keys.length; i++) {
out.print(rMap.get(keys[i]));
out.print("<br />");
}
out.print("<hr>");
}
// getAttribute의 리턴타입은 Object이다 <-> getParameter의 리턴타입은 String이다
List<Map<String, Object>> mList = (List<Map<String, Object>>) session.getAttribute("mList");
if (mList != null) {
for (int i = 0; i < mList.size(); i++) {
Map<String, Object> tempMap = mList.get(i);
out.print(tempMap.get("mem_id") + ", " + tempMap.get("mem_pw") + ", " + tempMap.get("mem_name"));
out.print("<br />");
}
out.print("<hr>");
}
%>
</body>
</html>
'국비학원 > 수업기록' 카테고리의 다른 글
국비 지원 개발자 과정_Day58 (0) | 2023.02.20 |
---|---|
국비 지원 개발자 과정_Day57 (0) | 2023.02.17 |
국비 지원 개발자 과정_Day55 (1) | 2023.02.15 |
국비 지원 개발자 과정_Day54 (1) | 2023.02.14 |
국비 지원 개발자 과정_Day53 (1) | 2023.02.13 |
댓글