본문 바로가기

IT&코딩/국비지원

Servlet - 1 (설명, no_frontcontroller)

728x90
반응형

■ Servlet 

 

□ 설명

 

### web client ---------------------------- 웹서버
			.html(정적)
				
### web client ---------------------------- 웹서버 -- 동적인처리
		.html
				
동적인 처리를 하기 위해서는 별도처리가 필요하다.
이때 사용하는 것이 자바 - 이런 자바프로그램을 servlet이라고 하고
Thread를 사용하여 동작한다.

cf. applet, servlet

### 서블릿 컨테이너 (서블릿 관리자)
- 요청이 들어오면 Thread 생성
- 서블릿의 life-cycle 관리 (메모리로딩, 가비지컬렉션)
- jsp 진행을 지원
- tomcat(jsp 컨테이너도 됨)

cf. 정적처리 : apache
	동적처리 : tomcat, web logic, web sphere
	
### 사용방법

javascript ==> html + script
jsp ==> html + 자바
서블릿 ==> 자바 + html

outprint("<h1>안녕서블릿</h1>")

### MVC1 vs MVC2

1) MVC1

view : jsp
control : jsp

2) MVC2
view : jsp
control : servlet(java, 웹자바)

- 객체사용시
jsp : 9개 내장객체(out, request, response...)
servlet : page는 this로 쓸 수 있지만 request는 HttpServletRequest 클래스 사용(HttpServletRequest req)
			session은 HttpSession ses1, HttpSession session	

- 서블릿의 실행원리

servlet 실행을 request하면 servlet container는 thread를 띄워 servlet이 실행됨
다시 request하면 또 하나의 thread를 띄워 servlet이 실행됨 (참고 .cgi)

- 서블릿의 상세 실행원리

* 서블릿 실행 request가 들어옴
* 웹서버가 서블릿컨테이너에게 서블릿 실행을 request
* 서블릿 컨테이너가 HttpServletRequest, HttpServletResponse 객체를 각각 생성 후 thread를 띄워 servlet이 실행됨.
(이때 서블릿 최초요청시 init() 메소드와 자바의 main() 역할과 유사한 요청담당통로인 service()가 호출되고
get/post 방식에 따라 doGet(), doPost()가 호출된다. 단, 서블릿 재요청시 이미 서블릿 객체가 생성되어 있으므로
service() 메소드부터 수행된다)

(cf) init()을 선택하고 init() 메소드 안에 sysout("나는 초기치")라고 입력하고 실행하면 "나는 초기치" 글자가 console에 출력되는 것을 확인

* 실행 후 thread가 종료되고 결과는 웹서버를 거쳐 클라이언트로 전송되며 request, response 객체가 소멸된다.

===========================================================================
- 서블릿의 life cycle

[참고] init() service() destroy() 메소드 비교

* init() : 서블릿 최초 요청시에 한번만 호출 가동
* service() : 서블릿이 요청될 때마다 호출 가동
* destroy() : 컨테이너 종료시에, 서블릿 객체가 메모리에서 소멸될 경우

do you remember? : 자바에서 생성자--처리--소멸자.

### 서블릿 작성하기

* (1) web.xml 활용 : XML 문법에 맞추어야 하기 때문에 조금 어렵다, 전통적인 방법

* (2) annotation : @ 기호 사용, 작성이 쉽다, web.xml이 필요없다. 

Dynamic Web Project 생성
이름 입력하고 생성
next 클릭 후 상단에 src와 하단에 build\classes 확인
next 클릭 후 web.xml 체크 후 finish		

### 서블릿 만들기

처음 만든 HelloServlet은 서블릿.java 마우스 우클릭하여 직접 실행
추가로 index.jsp, Sungjuk.java 서블릿 등을 만든 후, index.jsp를 실행

 


 

■ HelloServletSungjuk - 성적 프로그램 서블릿 기본

 

□ com.sungjuk.student

 

* Sungjuk.java

 

package com.sungjuk.student;
// 일반적으로 com.(회사이름).(프로젝트 이름)
// com.mycompany.sawon
// spring 사용을 대비하여
// 패키지명 맨뒤 이름을 중복 사용x

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;

/**
 * Servlet implementation class Sungjuk
 */
