//Google AdSense

상품 리스트를 만드는데 db에 데이터가 1~ 5까지 담겨있는데 리스트에 자꾸 2~5만 출력되어서 당황했다!

consol에 찍힌 log

01-01 doGet() GControllersec GControllersec.java 02 doPro() GControllersec GControllersec.java /OraMVCMG35SEC/Gli/g_list.ksmart_g<-- RequestURI GControllersec.java /OraMVCMG35SEC<-- contextPath GControllersec.java 14<-- contextPath.length() GControllersec.java /Gli/g_list.ksmart_g<-- command GControllersec.java ----------GControllersec.java---------------- 10-03 /Gli/g_list.ksmart_g if 조건문 통과 04_02 execute GListProAction.java javax.naming.InitialContext@51a7dfaf<-- init BoardDAO() 02 gAllSelect Gdaosec.java jdbc:oracle:thin:@localhost:1521:XE, UserName=DEV35ID, Oracle JDBC driver<-- conn oracle.jdbc.driver.T4CPreparedStatement@55984143<-- pstmt org.apache.tomcat.dbcp.dbcp.DelegatingResultSet@109ad594<-- rs true 쿼리실행결과활용 [Goods [g_code=goods_2, ora_id=id002, g_name=2, g_cate=2, g_price=2, g_color=2, g_size=2, g_date=20/05/08, g_desc=2]]<-alg 쿼리실행결과활용 [Goods [g_code=goods_2, ora_id=id002, g_name=2, g_cate=2, g_price=2, g_color=2, g_size=2, g_date=20/05/08, g_desc=2], Goods [g_code=goods_3, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3]]<-alg 쿼리실행결과활용 [Goods [g_code=goods_2, ora_id=id002, g_name=2, g_cate=2, g_price=2, g_color=2, g_size=2, g_date=20/05/08, g_desc=2], Goods [g_code=goods_3, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3], Goods [g_code=goods_4, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3]]<-alg 쿼리실행결과활용 [Goods [g_code=goods_2, ora_id=id002, g_name=2, g_cate=2, g_price=2, g_color=2, g_size=2, g_date=20/05/08, g_desc=2], Goods [g_code=goods_3, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3], Goods [g_code=goods_4, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3], Goods [g_code=goods_5, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3]]<-alg false<-isRedirect MActionForwardsec.java /glist/g_list.jsp<-path MActionForwardsec.java 11-02 forward 조건문 통과 /glist/g_list.jsp<--forward.getPath() [Goods [g_code=goods_2, ora_id=id002, g_name=2, g_cate=2, g_price=2, g_color=2, g_size=2, g_date=20/05/08, g_desc=2], Goods [g_code=goods_3, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3], Goods [g_code=goods_4, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3], Goods [g_code=goods_5, ora_id=id003, g_name=3, g_cate=3, g_price=3, g_color=3, g_size=3, g_date=20/05/08, g_desc=3]]<- get_alg
Gdao.java
//02 리스트 출력 메서드 선언
		public ArrayList<Goods> gAllSelect() throws SQLException {
			System.out.println("02 gAllSelect Gdaosec.java" );
			//db연결
			conn = ds.getConnection();
			System.out.println(conn + "<-- conn");
			//쿼리준비
			pstmt = conn.prepareStatement("select * from oracle_goods");
			System.out.println(pstmt + "<-- pstmt");
			//쿼리실행
			rs = pstmt.executeQuery();
			System.out.println(rs + "<-- rs");
           	System.out.println(rs.next());
			//쿼리실행결과활용
			alg = new ArrayList<Goods>();
			while(rs.next()) {
				System.out.println("쿼리실행결과활용");
				g = new Goods();
				g.setG_code(rs.getString("G_CODE"));
				g.setOra_id(rs.getString("ORA_ID"));
				g.setG_name(rs.getString("G_NAME"));
				g.setG_cate(rs.getString("G_CATE"));
				g.setG_price(rs.getString("G_PRICE"));
				g.setG_color(rs.getString("G_COLOR"));
				g.setG_size(rs.getString("G_SIZE"));
				g.setG_date(rs.getString("G_DATE"));
				g.setG_desc(rs.getString("G_DESC"));
				alg.add(g);
				System.out.println(alg+"<-alg");
			}
			//db연결종료
			rs.close();
			pstmt.close();
			conn.close();
			return alg;
		}

 

