servlet 2 + my batis

2024. 1. 2. 14:44Daily Codig Reminder

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>로그인화면</h1>
<form action="LoginServlet"  method="post">
아이디:<input type="text" name="userid"><br>
비밀번호:<input type="text" name="passwd"><br>
<input type="submit" value="로그인">
</form>
</body>
</html>

 

 

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("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("</body></html>");
	}

	/**
	 * @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);
	}

}

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>로그인화면</h1>
<form action="LoginServlet"  method="post">
아이디:<input type="text" name="userid"><br>
비밀번호:<input type="text" name="passwd"><br>
사과:<input type="checkbox" name="fruit" value="apple"><br>
        바나나:<input type="checkbox" name="fruit" value="banana"><br>
        수박:<input type="checkbox" name="fruit" value="watermelon"><br>
<input type="submit" value="로그인">
</form>
</body>
</html>

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;

/**
 * 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"); //post방식은 이거막으면 안됨
		Map<String,String[]>map= request.getParameterMap();
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		Set<String> keys=map.keySet();
		for(String key : keys) {
			String[] values = map.get(key);
			String mesg="";
			for(String s : values) {
				mesg+= s;
			}
			out.printf(key+"==========="+mesg+"<br>");
		}
		
		out.print("</body></html>");
	}

	/**
	 * @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);
	}

}

 

 

package com.config;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MySqlSessionFactory {
	static SqlSessionFactory sqlSessionFactory= null;
	static {//초기화
		String resource = "com/config/Configuration.xml";  //수정이 필요한 유일한 부분 
		//Configuration.xml의 경로가 바뀔시에 수정이 필요 
		InputStream inputStream= null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
			System.out.println("configuration.xml 로딩 성공 ");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			//파일의 경로가 틀린경우 ioException발생 
			e.printStackTrace();
		}
		 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		 //DriverManager와 비슷한 객체 
	}//end static
	
	//SqlSession 반환
	public static SqlSession getSqlSession() {//
		//    SqlSession session=    MySqlSessionFactory.getSqlSession();
		SqlSession session = sqlSessionFactory.openSession();
		//getConnection의 Connection과 비슷한 기능의 SqlSession객체 생성 리턴 
		return session;
	}
	
}

MySqlSessionFactory

 

<?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>
<!-- 1.jdbc.properties 경로지정
     2. dto alias
     3. 4가지 정보 설정
     4. mapper 설정
     5. MySqlSessionFactory 파일 경로 수정 -->
     <properties resource="com/config/jdbc.properties"/>
     <typeAliases>
     <typeAlias type="com.dto.EmpDTO" alias="EmpDTO"/>
     </typeAliases>
     
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <!-- db 연결 4가지 정보  -->
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${xxx}"/>
      </dataSource>
    </environment>
  </environments>
  <!-- Mapper.xml의 경로 등록 (Mapper.xml파일이 존재해야함 )-->
  <mappers>
    <mapper resource="com/config/EmpMapper.xml"/>
  </mappers>
</configuration>

configuration.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="empMapper">

<!-- sql 삭제해서 맵퍼 작성할 것  -->

	<select id="selectAll" resultType="EmpDTO">
	select empno, ename, job, mgr, to_char(hiredate, 'yyyy-mm-dd') hiredate, sal, comm, deptno
	from emp order by empno desc	
	</select>

<select id="memberAdd" parameterType="EmpDTO">
insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
values ( #{empno}, #{ename}, #{job}, #{mgr}, sysdate, #{sal}, null,null)
</select>

</mapper>

empmapper

 

package com.controller;

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;

import com.dto.EmpDTO;
import com.service.EmpService;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");

		
		String ename=request.getParameter("ename");
		String empno=request.getParameter("empno");
		String job=request.getParameter("job");
		String mgr=request.getParameter("mgr");
		String sal=request.getParameter("sal");
		
		
		EmpDTO dto = new EmpDTO();
		dto.setEmpno(Integer.parseInt(empno));
		dto.setEname(ename);
		dto.setJob(job);
		dto.setMgr(Integer.parseInt(mgr));
		dto.setSal(Integer.parseInt(sal));
		
		EmpService service = new EmpService();
		int n = service.memberAdd(dto);
		
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		if ( n==1) {
			out.print("회웡가입성공");
		}else {
			out.print("회원가입실패");
		}
		out.print("<a href='EmpListServlet'>회원목록보기</a>");
		out.print("</body></html>");
	}

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

}

EmpAddServlet

 

package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.EmpDTO;

public class EmpDAO {

	public List<EmpDTO> select(SqlSession session) {
		
		List<EmpDTO> list = session.selectList("empMapper.selectAll");
		
		return list;
	}

	public int memberAdd(SqlSession session, EmpDTO dto) {
		int num = session.insert("empMapper.memberAdd",dto);
		return num;
	}

	

}

memberadd dao

 

package com.service;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.config.MySqlSessionFactory;
import com.dao.EmpDAO;
import com.dto.EmpDTO;

public class EmpService {
	EmpDAO dao = new EmpDAO();
	
	
	public List<EmpDTO> select() {
		
		SqlSession session = MySqlSessionFactory.getSqlSession();
		List<EmpDTO> list = null;
		
		try {
		list = dao.select(session);
		}finally {
			session.close();
		}
		return list;
	}
	public int memberAdd (EmpDTO dto) {
		SqlSession session = MySqlSessionFactory.getSqlSession();
		int num=0;
		try {
			num= dao.memberAdd(session, dto);
			session.commit();
		} finally {
			session.close();
		}return num;
	}
	

}

service

 

3) initParm의 사용

package com.controller;

import java.io.IOException;
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 InitParamServlet
 */