// url에서 http://localhost:8080~ /Sungjuk 이름으로 가동되면 이곳을 찾아온다.
// 전통젖ㄱ 방법으로는 web.xml에 /Sungjuk에 해당되는 서블릿을 찾아가라고 기록함
// (url mapping : /Sungjuk)

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html; charset=UTF-8"); // 한글처리
		response.getWriter().append("Served at: ").append(request.getContextPath());
		// response.getWriter()를 jsp로 비교하면 out.println()
		// 서블릿에서 out.println()를 직접 사용할 수 있는가? - yes
		PrintWriter out = response.getWriter();
		out.println("<h1>방가방가 서블릿</h1>");
		out.println("<h1>방가방가 서블릿</h1>");
		out.println("<h1>방가방가 서블릿</h1>");
		
		// 여기서 필요한 것은 서블릿을 직접 실행하기보다는 index.jsp 등을 만들어서 실행하고
		// 그리고 나서 서블릿을 찾아가는 형태
	
	}

	/**
	 * @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); // 메소드 호출문 2형식
				// 정의문은 위에 있음. 찾아갈 때 request, response 인자를 가지고 가기 때문에 실행
		
		// 그렇다면 지금 이렇게 한 코딩이 MVC2 방식입니까?
		// MVC2 방식은
		// 입력(.html, .jsp) - controller(servlet) - 출력(.jsp)
		// 아직은 아니다. 여기까지는 입력 - controller까지의 단계
		
		// remember
		// RequestDistpatcher rd1 = request.getRequestDispatcher("./jspview/aa.jsp");
		// rd1.forward(request, response);
		// 여기서 aa.jsp가 출력 view하는 파일, jspview는 폴더
	
	}

}

 

□ jsp 파일

 

* index.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>

<!-- index.jsp -->

<body>

	지금 index.jsp를 가동하여 서블릿을 찾아가는 방법이<br>
	기본형식<br><br>
	만일 mvc2 형식이라면 서블릿(즉, control)을 찾아감<br>
	그러므로 action에는 서블릿 이름(/Sungjuk)을 사용해야 한다.
	당연히 실행은 index.jsp<br>
	<form action="Sungjuk" method="post">
		<input type="submit" value="가자서버로">
	</form>
	
	<pre>
		<h2>
		여기서 질문
		분명 method는 post 방식인데 현재 서블릿의 소스 작성은 deGet()에 되어있음.
		
		</h2>
	</pre>
	
</body>
</html>

 


 

■ HelloServletSungjuk - 성적 프로그램 서블릿 기본

 

□ com.mycompany.hakjum

 

* Hakjum.java

 

package com.mycompany.hakjum;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 Hakjum
 */