rs.next()를 콘솔에 출력해서 첫번째 줄이 리스트에 안나오는 거였음... 찾아내고 완전 웃겨서 뒤집어졌음

'JSP' 카테고리의 다른 글

[Servlet] filter  (0) 2020.05.13
[Servlet] Servlet  (0) 2020.05.13
MVC Pattern / Servlet  (0) 2020.05.13
java servlet life cycle  (0) 2020.05.08

서블릿 생성하기

package kr.or.ksmart.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 Controller01
 */
@WebServlet("/Controller01")
public class Controller01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Controller01() {
        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());
	}

	/**
	 * @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 kr.or.ksmart.controller;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
		description = "콘트롤러 테스트", 
		urlPatterns = { "*.do" }, 
		initParams = { 
				@WebInitParam(name = "firstParam", value = "초기값확인", description = "초기값")
		})
public class Controller02 extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Controller02() {
        super();
        // TODO Auto-generated constructor stub
    }

	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}

	public void destroy() {
		// TODO Auto-generated method stub
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

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

}

 

서블릿 생성시 eclipse에서 제공하는 기능을 통해 쉽게 서블릿 내부 설정 가능

 


분기처리

package kr.or.ksmart.controller;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet은 HttpServlet 클래스를 상속받아 구현한다.
 * Servlet의 정보(url 맵핑 및 초기 설정값)은 @WebServlet 어노테이션 혹은 web.xml에서 설정할 수 있다.
 * 
 */

@WebServlet(
		description = "콘트롤러 테스트", 
		urlPatterns = { "*.do" }, 
		initParams = { 
				@WebInitParam(name = "firstParam", value = "초기값확인", description = "초기값")
		})
public class Controller02 extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Controller02() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    /**
     * Servlet이 객체화 되었을 때 초기 1회 실행되는 메서드
     * (객체화 되었을 때 -> 1회 처음 호출되었을 때 객체화 됨)
     */
	public void init(ServletConfig config) throws ServletException {
		String firstParam = config.getInitParameter("firstParam");
		System.out.println(firstParam + "<<- Servlet 실행시 초기 1회 실행되는 메서드의 파라미터 ");
	}

	public void destroy() {
		System.out.println("해당 서블릿의 객체가 소멸될 때 호출되는 메서드");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 콘트롤러에서 분기작업하기
		 * HttpServletRequest : 호출에 관련된 정보가 담겨있다.
		 * 
		 */
		
		String uri = request.getRequestURI();
		String contextPath = request.getContextPath();
		//contextPath는 변동 우려가 있으므로 불안한 요소가 된다. 불안요소를 제거하여 분기작업을 한다.
		uri = uri.replace(contextPath, "");
		
		System.out.println(uri + "호출된 uri");
		
		if("/*.do".equals(uri)) {
			//응답코드를 페이지 없는 응답코드로 지정
			response.setStatus(404);
		}else if("/main.do".equals(uri)){
			//forward -> request, response 객체를 getRequestDispatcher에 서술된(인수) 페이지로 위임
			request.setAttribute("myName", "홍길동");
			request.getRequestDispatcher("/main.jsp").forward(request, response);
		}else {
			
			/*
			 * 서블릿 자체에서 화면을 직접 그리기가 어려우므로 포워드의 기술을 활용하여 화면 렌더링을 jsp로 전달
			 * 
			 * 웹 화면에서 필요한 정보 
			 * Encoding, header, content type
			 */
			
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/html");
			
			PrintWriter out = response.getWriter();
			out.println("<meta charaset=\"UTF-8\">");
			out.println("Call My Servlet 내 서블릿 호출");
			out.flush();
			out.close();
		}
	}

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

		doGet(request, response);
	}

}
<%@ 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>