//@WebServlet("/InitParamServlet")
public class InitParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InitParamServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("InitParameterServlet.doGet");
		//초기 파라미터 얻기
		String userid= getInitParameter("userid");
		String email= getInitParameter("email");
		System.out.println(userid+"\t"+email);
		//null
		Enumeration<String> enu = getInitParameterNames();
		while (enu.hasMoreElements()) {
			String key = enu.nextElement();
			String value = getInitParameter(key);
			System.out.println(">>>"+key+"\t"+value);
			
		}
	}

	/**
	 * @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);
	}

}

Servlet.doGet

a aaa@naver.com

 

package com.controller;

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;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("OtherServlet.doGet");
		//초기 파라미터 얻기
		String userid= getInitParameter("userid");
		String email= getInitParameter("email");
		System.out.println(userid+"\t"+email);
	}

	/**
	 * @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);
	}

}

 

 

<?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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>03_Servlet2_init_param</display-name>
  <servlet>
  <servlet-name>InitParamServlet</servlet-name>
  <servlet-class>com.controller.InitParamServlet</servlet-class>
  <init-param>
  <param-name>userid</param-name>
  <param-value>aaa</param-value>
  </init-param>
  <init-param>
   <param-name>email</param-name>
  <param-value>aaa@naver.com</param-value>
  </init-param>
  </servlet>
  
  <servlet>
  <servlet-name>OtherServlet</servlet-name>
  <servlet-class>com.controller.OtherServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>InitParamServlet</servlet-name>
  <url-pattern>/xxx</url-pattern>
  </servlet-mapping>
  
   <servlet-mapping>
  <servlet-name>OtherServlet</servlet-name>
  <url-pattern>/yyy</url-pattern>
  </servlet-mapping>
 
</web-app>

@webservlet을 없애고 /yyy /xxx 로 사용.

 

3) ContextParam

 

package com.controller;

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

import javax.servlet.ServletContext;
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 InitParamServlet
 */
@WebServlet("/ContextParamServlet")
public class ContextParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ContextParamServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			System.out.println("ContextParameterServlet.doGet");
			
			ServletContext ctx= getServletContext();
			String userid= ctx.getInitParameter("userid");
			String email= ctx.getInitParameter("email");
			System.out.println(userid+"\t"+email);

	}

	/**
	 * @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);
	}

}

Other 에서 실행됨.

OtherServlet.doGet

 

a aaa@naver.com

 

스코프 중요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

가. request 스코프

  • HttpServletRequest API
  • 요청 ~ 응답까지의 Life Cycle을 가짐
  • setAttribute(key, value) 와 getAttribute(key) 메서드 이용

나. session 스코프

  • HttpSession API
  • 브라우저의 Life Cycle을 가짐
  • setAttribute(key, value) 와 getAttribute(key) 메서드 이용

다. application 스코프

  • ServletContext API
  • 웹 어플리케이션에서의 context의 Life Cycle을 가짐
  • setAttribute(key, value) 와 getAttribute(key) 메서드 이용
  • 프로젝트가 끝나기 전까지는 계속~~~~~~~~
package com.controller;

import java.io.IOException;

import javax.servlet.ServletContext;
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;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("request", "홍길동");
		System.out.println("set request :홍길동");
		
		//2 session scope 에 저장, 브라우저에 생명주기와 동일
		HttpSession session = request.getSession();
		session.setAttribute("session","이순신");
		System.out.println("set session: 이순신 ");
		
		//3. application scope
		ServletContext ctx = getServletContext();
		ctx.setAttribute("application", "유관순");
		System.out.println("set application :유관순");
	}//doget함수가 끝나는 순간 연결이 다 끊어짐 따라서 scope에서 불러올수없음

	/**
	 * @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);
	}

}

 

 

package com.controller;

import java.io.IOException;

import javax.servlet.ServletContext;
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;

/**
 * Servlet implementation class GetSc
 * opeServlet
 */
@WebServlet("/GetScopeServlet")
public class GetScopeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1. request scope에서 데이터 get
		String x= (String)request.getAttribute("request");
		System.out.println("GetScopeServlet request===="+x);
		
		//2. session scope에 get
		HttpSession session = request.getSession();
		String x2 =(String)session.getAttribute("session");
		System.out.println("GetScopeServlet session ===="+x2);
		
		//3. application scope 얻기
		ServletContext ctx = getServletContext();
		String x3 =(String)ctx.getAttribute("application");
		System.out.println("GetScopeServlet application====="+x3);
	}

	/**
	 * @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);
	}

}

 

 

set request :홍길동

set session: 이순신

set application :유관순

GetScopeServlet request====null

GetScopeServlet session ====이순신 //브라우저 죽이고 띄우면 null나옴

GetScopeServlet application=====유관순

 

GetScopeServlet application=====유관순

GetScopeServlet request====null

GetScopeServlet session ====null

GetScopeServlet application=====유관순 //서버 죽이지 않는 이상 나옴

 

GetScopeServlet request====null

GetScopeServlet session ====null

GetScopeServlet application=====null// 서버 죽였을 때

 

폼데이터 ⇒ servlet request.getParameter(”key”) : Stirng

실수⇒ (String)request.getAttribute(”password”): 안됨

request.setAttribute(”AAA”,”홍길동”)

⇒(String)request.getAttribute(”AAA”):Object⇒형변환필요

가장많은 실수 request.getParameter(”AAA”) ⇒ 전혀 상관없는 녀석

 

요약:

폼데이터⇒> request.getParameter, request.getParametweValues 만

request.setAttribute=⇒ request.getAttribute만 사용할것

'Daily Codig Reminder' 카테고리의 다른 글

jsp2  (0) 2024.01.04
5장- jsp  (0) 2024.01.04
servlet  (0) 2023.12.31
event  (1) 2023.12.31
DOM, EVENT  (0) 2023.12.24