@WebServlet("/Hakjum") // 서블릿 이름을 Hakjum.java로 하면 이것이 생긴다.
public class Hakjum extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Hakjum() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// response.getWriter().append("Served at: ").append(request.getContextPath());
		
		doPost(request, response); // post로 가자
		
	}

	/**
	 * @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);
		// 참고) post 안에 쓰지 않고 다른 데서 기록하려면 kaja() 등을 사용해서 다른 데서 코딩할 수 있다.
		// 여기는 controller ==> business logic(계산, 판단)
		
		request.setCharacterEncoding("UTF-8"); // post 방식, 한글처리
		response.setCharacterEncoding("UTF-8"); //
		response.setContentType("text/html; charset=UTF-8");
		
		String irum = request.getParameter("irum");
		String jum1 = request.getParameter("jum");
		int jum = Integer.parseInt(jum1);
		

		String kaja = null;
		
		if(jum >= 90){
			kaja = "A.jsp";
		} else if(jum >= 80){
			kaja = "B.jsp";
		} else if(jum >= 70){
			kaja = "C.jsp";
		} else if(jum >= 60){
			kaja = "D.jsp";
		} else{
			kaja = "F.jsp";
		}
		
		// =================== 여기까지가 controller ===================
		// controller는 길어지게 되므로 별도 service logic 가동;
		
		// presentation logic
		
		RequestDispatcher rd1 = request.getRequestDispatcher("./jspview/" + kaja);
		rd1.forward(request, response);
		
		// chain 형태로 한 줄로 하면
		// request.getRequestDispatcher("./jspview/" + kaja).forward(request, response);
	}

}

 

□ jsp 파일

 

* index.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form method="post" action="Hakjum"> <!-- 서블릿으로 보냄. Hakjum.java를 만들어야 함 -->
	이름 <input type="text" name="irum"><br>
	점수입력 <input type="text" name="jum"><br>
	<input type="submit" value="가자서버로">
	<input type="reset" value="취소">
</form>

</body>
</html>

 

□ jspview/A.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- webapp/jspview/A.jsp -->    
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>${param.irum }님의 점수는 ${param.jum }이시군요</h1>
<h1>${param.irum }님의 학점은 A학점입니다.</h1>
<a href="index.jsp">입력화면으로</a>
</body>
</html>

 

다른 학점도 이와 같은 방식으로 각각 다른 파일로 생성.

 


 

■ MVC2_no_frontcontroller

 

□ TelInfoDBConn

 

* TelInfoDBConn.java

 

package TelInfoDBConn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TelInfoDBConn {
	
	private Connection con; // 접속객체 선언

	public Connection getConnection() {
		return con;
	} 
	
	public TelInfoDBConn() // 생성자(default) 
			throws ClassNotFoundException, SQLException {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		// 오라클 드라이버 메모리로딩 선언
		
		con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
	}
}

 

□ TelInfoVO

 

* TelInfoVO.java

 

package TelInfoVO;

import java.util.Date;

public class TelInfoVO {

	private int id;
	private String name;
	private String tel;
	private Date d; 
	
	public TelInfoVO() {
		
	}

	public TelInfoVO(int id, String name, String tel, Date d) {
		this.id = id;
		this.name = name;
		this.tel = tel;
		this.d = d;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public Date getD() {
		return d;
	}

	public void setD(Date d) {
		this.d = d;
	}
	
}

□ TelInfoDAO

 

* TelInfoDAO.java

 

package TelInfoDAO;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import TelInfoDBConn.TelInfoDBConn;
import TelInfoVO.TelInfoVO;

public class TelInfoDAO {
	
	private Connection con;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	// 접속을 위해서
	// 어떤 jsp에서 new TelInfoDAO()하면 여기로 옴(인자없는 생성자를 찾아옴)
	public TelInfoDAO() throws ClassNotFoundException, SQLException {
		con = new TelInfoDBConn().getConnection();
	}
	
	// 사원명단 천제 검색
	public ArrayList<TelInfoVO> getAllInfo() throws SQLException{
		
		ArrayList<TelInfoVO> tiarray= new ArrayList<TelInfoVO>();
		String sql = "select * from TelTable5 order by id";
		pstmt = con.prepareStatement(sql);
		rs = pstmt.executeQuery();
		
		while(rs.next()) {
			
			int id = rs.getInt("id");
			String name = rs.getString("name");
			String tel = rs.getString("tel");
			Date d = rs.getDate("d");
			
			TelInfoVO tv = new TelInfoVO(id, name, tel, d); // VO 객체 생성
			tiarray.add(tv); // ArrayList 컬렉션 넣기 작업
		}
		
		return tiarray;		
	} // getAllInfo()-end
	
	public boolean insertInfo(int id, String name, String tel, String d) {
		String sql = "insert into teltable5 values (?, ?, ?, TO_DATE(?, 'YYYY-MM-DD'))";
		
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, id);
			pstmt.setString(2, name);
			pstmt.setString(3, tel);
			pstmt.setString(4, d);
			pstmt.executeUpdate();
		} catch(SQLException e) {
			e.printStackTrace();
			System.out.println("insert Exception");
			return false;
		}
		return true;
	} // insert_nametel-end
	
	public TelInfoVO getInfo(String name1) throws SQLException {
		
		TelInfoVO tv = null;
		String sql = "select * from TelTable5 where name = ?";
		
		pstmt = con.prepareStatement(sql);
		pstmt.setString(1, name1);
		rs = pstmt.executeQuery();
		
		if(rs.next()) {
			
			int id = rs.getInt(1);
			String name = rs.getString(2);
			String tel = rs.getString(3);
			Date d = rs.getDate(4);
			tv = new TelInfoVO(id, name, tel, d);
		} else {
			tv = null; // tv 객체 참조변수에 null
		}
		return tv;
	} // search_nametel
	
	// 해당 이름 정보 DB에서 삭제
	public boolean deleteInfo(String name) {
		
		String sql = "delete from TelTable5 where name = ?";
		
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.executeUpdate();
		} catch(SQLException e) {
			e.printStackTrace();
			System.out.println("delete Exception");
			return false;
		}
		return true;
		
	}
	
	// 해당 이름의 전화번호 정보 수정
	public boolean update_nametel(int id1, String name1, String tel1, String d1, String name2) {
		
		String sql="update teltable5 set id=?, name=?, tel=?, D=TO_DATE(?, 'YYYY-MM-DD') where name = ?";
		
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, id1);
			pstmt.setString(2, name1);
			pstmt.setString(3, tel1);
			pstmt.setString(4, d1);
			pstmt.setString(5, name2);
			pstmt.executeUpdate();
		} catch(SQLException e) {
			System.out.println("update Exception");
			return false;
		}
		return true;
		
	}
	
}

 

□ com.mycompany.telsawon

 

* Telallview.java

 

package com.mycompany.telsawon;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
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 TelInfoDAO.TelInfoDAO;
import TelInfoVO.TelInfoVO;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String kaja = null;
		// 계산 및 판단 즉, business logic은 서블릿에서 함.
		TelInfoDAO tidao1 = null;
		ArrayList<TelInfoVO> alist1 = null;
		
		try {
			tidao1 = new TelInfoDAO();
			alist1 = tidao1.getAllInfo();
		} catch(ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		// 컬렉션에 있는 출력은 view에서 함. getAllinfo.jsp로 다시 보낼 것
		// 보낼 때는 값을 가지고 가야 함. scope 사용. alist1을 넘길 것
		
		request.setAttribute("alist1", alist1);
		kaja = "getAllinfo.jsp";
		
		RequestDispatcher rd1 = request.getRequestDispatcher(kaja); // getAllinfo.jsp
		rd1.forward(request, response);
	}

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

}

 

* Telinsert.java

 

package com.mycompany.telsawon;

import java.io.IOException;
import java.sql.SQLException;

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

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		TelInfoDAO td1 = null;
				
		try {
			td1 = new TelInfoDAO();
		} catch(ClassNotFoundException | SQLException e) {
			e.printStackTrace();		
		}
		
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		String tel = request.getParameter("tel");
		String d = request.getParameter("d");
		
		Boolean b = td1.insertInfo(id, name, tel, d);
		
		if(b) {
			request.setAttribute("result1", "성공");
		} else {
			request.setAttribute("result1", "실패");
		}
	
		// ========== 여기까지가 business logic ==========
		
		RequestDispatcher rd1 = request.getRequestDispatcher("result.jsp");
		rd1.forward(request, response);	
	}
}

 

* Telsearchone.java

 

package com.mycompany.telsawon;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
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 TelInfoDAO.TelInfoDAO;
import TelInfoVO.TelInfoVO;

/**
 * Servlet implementation class Telsearchone
 */