<h1>my name</h1>
<%= request.getAttribute("myName") %>

</body>
</html>

 

확장자를 통해 분기됨을 알 수 있음.

 

 

연결이 정상적으로 되었을 경우의 status는 200.

*.do 페이지가 열렸을 경우 연결이 실패하도록 함.

 


실습

CotrollerEx01.java
package kr.or.ksmart.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;

@WebServlet(
		description = "콘트롤러 분기작업 실습", 
		urlPatterns = { 
				"*.my"
		})
public class CotrollerEx01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
    public CotrollerEx01() {
        super();

    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * 실습1. main.my와 mypage.my 페이지가 있다.
		 * 콘트롤러에서 해당 url을 받아와 view단과 연결하는 코드를 작성하여라.
		 */
		
		String uri = request.getRequestURI();
		String contextPath = request.getContextPath();
		uri = uri.replace(contextPath, "");
		System.out.println(uri+"<<uri");
		
		String forwardPath = null;
		
		if("/main.my".equals(uri)) {
			forwardPath = "/main.jsp";
		}else if("/mypage.my".equals(uri)) {
			forwardPath = "/mypage.jsp";
		} else {
			response.setStatus(404);
		};
		
		if(forwardPath != null) {
			request.getRequestDispatcher("/WEB-INF/views"+forwardPath).forward(request, response);
		};
				
	}

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

}
main.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>

<h1>my name</h1>
<%= request.getAttribute("myName") %>
<a href = "<%=request.getContextPath()%>/mypage.my">mypage</a>
</body>
</html>
mypage.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>
<h1>my page</h1>
<a href = "<%=request.getContextPath()%>/main.my">main</a>
</body>
</html>

*.jsp 파일이 실행되면 안되므로 파일의 경로를 wepcontent >wep-inf 하위로 설정.

경로에서 jsp파일 직접 실행 되지는 않지만 forward를 통해서는 화면이 보여진다.

WebContent/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
response.sendRedirect(request.getContextPath()+"/main.my");
%>

 

index를 생성해 http://로컬호스트:포트번호/프로젝트명/ 으로 접근시 index 페이지가 열리고, index에서 main.my로 접근하도록 리다이렉트. main.my는 컨트롤러에서 forward를 이용해 main.jsp로 request,response 정보를 위임.

'JSP' 카테고리의 다른 글

[Servlet] filter  (0) 2020.05.13
[Model2] 실습하기  (0) 2020.05.13
MVC Pattern / Servlet  (0) 2020.05.13
java servlet life cycle  (0) 2020.05.08

Model 1 > 직관적인 작업으로 작업속도가 빠르지만 같은 코드가 반복되고 분기작업을 하기 애매함.

Model 2

장점

  • 코드간결
  • 유지보수 용이
  • 확장 용이 : 역할을 분리하였기 때문에 조합을 통해 확장하기가 용이함.

단점

  • 초기 설정 작업이 MODEL1 보다 많아 작업 시간 오래 걸린다.
  • 아키텍처에 관련한 이해도 필요 (분기작업에 대한 설계가 필요)
  • 관리할 파일이 많아짐 

Controller : servlet 위에서 url기준으로 분기작업. = front controller

Cotroller>Service>Dao

(FrameWork가 작업을 쉽게 도와줌)

 


Servlet

  • 자바를 사용하여 웹을 만들기 위해 필요한 기술
  • 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램
  • Java Thread를 이용하여 동작한다 (was의 mainmethod 실행후의 thread)
  • 자바로 구현 된 CGI (공통게이트웨이인터페이스)
