웹프로그래밍(JSP)
Jsp코드의 서블릿 변환 과정
client에서 test.jsp를 요청 -> 서버에 test_jsp.java코드를 컴파일한 test_jsp.class파일을 검색
-> test.jsp를 test_j네.java코드로 변환 컴파일 test_jsp.class 생성 -> test_jsp.class을 실행하여 결과를 전송
Jsp 파일 찾아보기
C:\Users\yscs\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\newboard\org\apache\jsp
※test_jsp.java
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.55
* Generated at: 2022-04-27 04:32:11 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
}
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 뱾 삤吏 GET, POST 삉 뒗 HEAD 硫붿냼 뱶留뚯쓣 뿀 슜 빀 땲 떎. Jasper 뒗 OPTIONS 硫붿냼 뱶 삉 븳 뿀 슜 빀 땲 떎.");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=EUC-KR");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"EUC-KR\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\r\n");
out.write("<h1> 븞 뀞 븯 꽭 슂.</h1>\r\n");
for(int i=0; i<10; i++)
{
out.println("hello");
}
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
src/main/java 패키지 추가 -> 패키지 파일명: test
test에 서블릿 추가 test -> helloServlet.java
※helloServlet.java
package test;
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;
@WebServlet("/hello")
public class helloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public helloServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=EUC-KR");
PrintWriter out = response.getWriter();
for(int i=0;i<10;i++)
out.println("hello<br>");
}
}
서블릿의 도입
JSP All in One JSP 기능 분리 요청 요청 요청된 작업의 처리 -> 작업호출 -------------> 요청된 작업의 처리 화면 처리 화면 처리 대행 ----------------> 화면처리 응답 응답 |
src/main/java 패키지 추가 -> 패키지 파일명: board
board에 서블릿 추가 board -> Servlet
Board 프로젝트에 있는 list.jsp구문 일부분 복사해서 붙여넣기
src/main/webapp/WEB-INF/lib 파일 위치에
mysql-connector-java-8.0.28.jar
※listServlet.java
package board;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
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("/list")
public class listServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=EUC-KR");
PrintWriter out = response.getWriter();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//데이터베이스 연결
stmt = conn.createStatement();
String sql = "select * from board";
rs = stmt.executeQuery(sql);
//데이터베이스에 명령 전달 및 결과회신
while(rs.next())
{
String num = rs.getString("num");
String subject = rs.getString("subject");
String content = rs.getString("content");
String name = rs.getString("name");
out.println(subject+name+"<br>");
}
//회신 결과를 출력
out.println("데이터베이스 연결이 성공했습니다.");
} catch (Exception ex) {
out.println("데이터베이스 연결이 실패했습니다.<br>");
out.println("SQLException: " + ex.getMessage());
} finally {
try {
if (conn != null)
conn.close();
if(stmt!=null)
stmt.close();
if(rs!=null)
rs.close();
}catch(Exception ex) {
out.println("SQLException: " + ex.getMessage());
}
}
}
}
http://localhost:8080/newboard 뒤에 /list 추가로 쓰기
MVC 모델 1
MVC 모델 1은 뷰와 컨트롤러의 역할이 합쳐져 있다.
흔히 웹 개발을 하면 Jsp가 뷰 역할을 하는데, MVC 1에서 Jsp는 뷰와 컨트롤러의 역할을 모두 감당한다.
Jsp가 뷰와 컨트롤러 역할을 모두 수행하면, Jsp에 Java 코드와 Html, css 등의 코드가 섞여 있어, 소스가 복잡해지고 읽기가 어려워져 유지보수가 힘들어 진다.
하지만 상대적으로 설계가 간단하여 개발 속도가 빠르고 작은 프로젝트에 알맞다.
MVC 모델 2
MVC 모델 2은 모델 1에서 유지보수가 힘들다는 단점을 보완하기 위해 나온 모델이다.
기존에 뷰와 컨트롤러의 역할을 모두 수행하던 JSP는 뷰의 역할만 하게 하고, 대신 컨트롤러 역할을 Servlet이 수행한다.
모델은 기존 MVC 1 방식과 동일하다.
MVC 1에서는 Jsp가 사용자의 호출을 받아줬는데 MVC 2에서는 컨트롤러 역할을 수행하는 Servlet이 요청을 받아준다.
Servlet이 비즈니스 로직을 수행하며 모델을 호출하여 데이터를 요청하며, 최종적으로 뷰 역할인 Jsp를 제어하여 화면을 출력한다.
MVC 2로 개발하게 되면 Html과 Java 코드가 분리되어 확장에 용이하고 유지보수가 수월해진다.
Jsp는 Java 코드를 안 쓰는 대신 JSTL을 사용하여 결과 화면을 보여준다.
하지만 초기 설계단계에 비용이 많이 들어 개발 시간이 오래 걸린다는 단점이 있다.
src/main/java 패키지 추가 -> 패키지 파일명: DTO
DTO에 Class 추가 Dto -> DTO 클래스 추가 파일명: BoardDTO.java
source -> generate getter and setter 클릭
request.setAttribute: 값의 저장
request.getAttribute: 저장된 값의 추출
※BoardDTO.java
package DTO;
import java.sql.Date;
public class BoardDTO {
private int num;
private String subject;
private String content;
private String name;
private Date signdate;
private String password;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getSigndate() {
return signdate;
}
public void setSigndate(Date signdate) {
this.signdate = signdate;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
webapp에 jsp파일 추가
list.jsp파일 추가
※listServlet.java
package board;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
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;
@WebServlet("/list")
public class listServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=EUC-KR");
PrintWriter out = response.getWriter();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//데이터베이스 연결
stmt = conn.createStatement();
String sql = "select * from board";
rs = stmt.executeQuery(sql);
//데이터베이스에 명령 전달 및 결과회신
while(rs.next())
{
String num = rs.getString("num");
String subject = rs.getString("subject");
String content = rs.getString("content");
String name = rs.getString("name");
//out.println(subject+name+"<br>");
}
//회신 결과를 출력
String view = "list.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
dispatcher.forward(request,response);
} catch (Exception ex) {
out.println("데이터베이스 연결이 실패했습니다.<br>");
out.println("SQLException: " + ex.getMessage());
} finally {
try {
if (conn != null)
conn.close();
if(stmt!=null)
stmt.close();
if(rs!=null)
rs.close();
}catch(Exception ex) {
out.println("SQLException: " + ex.getMessage());
}
}
}
}
※list.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>
<body>
<h1>여기는 목록보기 페이지입니다.</h1>
</body>
</html>
★ArrayList<boardDTO> list = (ArrayList<boardDTO>request..getAttribute("list");
ArrayList는 배열객체이다.
ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
<BoardDTO>의 배열목록
board.setNum(Integer.parseInt(num));
board.setSubject(subject);
board.setContent(content);
board.setName(name);
list.add(board);
request.setAttribute("list", list); //list명단을 저장한다
※src/main/java
board 패키지의 listServlet.java
package board;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
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 DTO.BoardDTO;
@WebServlet("/list")
public class listServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=EUC-KR");
PrintWriter out = response.getWriter();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//데이터베이스 연결
stmt = conn.createStatement();
String sql = "select * from board";
rs = stmt.executeQuery(sql);
//데이터베이스에 명령 전달 및 결과회신
ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
while(rs.next())
{
BoardDTO board = new BoardDTO();
String num = rs.getString("num");
String subject = rs.getString("subject");
String content = rs.getString("content");
String name = rs.getString("name");
board.setNum(Integer.parseInt(num));
board.setSubject(subject);
board.setContent(content);
board.setName(name);
list.add(board);
//out.println(subject+name+"<br>");
}
request.setAttribute("list", list);
//회신 결과를 출력
String view = "list.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
dispatcher.forward(request,response);
} catch (Exception ex) {
out.println("데이터베이스 연결이 실패했습니다.<br>");
out.println("SQLException: " + ex.getMessage());
} finally {
try {
if (conn != null)
conn.close();
if(stmt!=null)
stmt.close();
if(rs!=null)
rs.close();
}catch(Exception ex) {
out.println("SQLException: " + ex.getMessage());
}
}
}
}
newboard/src/webapp
※list.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="DTO.BoardDTO" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>여기는 목록보기 페이지입니다.</h1>
<%
ArrayList<BoardDTO> list =(ArrayList<BoardDTO>)request.getAttribute("list");
for(int i =0;i<list.size();i++)
{
BoardDTO board = (BoardDTO)list.get(i);
int num = board.getNum();
String subject = board.getSubject();
String name = board.getName();
out.println(num +","+subject+","+name+"<br>");
}
%>
</body>
</html>
board 패키지에 Servlet클래스 추가
Servlet: readServlet.java
URL mappings:/read
※readServlet.java
package board;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
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 DTO.BoardDTO;
@WebServlet("/read")
public class readServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Board->src->main->webapp->read.jsp
String a = request.getParameter("num");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//데이터베이스 연결
stmt = conn.createStatement();
String sql = "select * from board where num="+a;
rs = stmt.executeQuery(sql);
//명령전달과 결과 회신
BoardDTO board = new BoardDTO();
if(rs.next())
{
int num = rs.getInt("num");
String subject = rs.getString("subject");
String content = rs.getString("content");
String name = rs.getString("name");
board.setNum(num);
board.setSubject(subject);
board.setContent(content);
board.setName(name);
}
request.setAttribute("board", board); //board 저장하겠다.
String view = "read.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
//requestDispatcher 클라이언트로부터 최초에 들어온 요청을 jsp Servlet내에서 원하는 자원으로 요청을 넘기는 역할을 수행하거나 특정 자원에 처리를 요청하고 처리결과를 얻어오는 기능
dispatcher.forward(request,response);
//회신결과를 출력
}catch(Exception ex){
System.out.println("실패");
System.out.println("에러: " + ex.getMessage());
}finally{
try {
if (conn != null)
conn.close();
if(stmt!=null)
stmt.close();
if(rs!=null)
rs.close();
}catch(Exception ex) {
System.out.println("실패");
System.out.println("에러: " + ex.getMessage());
}
}
}
}
※list.jsp
구문2)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="DTO.BoardDTO" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>여기는 목록보기 페이지입니다.</h1>
<%
ArrayList<BoardDTO> list =(ArrayList<BoardDTO>)request.getAttribute("list");
for(int i =0;i<list.size();i++)
{
BoardDTO board = (BoardDTO)list.get(i);
int num = board.getNum();
String subject = board.getSubject();
String name = board.getName();
%>
<%=num %>,<a href=read?num=<%=num%>><%=subject%></a>
<%
}
%>
</body>
</html>
※read.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="DTO.BoardDTO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>이곳은 글읽기 페이지입니다.</h1>
<%
BoardDTO board = (BoardDTO)request.getAttribute("board");
int num = board.getNum();
String subject = board.getSubject();
String content = board.getContent();
String name = board.getName();
%>
번호 : <%=num%><br>
작성자 : <%=name %><br>
제목 : <%=subject %><br>
<hr>
<%=content %>
</body>
</html>
※deleteServlet.java
package board;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
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("/delete")
public class deleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//response.getWriter().append("Served at: ").append(request.getContextPath());
String a = request.getParameter("num");
Connection conn=null;
Statement stmt=null;
try{
String url="jdbc:mysql://localhost:3306/Mydb";
String user="root";
String password="mysql";
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url,user,password);
//데이터베이스 연결
//명령전송
stmt=conn.createStatement();
String sql="delete from board where num=" + a;
stmt.executeUpdate(sql); // select 제외 모두 executeUpdate
//목록으로 돌아가기
response.sendRedirect("list");
}catch(Exception ex){
System.out.println("실패 ");
System.out.println("에러 : "+ex.getMessage());
}finally{
try {
if(conn!=null)
conn.close();
if(stmt!=null)
stmt.close();
}catch(Exception ex){
System.out.println("실패 ");
System.out.println("에러 : "+ex.getMessage());
}
}
}
}
실행할 때: list.jsp에서 서버 실행
화면 주소창에 http://localhost:8080/newboard 에서
http://localhost:8080/newboard/list 들어가기
Apache Taglibs Downloads
https://tomcat.apache.org/download-taglibs.cgi 홈페이지 들어가서
Apache Tomcat® - Apache Taglibs Downloads
Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro
tomcat.apache.org
<3개 다운로드>
Impl:
taglibs-standard-impl-1.2.5.jar (pgp, sha512)
Spec:
taglibs-standard-spec-1.2.5.jar (pgp, sha512)
EL:
taglibs-standard-jstlel-1.2.5.jar (pgp, sha512)
다운로드 후에 newboard/webapp/lib 폴더에 위에 3개 복사 붙여넣기 list.jsp 구문에서 import문 다 지우고 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 이부분 추가하기 그리고 <body></body> 안 자바코드 구문을 다 지우고 <c:forEach var="board" items="${list}"> ${board.num}, <a href="read?num=${board.num}">${board.subject}</a> ${board.name}, <br> </c:forEach> 이 부분을 작성 후 실행 |
※list.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>여기는 목록보기 페이지입니다.</h1>
<c:forEach var="board" items="${list}">
${board.num},
<a href="read?num=${board.num}">${board.subject}</a>
${board.name},
<br>
</c:forEach>
</body>
</html>
read.jsp 구문에서 <body></body> 안에 자바코드 구문을 다 지우고 <h1>${board.subject}</h1> 글번호:${board.num} 작성자:${board.name} <hr> ${board.content} <br> 이 부분을 작성 후 실행 |
※read.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>
<body>
<h1>${board.subject}</h1>
글번호:${board.num}
작성자:${board.name}
<hr>
${board.content}
<br>
</body>
</html>
postform.jsp 구문을 newboard / src / webapp에 복사 붙여넣기
※ postform.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>
<body>
글등록 페이지
<form method="post" action="post">
제목:<input type="text" name="subject"><br>
작성자:<input type="text" name="writer"><br>
비번: <input type="password" name="pass"><br>
<textarea rows=20 cols=100 name="content"></textarea>
<input type="submit" value="완료">
</form>
</body>
</html>
newboard / src/main/java / board에 서블릿추가
서블릿 명: postServlet -> URL mappings: /post -> doGet, Inherited, dpPost 체크
※postServlet.java
package board;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
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;
@WebServlet("/post")
public class postServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String view = "postform.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
dispatcher.forward(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String subject = request.getParameter("subject");
String writer = request.getParameter("writer");
String content = request.getParameter("content");
String pass = request.getParameter("pass");
Connection conn = null;
PreparedStatement pstmt = null;
try{
//데이터베이스에 접속한다.
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//데이터베이스에 명령을 접속한다.(insert)
String sql = "insert into board";
sql += "(subject,name,password,content,signdate) values";
sql += "(?, ?,?,?,now())";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2,writer);
pstmt.setString(3,content);
pstmt.setString(4,pass);
pstmt.executeUpdate();
//목록보기 페이지로 전환한다.
response.sendRedirect("list");
}catch(Exception ex){
System.out.println("실패 ");
System.out.println("에러 : "+ex.getMessage());
}finally{
try {
if(conn!=null)
conn.close();
if(pstmt!=null)
pstmt.close();
}catch(Exception ex){
System.out.println("실패 ");
System.out.println("에러 : "+ex.getMessage());
}
}
}
}
※ updateServlet.java(서블릿)
package board;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
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;
@WebServlet("/update")
public class updateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String a = request.getParameter("num");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String num = "";
String name="";
String email="";
try{
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "12345";
//데이터베이스 접속
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
//쿼리 전송(select)과 결과를 받는다.
stmt = conn.createStatement();
String sql = "select * from board where num="+a;
rs = stmt.executeQuery(sql);
//폼에 데이터를 출력한다.
//결과를 받아 변수에 저장한다.
if(rs.next())
{
num = rs.getString("num");
name = rs.getString("name");
email = rs.getString("email");
}
response.sendRedirect("list");
}catch(Exception ex){
System.out.println("실패");
System.out.println("에러: " + ex.getMessage());
}finally{
try {
if (conn != null)
conn.close();
if(stmt!=null)
stmt.close();
if(rs!=null)
rs.close();
}catch(Exception ex) {
System.out.println("실패");
System.out.println("에러: " + ex.getMessage());
}
}
}
}