@WebServlet("/Telsearchone")
public class Telsearchone extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Telsearchone() {
        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.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name");
		
		String kaja = null;
		TelInfoVO tv1 = null;
		TelInfoDAO td1;
		
		try {
			td1 = new TelInfoDAO();
			tv1 = td1.getInfo(name); // 1명에 대한
		} catch(ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		
		request.setAttribute("tv1", tv1);
		
		kaja = "getOneinfo.jsp"; // tv 객체와 함께 jsp;
		RequestDispatcher rd1 = request.getRequestDispatcher(kaja);
		rd1.forward(request, response);
		
	}

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

}

 

* TelDelete.java

 

package com.mycompany.telsawon;

import java.io.IOException;
import java.sql.SQLException;

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

@WebServlet("/TelDelete")
public class TelDelete extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TelDelete() {
        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.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name");
		// System.out.println(name);
		Boolean b1 = false;
		
		try {
			TelInfoDAO td1 = new TelInfoDAO();
			b1 = td1.deleteInfo(name);
		} catch(ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		
		if(b1) {
			request.setAttribute("result1", "삭제성공");
		} else {
			request.setAttribute("result1", "삭제실패");
		}
		
		// result.jsp = 삭제 성공 or 실패를 출력하는 경우 모두 result.jsp가 담당
		RequestDispatcher rd1 = request.getRequestDispatcher("result.jsp");
		rd1.forward(request, response);
		
	}

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

}

 

* Telupdate.java

 

package com.mycompany.telsawon;