* CGI (common gateway interface : 공통 게이트웨이 인터페이스)

-공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약

-웹서버는 요청에 의해 응답을 HTML로만 보여주기때문에 HTML만으로는 모든 정보를 다 처리 할 수가 없다. 따라서 요청과 응답에 따른 양방향으로 정보처리 하기 위해서는 외부 프로그램을 수행하여 그 결과를 HTML형태로 보여주는 방식인데 이것을 CGI라고 한다.


-넓은 의미로는 CGI를 수행하는 프로그램을 CGI라고 하기도 한다.

 


서블릿 동작 원리

was > servlet container  : servlet의 객체화 및 종료

요청>request,respose생성>servlet분석>servlet검색(thread)> service >doGet ,doPost() 순환

 


서블릿 생명주기

  • servlet 생명주기는 servlet container에서 관리하며, servlet 생성과 소멸 관리
  • servlet 소멸 후에 Garbage Collection에서 메모리 관리
  • 메서드 실행 순서
    1. init() :  최초 1실행 시 (객체화 시) 실행
    2. sevice() : doGet(), doPost(), toDelete(), toPut()  http환경으로 최적화 되어 분기되어 실행
    3. destroy() :  서블릿 제거 시 실행 1실행 (garbage collection 수행 시)

HttpServlet

  • GenericServlet(추상클래스)을 상속받아 구현이 되었으며, http 환경에 맞도록 최적화(재가공)
  • doGet(), doPost() 메서드가 분기된 클래스직렬화 : 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술

* 직렬화 : 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술

 

'JSP' 카테고리의 다른 글

[Model2] 실습하기  (0) 2020.05.13
[Servlet] Servlet  (0) 2020.05.13
java servlet life cycle  (0) 2020.05.08
MVC model2  (2) 2020.05.07

init () 메소드를 호출하여 초기화.

service () 메소드를 호출 하여 클라이언트의 요청을 처리.

(init 메소드는 처음 한번만 실행되고 이후 service()가 처리.)

destroy () 메소드를 호출하여 종료.

JVM의 가비지 컬렉터에 의해 가비지 수집.

'JSP' 카테고리의 다른 글

[Servlet] Servlet  (0) 2020.05.13
MVC Pattern / Servlet  (0) 2020.05.13
MVC model2  (2) 2020.05.07
200417  (0) 2020.04.17

ActionForward 클래스 통해 생성된 객체 내부 //redirect/forward 결정 경로세팅역할 
주소값: ~~ 
private boolean isRedirect=false; // true: Redirect 또는 false: forward(주소창의경로그대로,실제내용은forward경로의내용) 결정 
private String path=null; 

 

redirect > ?키=값으로 이루어진 데이터만 이동 가능하고, 주소가 변할 경우에 데이터가 사라진다.

forward > redirect보다 대용량의 데이터를 제어할 수 있음

 

 

 

BoardAddAction

ActionForward 클래스 통해 생성된 객체 내부 //redirect/forward 결정 경로세팅역할

주소값: ~~

private boolean isRedirect=true;

// true: Redirect 또는 false: forward(주소창의경로그대로,실제내용은forward경로의내용) 결정

private String path="./BoardList.bo";

 

expression language jhtml

 

oracle model2 분석

 

'JSP' 카테고리의 다른 글

MVC Pattern / Servlet  (0) 2020.05.13
java servlet life cycle  (0) 2020.05.08
200417  (0) 2020.04.17
[JSP + MySQL] 200416 dto dao // select 쿼리 분리  (0) 2020.04.16

select 쿼리 분리