import java.io.IOException;
import java.sql.SQLException;

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

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 전체수정이 가능하도록 만들어놓았음 // DAO의 update_nametel
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		TelInfoDAO td1 = null;
		
		// 전체칼럼 수정이 가능, 그러므로 다 넘겨받음
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		String tel = request.getParameter("tel");
		String d = request.getParameter("d");
		// 위 4개는 수정된 경우라고 생각해야 함
		
		// 수정은 원래 이름인 경우 조건에서 수정이 이루저니는데 원래 이름은 hidden 이름인 name2에 남아있음.
		
		String name2 = request.getParameter("name2");
		
		try {
			td1 = new TelInfoDAO();
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} 
		
		System.out.println(name2 + ", " +  name); // 원래 이름과 원본 이름 대조
		Boolean b1 = td1.update_nametel(id, name, tel, d, name2);
		
		if(b1) {
			request.setAttribute("result1", "수정성공");
		} else {
			request.setAttribute("result1", "수정실패");
		}
		
		RequestDispatcher rd1 = request.getRequestDispatcher("result.jsp");
		rd1.forward(request, response);
	}

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

}

 

□ jsp 파일

 

* getAllinfo.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    
<!-- getAllinfo.jsp -->    

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- input.jsp --- controller(서블릿) --- output.jsp -->
<!-- 이번에는 input과 output을 합쳐보자. -->
<!-- lib 폴더에 4개의 jar 넣고 시작 -->

<table border="1">
	<tr>
		<td colspan="4">
			<form action="Telallview">
				<input type="submit" value="가자-모두보기"> <!-- 서블릿으로 일단 가자 -->
			</form>
		</td>
	</tr>
	<tr>
		<td>사번</td>
		<td>이름</td>
		<td>전화</td>
		<td>입사일</td>
	</tr>
	<c:forEach var="i" items="${requestScope.alist1 }">
		<tr>
			<td>${i.id }</td>
			<td><a href="Telsearchone?name=${i.name }">${i.name }</a></td>
			<td>${i.tel }</td>
			<td>${i.d }</td>
		</tr>
	</c:forEach>
</table>

<a href="SawonInsert.jsp">[입력]</a>

</body>
</html>


<!--  
	spring은 여러개의 controller 방법을 사용 + 총 매니저(controller)를 두고 사용
	web은 총 매니저 중심 + 여러개의 controller는 서비스(비서)가 수행하도록 함.
-->

 

* getOneinfo.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- getOneinfo.jsp -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>한명 출력</h1>
<form action="Telupdate">
	<table border="1" style="border-collapse:collapse;">
		<tr>
			<th>사번</th>
			<th>이름</th>
			<th>전화번호</th>
			<th>입사일</th>
		</tr>
		<tr>
			<!-- 입출력이 가능한 상태로 -->
			<td><input type="text" name="id" value="${tv1.id }"></td>
			<td><input type="text" name="name" value="${tv1.name }"></td>
			<td><input type="text" name="tel" value="${tv1.tel }"></td>
			<td><input type="text" name="d" value="${tv1.d }"></td>
		</tr>
		<tr>
			<td colspan="4">
				<input type="submit" value="가자-수정">
				<input type="reset" value="수정취소">
			</td>	
		</tr>
	</table>
	<!-- 수정할 경우 수정하는 작업으로 가야 하는데 어떤 이름을 수정할지를 알려줘야 함 -->
	<input type="hidden" value="${tv1.name }" name="name2">

</form>
<a href="Telallview">[모두보기]</a>
<a href="TelDelete?name=${tv1.name}">[삭제]</a> <!-- 삭제를 위해 이름을 넘겨줌 -->
</body>
</html>

 

SawonInsert.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- SawonInsert.jsp -->    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>사원 정보 입력</h1>
<form action="Telinsert" method="post">

	<table border="1">
		<tr>
			<td>사번</td>
			<td><input type="text" name="id"></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name"></td>
		</tr>
		<tr>
			<td>전화번호</td>
			<td><input type="text" name="tel"></td>
		</tr>
		<tr>
			<td>입사일</td>
			<td><input type="date" name="d"></td>
		</tr>
		<tr>
			<td colspan="4"><input type="submit" value="추가하자"></td>
		</tr>
	</table>
	
	<a href="Telallview">[모두보기]</a>	
</form>

</body>
</html>

 

* result.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- resulst.jsp -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${result1 }<br>
<a href="Telallview">전체출력</a>

</body>
</html>

 

728x90
반응형

'IT&코딩 > 국비지원' 카테고리의 다른 글

Servlet - 3 (MVC_board)  (0) 2023.06.02
Servlet - 2 (frontcontroller)  (0) 2023.06.02
MVC1 모델 최종 (사원관리 프로그램)  (0) 2023.05.26
JSP, EL, JSTL - 2  (0) 2023.05.26
JSP, EL, JSTL - 1  (0) 2023.05.25