package kr.or.ksmart.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import kr.or.ksmart.driverdb.DriverDB;
import kr.or.ksmart.dto.Member;
	//04_01 수정화면(한명 회원 정보 조회) 메서드 선언
	//return data type, 입력개수, 매개변수 data type, 처리과정 ?
	public Member mSelectforUpdate (String mid) throws ClassNotFoundException, SQLException {
		System.out.println("04 mSelectforUpdate Mdao.java");
		System.out.println(mid);
		
		Member m = null;		
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		DriverDB db = new DriverDB();
		Connection conn = db.driverDbcon();
		System.out.println(conn);		
		pstmt = conn.prepareStatement("select * from tb_member WHERE m_id = ?");
		pstmt.setString(1, mid);
		System.out.println(pstmt + "<-- pstmt");
		rs = pstmt.executeQuery();
		System.out.println(rs + "<-- rs");

		if(rs.next()){
			System.out.println("-------------if 조건문 통과-------------");
			m = new Member();
			m.setM_id(rs.getString("m_id"));
			m.setM_pw(rs.getString("m_pw"));
			m.setM_level(rs.getString("m_level"));
			m.setM_name(rs.getString("m_name"));
			m.setM_email(rs.getString("m_email"));
		
			System.out.println(m.getM_id() + "<- m.setM_id");
			System.out.println(m.getM_pw() + "<- getM_pw");
			System.out.println(m.getM_level() + "<- getM_level");
			System.out.println(m.getM_name() + "<- getM_name");
			System.out.println(m.getM_email() + "<- getM_email");
			System.out.println("-------------if 조건문 끝-------------");
		}
		
		pstmt.close();
		conn.close();
				
		return m;
	}
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page import = "java.sql.SQLException" %>

<%@ page import="kr.or.ksmart.dao.Mdao"%>
<%@ page import="kr.or.ksmart.dto.Member" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/main.css" />
</head>
<body>
<%@ include file="/module/top.jsp" %>
<%@ include file="/module/left.jsp" %>


<%
String send_id = request.getParameter("send_id");
System.out.println(send_id);
System.out.println("-------------수정 화면 코드 시작-------------");
Mdao mdao = new Mdao();
Member m = mdao.mSelectforUpdate(send_id);
System.out.println(m + "m");
System.out.println(m.getM_id() + "getM_id" );
System.out.println(m.getM_pw() + "getM_pw");
System.out.println(m.getM_level() + "getM_level");
System.out.println(m.getM_name() + "getM_name");
System.out.println(m.getM_email() + "getM_email");
System.out.println("-------------이후 화면-------------");
%> 

<%-- 
아이디 : <%= m.getM_id()%><br>
패스워드 : <%=m.getM_pw()%><br>
권한 : <%=m.getM_level()%><br>
이름 : <%=m.getM_name()%><br>
이메일 : <%=m.getM_email()%>
 --%>
<form action="<%= request.getContextPath() %>/mupdate/m_update_pro.jsp" method="post">
<table border="1">
<tr>
	<td>아이디</td>
	<td><input type="text" name="m_id" size="20" value="<%= m.getM_id()%>" readonly></td>
<tr>
<tr>
	<td>암호</td>
	<td><input type="text" name="m_pw" size="20" value="<%= m.getM_pw() %>"></td>
<tr>
<tr>
	<td>권한</td>
	<td><input type="text" name="m_level" size="20" value="<%= m.getM_level() %>"></td>
<tr>
<tr>
	<td>이름</td>
	<td><input type="text" name="m_name" size="20" value="<%= m.getM_name() %>"></td>
<tr>
<tr>
	<td>이메일</td>
	<td><input type="text" name="m_email" size="20" value="<%= m.getM_email() %>"></td>
<tr>
<tr>
	<td colspan="4"><input type="submit" value="회원수정버튼"></td>
</tr>
</table>
</form>
 
 <%@ include file="/module/hadan.jsp" %>
</body>
</html>
 
 
 
 

'JSP' 카테고리의 다른 글

MVC model2  (2) 2020.05.07
200417  (0) 2020.04.17
[JSP + MySQL] jdbc driver분리 / jsp usebean  (0) 2020.04.10
jsp,mysql,java  (0) 2020.04.09

+ Recent posts