SPRING annotation

* annotation은 어떤걸 붙여도 상관없지만 왼쪽 아래와 같이 이름에 맞게 붙이는게 좋다

@Autowired : 자료형을 기준으로 bean주입, 같은 타입일 경우 이름을 주입(객체 생성)

* @Autowired를 붙이지 않으면 null값이 나온다

* annotation뒤에 ("객체명")을 붙이면 객체명을 바꿀 수 있다

* @Autowired를 쓸 경우, 타입이 겹치면 객체 생성할 때, 객체명을 생성할떄 이름과 동일하게 하면 된다

* @Inject 와 @Qualifier("객체명")을 통해서도 구분 가능하다

req.getMethod() : 어떤 방식으로 보내줬는지(GET, POST)

@RequestMapping안에 method = RequestMethod.GET : get방식만 받겠다.(post방식은 안받음)

@PostMapping : post방식만 받겠다(get방식은 안받음)

@RequestParam("키명") 타입 변수명 : request로 넘어오는 값을 처리(키명과 변수명이 동일하면 키명 생략 가능)

* HttpServletRequest : 사용자가 요청한 값 받아오기

* @Controller 바로 밑에 @RequestMapping("경로") : 해당 경로가 겹치면, 해당 경로 생략 가능

* model.addAttribute("키", 밸류) 형태

* controller에서 넘겨 받는 곳에 dto를 입력하면 setter로 인해 자동으로 dto안으로 들어옴

package com.care.ex02;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("ex02")
public class MemberController {
	@Autowired 
	private MemberService ms;
	
	public MemberController() {
		System.out.println("---- controller ----");
	}
	@RequestMapping("index")
	public String index(Model model) {
		System.out.println("service : " + ms); 
		ms.getData(model);
		return "ex02/index";
	}
	@RequestMapping(value = "result", method = RequestMethod.GET)
	public String result(HttpServletRequest req, Model model) {
		System.out.println(req.getMethod());
		System.out.println(req.getParameter("name"));
		System.out.println(req.getParameter("age"));
		model.addAttribute("method", req.getMethod());
		model.addAttribute("name", req.getParameter("name"));
		model.addAttribute("age", req.getParameter("age"));
		return "ex02/result";
	}
	@PostMapping("result")
	public String result02(
			@RequestParam("name") String n,
			@RequestParam int age,
			Model model,
			HttpServletRequest req
			) {
		model.addAttribute("method", req.getMethod());
		model.addAttribute("name", n);
		model.addAttribute("age", age);
		return "ex02/result";
	}
	@PostMapping("object")
	public String object(MemberDTO dto, Model model) {
		model.addAttribute("dto", dto);
		return "ex02/object";
	}
}

 

package com.care.ex02;

import javax.inject.Inject;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

@Service("ms")
public class MemberService {
	//@Autowired
	@Inject
	@Qualifier("dao2")
	MemberDAO dao;
	
	public MemberService() {
		System.out.println("---- service ----");
	}
	public void getData(Model model) {
		System.out.println("get data 연동 : " + dao);
		String msg = dao.getData();
		model.addAttribute("msg", msg);
	}
}
package com.care.ex02;

import org.springframework.stereotype.Repository;

@Repository
public class MemberDAO {
	public MemberDAO() {
		System.out.println("---- dao ----");
	}
	public String getData() {
		return "아무값이나!~";
	}
}
package com.care.ex02;

public class MemberDTO {
	String name;
	int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 01

 

풀이 과정

package com.care.member.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.care.member.dto.MemberDTO;
import com.care.member.service.MemberService;

@Controller
public class MemberController {
	@Autowired(required = false)
	MemberService ms;
	
	@GetMapping("index")
	public String index() {
		return "index";
	}
	@GetMapping("register_form")
	public String registerForm() {
		return "register_form";
	}
	@GetMapping("list")
	public String list(Model model ) {
		System.out.println("ms : "+ms);
		ms.getList( model );
		return "list";
	}
	@PostMapping("register")
	public String register(HttpServletRequest req,
				@RequestParam String id,
				@RequestParam String pwd,
				@RequestParam String name,
				MemberDTO dto) {
		System.out.println( req.getParameter("id"));
		System.out.println( req.getParameter("pwd"));
		System.out.println( req.getParameter("name"));
		System.out.println("--------");
		System.out.println(id+","+pwd+","+name);
		System.out.println("--------");
		System.out.println(dto.getId());
		System.out.println(dto.getPwd() );
		System.out.println(dto.getName());
		
		ms.register( dto );
		
		return "register";
		
	}
}
package com.care.member.service;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.care.member.dao.MemberDAO;
import com.care.member.dto.MemberDTO;

@Service
public class MemberService {
	@Autowired
	MemberDAO dao;
	public void getList( Model model ) {
		ArrayList<MemberDTO> list = dao.getList();
		model.addAttribute("list", list);
		
	}
	public void register( MemberDTO dto ) {
		dao.register(dto);
	}
}
package com.care.member.dao;

import java.util.ArrayList;

import org.springframework.stereotype.Repository;

import com.care.member.dto.MemberDTO;

@Repository
public class MemberDAO {
	ArrayList<MemberDTO> list;
	public MemberDAO() {
		list = new ArrayList<MemberDTO>();
	}
	public ArrayList<MemberDTO> getList( ){
		//select * from table;
		return list;
	}
	public void register( MemberDTO dto ) {
		//insert
		list.add(dto);
	}
}
package com.care.member.dto;

public class MemberDTO {
	String id, pwd, name;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING redirect & forward

redirect:경로 : 사용자에게 경로를 주고, 사용자가 다시 경로를 요청(req값이 안나온다)

forward:경로 : 사용자에게 들리지 않고, 서버딴에서 움직인다, 화면은 이동하지만 경로는 이동되지 않는다(req값 유지)

* req.setAttribute()는 req.getAttribute로 받아온다

package com.care.ex03;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("ex03")
public class Ex03Controller {
	@RequestMapping("login")
	public String login(HttpServletRequest req) {
		System.out.println("login method : " + req.getMethod());
		System.out.println("login param id : " + req.getParameter("id"));
		System.out.println("login atta id : " + req.getAttribute("test"));
		return "ex03/login";
	}
	@PostMapping("result")
	public String result(HttpServletRequest req) {
		String uId = req.getParameter("id");
		req.setAttribute("test", "아무거나");
		if (uId.equals("abc")) {
			return "forward:success";
			//return "redirect:success";
		}
		return "redirect:login";
		//return "forward:login";
	}
	@PostMapping("success")
	public String success(HttpServletRequest req, Model model) {
		System.out.println("id : " + req.getParameter("id"));
		System.out.println("test : " + req.getAttribute("test"));
		model.addAttribute("id", req.getParameter("id"));
		model.addAttribute("test", req.getAttribute("test"));
		return "ex03/success";
	}
}
<%@ 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 action="result" method="post">
		<input type="text" name="id"><br>
		<input type="submit" value="로그인"> 
	</form>
</body>
</html>
<%@ 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>
	<h3>로그인 성공, 사용자 접근</h3>
	id : ${id }<br>
	test : ${test }<br>
	<a href="login">login</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 01 +

풀이과정

package com.care.member.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.care.member.dto.MemberDTO;
import com.care.member.service.MemberService;

@Controller
public class MemberController {
	@Autowired(required = false)
	MemberService ms;
	
	@GetMapping("index")
	public String index() {
		return "index";
	}
	@GetMapping("register_form")
	public String registerForm() {
		return "register_form";
	}
	@GetMapping("list")
	public String list(Model model ) {
		System.out.println("ms : "+ms);
		ms.getList( model );
		return "list";
	}
	@PostMapping("register")
	public String register(HttpServletRequest req,
				@RequestParam String id,
				@RequestParam String pwd,
				@RequestParam String name,
				MemberDTO dto) {
		ms.register( dto );
		
		return "register";
	}
	@RequestMapping("one_list")
	public String one_list(HttpServletRequest req, Model model) {
		ms.getOneList(req.getParameter("name"), model);
		return "one_list";
	}
}
package com.care.member.service;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.care.member.dao.MemberDAO;
import com.care.member.dto.MemberDTO;

@Service
public class MemberService {
	@Autowired
	MemberDAO dao;
	public void getList( Model model ) {
		ArrayList<MemberDTO> list = dao.getList();
		model.addAttribute("list", list);
		
	}
	public void register( MemberDTO dto ) {
		dao.register(dto);
	}
	public void getOneList(String name, Model model) {
		dao.getOneList(name, model);
	}
}
package com.care.member.dao;

import java.util.ArrayList;

import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;

import com.care.member.dto.MemberDTO;

@Repository
public class MemberDAO {
	ArrayList<MemberDTO> list;
	public MemberDAO() {
		list = new ArrayList<MemberDTO>();
	}
	public ArrayList<MemberDTO> getList( ){
		//select * from table;
		return list;
	}
	public void register( MemberDTO dto ) {
		//insert
		list.add(dto);
	}
	public void getOneList(String name, Model model) {
		System.out.println("list.size() : " + list.size());
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getName().equals(name)) {
				model.addAttribute("id", list.get(i).getId());
				model.addAttribute("pwd", list.get(i).getPwd());
				model.addAttribute("name", list.get(i).getName());
			}
		}
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	list페이지 : ${list.size() }
	<table border="1">
		<tr>
			<th>id</th>
			<th>pwd</th>
			<th>name</th>
		</tr>
		<c:choose>
			<c:when test="${list.size() == 0 }">
			<tr>
				<td colspan="3" align="cetner">
					<b>데이터가 없음!!!!</b>
				</td>
			</tr>
			</c:when>
			<c:otherwise>
				<c:forEach var="dto" items="${ list }">
					<tr>
						<td>${dto.id }</td>
						<td>${dto.pwd }</td>
						<td><a href="one_list?name=${dto.name}">${dto.name }</a></td>
					</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>
		<tr>
			<td colspan="3">
				<a href="index">index이동</a>			
			</td>
		</tr>
	</table>
</body>
</html>
<%@ 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>
	<h2>${name }님 안녕하세요!</h2><br>
	아이디 : ${id }<br>
	비밀번호 : ${pwd }<br>
	<a href="index">index 이동</a><br>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

SPRING 설치

sts(spring tool suite)3 검색 - 첫번째꺼 접속 - Download STS3 -

https://download.springsource.com/release/STS/3.9.18RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-win32-x86_64.zip - 압축풀기(sts-bundle) - STS.exe 실행

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 설정

Servers - 기존 서버 삭제 / Package Explorer - Servers 삭제 (삭제할때 체크하고 삭제)

Servers - 파란글 클릭 - apache Tomcat v9.0 - Browse 설정 - Finish

https://github.com/ChoHeeWon00/spring - code클릭 - Download ZIP - 압축(plugins, sts템플릿)풀기

 

plugins - https-content.xml 복사 -

workspace\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core 붙여넣기

프로젝트 생성 - (crtl + n) - Spring Legacy Project - Spring MVC Project 선택 - next - 다운 안됨

 

sts템플릿 - (template.xml, template.zip, wizard.json) 복사 - 

workspace\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2 붙여넣기

프로젝트 생성 - (crtl + n) - Spring Legacy Project - Spring MVC Project 선택 - next

- 패키지 생성 : com.care.abc(형식 중요) - finish

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING DI (1)

DI : 객체를 만들고, 그 안에서 또 다른 객체와 연결되어있는 관계

IOC : 개체를 보관하고 있는 틀(저장소)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 시작

(ctrl + n) - Spring Legacy Project - Spring MVC Project 선택 - 생성

* 업데이트 : (alt + F5) - ok

Maven Dependencies : Spring에서 제공해주는 기능

webapp - resources : css. javascript, 이미지 등이 들어있는 곳 

root-context.xml : db관련 설정

target : 배포된 파일이 저장되는 곳

pom.xml : 특정 기능을 설정하면, Maven Dependencies에 저장된다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING XML 객체 생성

 (ctrl + n) - Spring Bean Configuration File : xml 파일 생성

객체 생성 : <bean id="이름" class="위치" />

* Beans Graph를 통해 확인 가능

의존성 주입 : 받는 <bean>태그 안에 <property name="이름"><ref bean="객체명"></property>

의존성 주입 및 값 설정 : 받는 <bean>태그 안에 <property name="이름" value="값" />

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING XML로 설정한 객체 꺼내오기

String path = "classpath:applicationST.xml" : classpath = src/main/resources

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext (path) : 해당 경로에 있는 파일을 IOC에 등록

ctx.getBean("가져올 객체명", 자료형) : 등록한 기능 가죠오기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="st01" class="com.care.ex01.Student" />
	<bean id="stb" class="com.care.ex01.STBean">
		<property name="st">
			<ref bean="st01"/>
		</property>
		<property name="name">
			<value>김말이</value>
		</property>
		<property name="age" value="55">
		</property>
	</bean>
	
</beans>
package com.care.ex02;

import org.springframework.context.support.GenericXmlApplicationContext;

import com.care.ex01.STBean;

public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:applicationST.xml"; // classpath : src/main/resources
		GenericXmlApplicationContext ctx = // 해당하는 경로에 있는 파일을 번역해, IOC(저장소)에 등록
				new GenericXmlApplicationContext(path);
		STBean s = ctx.getBean("stb", STBean.class); // 등록한 기능 가져오기 (가져올 객체명, 자료형)
//		s.setName("김개똥");
//		s.setAge(30);
		s.namePrint();
		s.agePrint();
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 01

풀이 과정

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="ps" class="com.care.di_test.PrintString" />
	<bean id="pb" class="com.care.di_test.PrintBean">
		<property name="ps" ref="ps" />
		<property name="print" value="안녕" />
	</bean>
</beans>
package com.care.di_test;

import org.springframework.context.support.GenericXmlApplicationContext;


public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:application_test.xml"; 
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext(path);
		PrintBean s = ctx.getBean("pb", PrintBean.class); 
		s.print();
	}
}
package com.care.di_test;

public class PrintBean {
	private String print;
	private PrintString ps;
	
	public void print() {
		ps.printString(print);
	}
	
	public String getPrint() {
		return print;
	}
	public void setPrint(String print) {
		this.print = print;
	}
	public PrintString getPs() {
		return ps;
	}
	public void setPs(PrintString ps) {
		this.ps = ps;
	}
	
}
package com.care.di_test;

public class PrintString {
	public void printString(String print) {
		System.out.println("입력값 => " + print);
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 외부 파일(db)

외부 파일 생성 : src/main/resources - (ctrl + n) - file 

외부파일 불러오기 설정 : xmlt파일 - Namespaces - context 체크 

- <context:property-placeholder location="classpath:db.properties(불러올 파일 경로)" />

생성자 호출 : <constructor-arg value="가져올 데이터" /> ($표시를 통해 가져옴)

db.id = java
db.pwd = 1234
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<context:property-placeholder location="classpath:db.properties"/>
	
	<bean id="db01" class="com.care.ex03.DBClass">
		<property name="id" value="aaa"></property>
		<property name="pwd" value="bbb"></property>
	</bean>
	
	<bean id="db02" class="com.care.ex03.DBClass">
		<constructor-arg value="${db.id}"/>	
		<constructor-arg value="${db.pwd}"/>	
	</bean>

</beans>
package com.care.ex03;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:application_db.xml"; 
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext(path);
		DBClass db01 = ctx.getBean("db01", DBClass.class);
		System.out.println("id : " + db01.getId());
		System.out.println("pwd : " + db01.getPwd());
		
		System.out.println("------------------");
		
		DBClass db02 = ctx.getBean("db02", DBClass.class);
		System.out.println("id : " + db02.getId());
		System.out.println("pwd : " + db02.getPwd());
	}
}
package com.care.ex03;

public class DBClass {
	String id, pwd;
	public DBClass() {
		
	}
	public DBClass(String id, String pwd) {
		this.id = id;
		this.pwd = pwd;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING list & map

<list>태그 안에 <value>값 지정

<map>태그 안에 <entry>값 지정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING interface설정

implements "클래스명" : 해당 클래스명이 부모형태이다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="car" class="com.care.ex04.CarServiceImpl02"></bean>
</beans>
package com.care.ex04;

public interface CarService {
	public void speed();
}
package com.care.ex04;

public class CarServiceImpl01 implements CarService{

	@Override
	public void speed() {
		System.out.println("속력을 올립니다!!");
	}

}
package com.care.ex04;

public class CarServiceImpl02 implements CarService{

	@Override
	public void speed() {
		System.out.println("새로운 기능 속도 올림!!");
	}

}
package com.care.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		//CarService car = new CarServiceImpl02();
		
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:application_car.xml");
		CarService car = ctx.getBean("car", CarService.class);
		
		System.out.println("main 클래스에서 자동차 사용");
		car.speed();
		
		SubClass sc = new SubClass();
		sc.subFunc();
	}
}
package com.care.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class SubClass {
	public void subFunc() {
		//CarService car = new CarServiceImpl02();
		
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:application_car.xml");
		CarService car = ctx.getBean("car", CarService.class);
		
		System.out.println("서브 클래스 자동차!!");
		car.speed();
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING web 설정

pom.xml - 

자바 버전 변경 : <java-version>1.8</ java- version>

스프링 버전 변경 : <org.springframework-version>5.2.1.RELEASE</org.springframework-version>

 

servlet 버전 변경 (95번째 줄, 96번쨰 줄) : 

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

 

maven 버전 변경 (139번째 줄, 141번째 줄, 142번째 줄) : 

  <plugin>
       <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
       <version>3.5.1</version>
     <configuration>
        <source>1.8</source>
       <target>1.8</target>
       <compilerArgument>-Xlint:all</compilerArgument>
            <showWarnings>true</showWarnings>
                   <showDeprecation>true</showDeprecation>
      </configuration>
    </plugin>

 

* maven 업데이트 : (alt + F5) - ok 

 

encoding 적용 방법 : web.xml - 마지막 </web-app> 안에 작성

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter     
</filter-class>
<init-param>
<param-name>encoding</param-name>   
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>  
<param-value>true</param-value>
</init-param>
  </filter>    
<filter-mapping>
<filter-name>encodingFilter</filter-name>
                    <url-pattern>/*</url-pattern>                 
</filter-mapping> 

 

서버 에러 발생시 : Servers - tomcat - server.xml 

- 다른 프로젝트와 path가 같을 경우, 이전에 사용한 path를 변경 및 주석처리

 

web broser 설정 : window - WebBroser - chrome

jsp파일 encoding : window - preferences - General - workspace - other - UTF-8설정

window - preferences -  web - css & html & jsp - UTF-8 설정

 

* jsp파일에서 실행하지 않고, 프로젝트에 실행

* 해당 HomeController.java - package명(ex01)을 기준으로 경로를 지정,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING web

@ = annotation

@Controller : 컨트롤러로 인식

@RequestMapping(value="/경로(index)" : localhost:8080/패키지명/해당경로(index) (get, post둘다 가능)(value생략 가능

return "경로" : views를 기준으로 경로 설정 

@GetMapping : get방식으로만 보내겠다

Model model : 해당 jsp파일에게 데이터를 보내줄 떄 사용

model.addAttribute("변수명", 데이터) : 해당 jsp파일에 전달

model을 만들어서 전체를 보낼 수 있다.(model type = ModelAndView)

package com.care.ex01;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {
	
	@RequestMapping(value="/index")
	public String memberIndex() {
		return "/member/index";
	}
	
	@GetMapping("/logout")
	public String memberLogout(Model model) {
		model.addAttribute("test", "로그아웃 되었습니다");
		return "/member/logout";
	}
	@GetMapping("/login")
	public ModelAndView login() {
		ModelAndView model = new ModelAndView();
		model.addObject("login", "로그인 성공!!!");
		model.setViewName("member/login");
		return model;
	}
}
<%@ 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>index 페이지</h1>
</body>
</html>
<%@ 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>login 페이지</h1>
	login : ${login }
</body>
</html>
<%@ 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>logout 페이지</h1>
	request : <%= request.getAttribute("test") %><br>
	el : ${ test }<br>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 02

풀이 과정

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING MVC2 모델 & Spring 동작 구조

Controller : 연결

Service : 연산

DAO : db와 연결

 

Web Browser에서 사용자가 요청하면, DispatcherServlet에서 요청을 받아, 

HandlerMapping에게 정보를 보내, 컨트롤러 위치 정보를 받아, 

HandlerAdapter에서 위치정보를 받아 Controller에 연결한 후,

컨트롤러 실행 결과를 ModelAndView객체로 변화 후,

DispatcherServlet에서 .jsp이름을 ViewResolver에게 보낸 후,

jsp 정보를 DispatcherServlet 받은 후,

View에게 jsp를 요청한 후, jsp 랜더링을 전달 받아 사용자에게 전달한다.

 

web.xml(9번째 줄) : db에 대한 설정은 해당 위치에서 설정

DispatcherServlet 설정 위치 : web.xml(23번째 줄)

 

 

 

 

 

 

JSP paging

select count(*) from mem_jsp에서 몇개인지 알려면, rs.getInt("COUNT(*)")로 얻어온다.

<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<jsp:useBean id="dao" class="member.MemberDAO" />
	<h3>모든 목록 확인</h3>
	<table border="1">
		<tr>
			<th>이름</th>
			<th>주소</th>
			<th>전화번호</th>
		</tr>
		<c:set var="rsMap" value="${dao.getList(param.page)}"></c:set>
		<c:forEach var="dto" items="${rsMap.get('list') }">
		<tr>
			<td>
				<c:choose>
					<c:when test="${loginId ne null }">
						<c:set var="result" value="/m_info.jsp?id=${dto.id}"></c:set>
					</c:when>
					<c:otherwise>
						<c:set var="result" value="/m_login.jsp"></c:set>
					</c:otherwise>
				</c:choose>
				<a href="${path}member${result}">${dto.name}</a>
			</td>
			<td>${dto.addr}</td>
			<td>${dto.tel}</td>
		</tr>
		</c:forEach>
		<tr>
			<td align="center" colspan="3">
				<c:forEach var="cnt" begin="1" end="${rsMap.get('endPage')}">
					<a href="m_list.jsp?page=${cnt}">${cnt}</a>
				</c:forEach>
			</td>
		</tr>
	</table>
</body>
</html>
package member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;

public class MemberDAO {
	String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	String user="c##LTY", pwd="1213";
	Connection con;
	PreparedStatement ps;
	ResultSet rs;
	
	public MemberDAO() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("--드라이브 로드 성공--");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public MemberDTO getOneMember(String id) {
		MemberDTO dto = null;
		String sql = "select * from mem_jsp where id=?";
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if (rs.next()) {
				dto = new MemberDTO();
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setTel(rs.getString("tel"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return dto;
	}
	private int getTotalCount() {
		String sql = "select count(*) from mem_jsp";
		int tCnt = 0;
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			if (rs.next()) {
				tCnt = rs.getInt("COUNT(*)");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return tCnt;
	}
	private HashMap<String, Object> getOperation(int page, int tCnt){
		HashMap<String, Object> rsMap = new HashMap<>();
		if (page == 0) {
			page = 1;
		}
		int pageNum = 2; //한 페이지당 글 개수
		int endPage = tCnt / pageNum + (tCnt % pageNum == 0 ? 0 : 1); //총 페이지 개수
		int startNum = (page -  1) * pageNum + 1; //페이지당 처음 글 번호
		int endNum = pageNum * page; //페이지당 마지막 글 번호
		
		rsMap.put("endPage", endPage);
		rsMap.put("startNum", startNum);
		rsMap.put("endNum", endNum);
		return rsMap;
	}
	public HashMap<String, Object> getList(int page){
		System.out.println("page : " + page);
		int tCnt = getTotalCount();
		System.out.println("tCnt : " + tCnt);
		
		HashMap<String, Object> rsMap = getOperation(page, tCnt);
		
		String sql = "select A.* from"
				+"(select rownum rn,id,pwd,name,addr,tel from mem_jsp)"
				+"A where rn between ? and ?";
		//String sql = "select * from mem_jsp";
		MemberDTO dto = null;
		ArrayList<MemberDTO> list = new ArrayList<>();
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setInt(1, (int)rsMap.get("startNum"));
			ps.setInt(2, (int)rsMap.get("endNum"));
			rs = ps.executeQuery();
			while(rs.next()) {
				dto = new MemberDTO();
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setTel(rs.getString("tel"));
				list.add(dto);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs != null) rs.close();
				if(ps != null) ps.close();
				if(con != null) con.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		rsMap.put("list", list);
		return rsMap;
	}
	public int register(MemberDTO dto) {
		int result = 0;
		String sql = "insert into mem_jsp(id, pwd, name, addr, tel) values(?,?,?,?,?)";
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setString(1, dto.getId());
			ps.setString(2, dto.getPwd());
			ps.setString(3, dto.getName());
			ps.setString(4, dto.getAddr());
			ps.setString(5, dto.getTel());
			
			result = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	public int modify(MemberDTO dto) {
		int result = 0;
		String sql = "update mem_jsp set pwd=?, name=?, addr=?, tel=? where id=?";
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setString(1, dto.getPwd());
			ps.setString(2, dto.getName());
			ps.setString(3, dto.getAddr());
			ps.setString(4, dto.getTel());
			ps.setString(5, dto.getId());
			result = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	public int delete(String id) {
		int result = 0;
		String sql = "delete from mem_jsp where id=?";
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			result = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP file upload & download

https://www.servlets.com/  -  COS File Upload Library  -  cos-22.05.zip(아래쪽)다운 - 압출 cos.jar 옮기기

enctype="multipart/form-data" : 파일이나 이미지를 전송할 때 주로 사용(post방식에서만 사용 가능)

pageContext.request : 클라이언트가 서버로 전송한 HTTP요청에 대한 정보(타입 = HttpServletRequest)

MultipartRequest mul = new ~~(); : cos.jar에서 제공해주는 라이브러리

new DefaultFileRenamePolicy() : 동일한 파일이 있을 경우, 파일명(1) 이런식으로 처리

Enumeration  e = mul.getFileNames() : 파일 목록들 (타입 = Enumeration<String>)

e.nextElement() : 파일 명 가져오기 

e.hasMoreElements() : 다음 값 확인(true or false)

mul.getFilesystemName( e.nextElement() ) : 실제 파일 명

mul.getOriginalFileName( e.nextElement() ) : 폴더에 저장될 파일 명

 

pageContext.response: (타입 = HttpServletResponse)

pageContext.response.addHeader("다운로드 방식(Content-Disposition)", "파일명 표시 ");

FileInputStream : 해당 파일에 대한 입력 스트림을 생성, 이후 read()로 읽어온다.(파일의 끝에 도달 = -1반환)

OutputStream : 출력스트림(InputStream)을 통해 얻어온 데이터를 out에 할당하여 클라이언트에게 전달

<%@ 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 action="upload.jsp" method="post" enctype="multipart/form-data">
		<input type="text" name="id" placeholder="id"><br>
		<input type="file" name="save_file"><br>
		<input type="submit" value="전송">
	</form>
	<a href="download_form.jsp">파일 확인</a>
</body>
</html>
<%@ 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>
	result : ${ pageContext.request }<br>
	result : <%= request %><br>
	
	<jsp:useBean id="file" class="file.FileOperation" />
	${ file.upload( pageContext.request) }
	<% response.sendRedirect("upload_form.jsp"); %>
</body>
</html>
<%@ 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>
	<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<jsp:useBean id="file" class="file.FileOperation" />
	<c:forEach var="item" items="${file.getFileList() }">
		<img alt="" src="download.jsp?img=${item}" width="100" height="100">
		<a href="download.jsp?img=${item}">${item}</a>
		<br>
	</c:forEach>
	<hr>
	<a href="upload_form.jsp">form이동</a>
</body>
</html>
<%@ 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>
	<%= response %>
	<jsp:useBean id="file" class="file.FileOperation" />
	${file.fileDown(param.img, pageContext.response) }
</body>
</html>
package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;

public class FileOperation {
	public void upload(HttpServletRequest req) throws Exception {
		String path = "c:/jsp_file";
		int size = 1024 * 1024 * 200; //10MB
		System.out.println(req);
		MultipartRequest mul = new MultipartRequest(req, path, size, "UTF-8",
														new DefaultFileRenamePolicy());
		System.out.println("req : " + req.getParameter("id"));
		System.out.println("mul : " + mul.getParameter("id"));
		
		Enumeration<String> e = mul.getFileNames();
		System.out.println("e : " + e);
		System.out.println("다음 값 확인 : " + e.hasMoreElements());
		String fileName = e.nextElement(); //파일 명 가져오기
		System.out.println("파일 명(input name) : " + fileName);
		System.out.println("다음 값 확인 : " + e.hasMoreElements());
		
		String changeName = mul.getFilesystemName(fileName); //실제 파일 명
		String originName = mul.getOriginalFileName(fileName); //폴더에 저장될 파일 명
		
		System.out.println("실제 파일 명 : " + originName);
		System.out.println("변경 파일 명(저장용) : " + changeName);
	}
	public String[] getFileList() {
		File file = new File("c:/jsp_file");
		return file.list();
	}
	public void fileDown(String fileName, HttpServletResponse res) throws Exception {
		res.addHeader("Content-Disposition", "attachment;filename="+fileName);
		// 다운로드 방식 , 파일명을 저렇게 표기
		File file = new File("c:/jsp_file/"+fileName);
		FileInputStream in = new FileInputStream(file);
		OutputStream out = res.getOutputStream();
		byte b[] = new byte[1024];
		int data = 0;
		while(data != -1) {
			data = in.read(b);
			out.write(b);
		}
		out.close(); in.close();
	}
}

 

실행 결과

'jsp' 카테고리의 다른 글

JSP 활용(2)  (0) 2024.05.01
JSP 활용 (1)  (0) 2024.04.30
JSP 기초  (0) 2024.04.29

 

 

 

 

 

 

JSP el (1)

* ${} 를 사용하여 출력 

\(역슬래시) : 연산하지 않고 그냥 표현

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP el (2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP el_scope

${ 키명 } : 현재 범위에서 가장 작은 속성 출력

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP jstl (1)

설치 방법

https://tomcat.apache.org/taglibs/standard/

standard1.1 - download - binaries - jakarta-taglibs-standard-1.1.2.zip(933k) - lib파일 안에 두 jar파일 옮기기

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> : jstl을 c로 사용하겠다는 뜻

<c:out value="내용" /> : 내용을 출력

<c:set var="변수명" value="변수값" /> : 변수 설정

<c:if test="조건" /> : 조건이 true면 실행

<c:choose> : choose태그 안에 if, else if, else문 작성 가능

첫번째 <c:when> : if문, 나머지 <c:when> : else if문, <c:otherwise> : else문

<c:forEach var="변수" begin="시작값" end="끝값" step="증가값"> : for문(step 생략 가능)

<c:set var="배열명" value="첫번째 배열값, 두번째, ...." /> : 배열 생성

<c:forEach var="변수명" items="${배열명}"> : 배열 출력

<c:forTokens var="저장될 변수명" items="${변수명}" delims="/"> : /를 기준으로 나눠서 출력

<c:catch var="result" /> : 태그 안에 내용에 오류 발생시 오류내용이 result로 저장됨

<c:import url="경로" /> : 해당 경로에 있는 내용을 가져옴

<c:remove var="변수명" /> : 해당 변수를 삭제

<c:redirect url="경로"> : 해당 경로로 이동

<c:url var="변수명" value="현재 최상위 폴더 뒤에 경로"> : value가 abcd이면, 7_el_jstl/abcd로 적용

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	ex01.jsp<br>
	<c:out value="안녕하세요" /><br>
	<c:set var="num" value="12345"/>
	c:out : <c:out value="${ num }" /><br>
	\%{ num } : ${ num }<br>
	<hr>
	<h3>c:if</h3>
	<c:set var="num1" value="12345" />
	<c:if test="${ num1 == num }">
		<b>두 값은 같다</b>
	</c:if>
	<c:if test="${ num1 ne num }">
		<b>두 값은 같지않다</b>
	</c:if>
	<hr>
	<c:set var="number" value="100" />
	<c:choose>
		<c:when test="${number > 90 }">
			90보다 크다
		</c:when>
		<c:when test="${number > 70 }">
			70보다 크다
		</c:when>
		<c:otherwise>
			그 외의 값 실행
		</c:otherwise>
	</c:choose>
	<hr>
	<h3>forEach</h3>
	<c:forEach var="i" begin="1" end="5" step="1">
		i : ${ i }<br>
	</c:forEach>
	<hr>
	<c:set value="0" var="sum" />
	<c:set value="10" var="n" />
	<c:forEach var="i" begin="1" end="${ n }">
		<c:set value="${ sum + i }" var="sum" />
	</c:forEach>
	sum : ${ sum }<hr>
	<c:set var="arr" value="홍길동, 김개똥, 고길똥" />
	<c:forEach var="item" items="${ arr }">
		${ item }<br>
	</c:forEach><hr>
	<h3>forTokens</h3>
	<c:set var="str" value="안녕/하세/요" />
	<c:forEach var="item" items="${ str }">
		${ item }<br>
	</c:forEach>
	<hr>
	<c:forTokens var="item" items="${ str }" delims="/">
		${ item }<br>
	</c:forTokens>>
	<hr>

	<c:catch var="result">
		<%= 10/0 %>
	</c:catch>
	<c:if test="${ result != null }">
		<b>문제 발생 : ${ result }</b>
	</c:if>
	
	<c:set var="name" value="홍길동" scope="session" />
	<hr>
	<a href="ex02_session.jsp">session확인</a>
</body>
</html>
<%@ 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>
	<h3>test페이지 입니다</h3>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:import url="ex02_test.jsp" />
	<hr color="hotpink" size="10">
	<h3>session 확인</h3>
	session : ${ name }<br>
	${ sessionScope.name }
	<hr>
	<a href="ex02_delete.jsp">세션 삭제</a>
	<hr>
	getContextPath : <%= request.getContextPath() %><br>
	<a href="<%= request.getContextPath() %>/jstl/ex01.jsp">ex01</a>
	
	<c:set var="path" value="<%= request.getContextPath() %>"></c:set>
	<a href="${ path }/jstl/ex01.jsp">ex01</a>
	
	<a href="<c:url value="/jstl/ex01.jsp" /> ">ex01</a>
	
	<c:url var="url" value="/jstl/ex01.jsp" />
	<br>url : ${ url }
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:remove var="name"/>
	<c:redirect url="/jstl/ex02_session.jsp" />
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP jstl (2)

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP jstl (3)

<%@ 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>
	<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<h1>모든 목록 확인</h1>
	<jsp:useBean id="dao" class="test.TestDAO"/>
	<c:set var="list" value="${dao.getList() }" />
	<c:forEach var="dto" items="${list }">
		name : ${dto.getName() }<br>
		addr : ${ dto.addr }<hr>
	</c:forEach>
	<a href="ex04_one_data.jsp?num=1">하나의 데이터 확인</a>
</body>
</html>
<%@ 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>
	<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<jsp:useBean id="dao" class="test.TestDAO"></jsp:useBean>
	<c:set var="dto" value="${ dao.getData(param.num) }" />
	<h1>하나의 목록</h1>
	name : ${dto.name }<br>
	addr : ${dto.addr }<br>
	<a href="<c:url value='/jstl/ex04_all_data.jsp' />">목록 이동</a>
</body>
</html>
package test;

public class TestDTO {
	String name, addr;

	public String getName() {
		return name;
	}

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

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
	
}
package test;

import java.util.ArrayList;

public class TestDAO {
	ArrayList<TestDTO> list;
	public TestDAO() {
		list = new ArrayList<>();
		for(int i=0 ; i<5 ; i++) {
			TestDTO dto = new TestDTO();
			dto.setName("홍길동 "+i);
			dto.setAddr("산골짜기 "+i);
			list.add(dto);
		}
	}
	public ArrayList<TestDTO> getList(){
		return list;
	}
	public TestDTO getData(int num) {
		return list.get(num);
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP header(include)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:url var="path" value="/" />
	<h1 align="center">Test Web</h1>
	<hr>
	<a href="${ path }index.jsp">HOME</a>&nbsp; &nbsp;
	<a href="${ path }member/m_list.jsp">MEMBERS</a>&nbsp; &nbsp;
	<c:if test="${loginId == null }">
		<a href="${ path }member/m_login.jsp">LOGIN</a>
	</c:if>
	<c:if test="${loginId != null }">
		<a href="${ path }member/m_logout.jsp">LOGOUT</a>
	</c:if>
</body>
</html>
<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<h1>기본 페이지 입니다!!!</h1>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP login / logout

<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<h1>login 페이지입니다!!!</h1>
	${param.result}
	<c:choose>
		<c:when test="${loginId == null}">
			<form action="${path}member/m_login_check.jsp" method="post">
				<input type="text" name="id" placeholder="input id"><br>
				<input type="text" name="pwd" placeholder="input pwd"><br>
				<input type="submit" value="login">
				<a href="${path}member/m_register_form.jsp">회원가입</a>
			</form>
		</c:when>
		<c:otherwise>
			${loginName}님 로그인 상태입니다!!<br>
			<a href="${path}member/m_logout.jsp">로그아웃</a>
		</c:otherwise>
	</c:choose>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="dao" class="member.MemberDAO" />
	<c:set var="dto" value="${dao.getOneMember(param.id)}" />
	dto : ${dto}<br>
	<c:choose>
		<c:when test="${dto == null}">
			<c:set var="result" value="존재하지 않는id입니다!!" />
		</c:when>
		<c:otherwise>
			<c:choose>
				<c:when test="${dto.pwd == param.pwd}">
					<c:set var="result" value="인증 성공!!" />
					<c:set var="loginId" value="${dto.id}" scope="session" />
					<c:set var="loginName" value="${dto.name}" scope="session" />
				</c:when>
				<c:otherwise>
					<c:set var="result" value="존재하지 않는pwd입니다!!" />
				</c:otherwise>
			</c:choose>
		</c:otherwise>
	</c:choose>
	<c:redirect url="/member/m_login.jsp">
		<c:param name="result" value="${result}"></c:param>
	</c:redirect>
</body>
</html>
<%@ 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>
	<%
		session.invalidate();
		response.sendRedirect(request.getContextPath()+"/member/m_login.jsp");
	%>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP register

<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<hr>
	${param.result}
	<form action="${path}member/m_register.jsp" method="post">
		<input type="text" name="id" placeholder="아이디"><br>
		<input type="text" name="pwd" placeholder="비밀번호"><br>
		<input type="text" name="name" placeholder="이름"><br>
		<input type="text" name="addr" placeholder="주소"><br>
		<input type="text" name="tel" placeholder="전화번호"><br>
		<input type="submit" value="회원가입"><br>
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% request.setCharacterEncoding("utf-8"); %>
	<jsp:useBean id="dto" class="member.MemberDTO"></jsp:useBean>
	<jsp:setProperty property="*" name="dto" />
	
	<jsp:useBean id="dao" class="member.MemberDAO"></jsp:useBean>
	<c:choose>
		<c:when test="${dao.register(dto) == 1}">
			<c:set var="result" value="회원가입 되었습니다!!!"></c:set>
			<c:set var="url" value="m_login.jsp"></c:set>
		</c:when>
		<c:otherwise>
			<c:set var="result" value="문제 발생!!!"></c:set>
			<c:set var="url" value="m_register_form.jsp"></c:set>
		</c:otherwise>
	</c:choose>
	<c:redirect url="${url}">
		<c:param name="result" value="${result}"></c:param>
	</c:redirect>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP list & info

<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<jsp:useBean id="dao" class="member.MemberDAO" />
	<h3>모든 목록 확인</h3>
	<table border="1">
		<tr>
			<th>이름</th>
			<th>주소</th>
			<th>전화번호</th>
		</tr>
		<c:set var="list" value="${dao.getList()}"></c:set>
		<c:forEach var="dto" items="${list}">
		<tr>
			<td>
				<c:choose>
					<c:when test="${loginId ne null }">
						<c:set var="result" value="/m_info.jsp?id=${dto.id}"></c:set>
					</c:when>
					<c:otherwise>
						<c:set var="result" value="/m_login.jsp"></c:set>
					</c:otherwise>
				</c:choose>
				<a href="${path}member${result}">${dto.name}</a>
			</td>
			<td>${dto.addr}</td>
			<td>${dto.tel}</td>
		</tr>
		</c:forEach>
	</table>
</body>
</html>
<%@ 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>
	<%@ include file="/common/header.jsp" %>
	<jsp:useBean id="dao" class="member.MemberDAO"></jsp:useBean>
	<c:set var="dto" value="${dao.getOneMember(param.id)}"></c:set>
	<h3>- 개 인 정 보 -</h3>
	id : ${dto.id}<br>
	pwd : ${dto.pwd}<br>
	name : ${dto.name}<br>
	addr : ${dto.addr}<br>
	tel : ${dto.tel}<br>
	<hr>
	<input type="button" value="수 정" 
		onclick="location.href='m_modify_form.jsp?id=${dto.id}'" >
	<input type="button" value="삭 제" 
		onclick="location.href='m_delete.jsp?id=${dto.id}'" > 
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP modify

<%@ 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>
	<style type="text/css">
		label {display: inline-block; width: 70px;}
	</style>
</head>
<body>
	<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<%@ include file="/common/header.jsp" %>
	<jsp:useBean id="dao" class="member.MemberDAO"></jsp:useBean>
	<c:set var="dto" value="${dao.getOneMember(param.id)}"></c:set>
	<form action="m_modify.jsp" method="post">
		<label>아이디</label><input type="text" readonly name="id" value="${dto.id }"><br>
		<label>비밀번호</label><input type="text" name="pwd" value="${dto.pwd }"><br>
		<label>이 름</label><input type="text" name="name" value="${dto.name }"><br>
		<label>주 소</label><input type="text" name="addr" value="${dto.addr }"><br>
		<label>전화번호</label><input type="text" name="tel" value="${dto.tel }"><br>
		<input type="submit" value="완료">
		<input type="reset" value="취소" onclick="javascript:history.back();">
	</form>
</body>
</html>
<%@ 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>
	<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<% request.setCharacterEncoding("utf-8"); %>
	<jsp:useBean id="dto" class="member.MemberDTO"></jsp:useBean>
	<jsp:setProperty property="*" name="dto"/>
	
	<jsp:useBean id="dao" class="member.MemberDAO"></jsp:useBean>
	
	<c:choose>
		<c:when test="${dao.modify(dto) == 1 }">
			<c:redirect url="m_info.jsp?id=${dto.id}"></c:redirect>
		</c:when>
		<c:otherwise>
			<c:redirect url="m_modify_form.jsp?id=${dto.id}"></c:redirect>
		</c:otherwise>
	</c:choose>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP delete

<%@page import="member.MemberDAO"%>
<%@ 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>
	<%
		MemberDAO dao = new MemberDAO();
		int result = dao.delete(request.getParameter("id"));
		
		if(result == 1){
			response.sendRedirect("m_list.jsp");
		}else{
			response.sendRedirect("m_info.jsp?id=" + request.getParameter("id"));
		}
	%>
</body>
</html>

 

실행 결과

 

'jsp' 카테고리의 다른 글

JSP 활용(3)  (0) 2024.05.02
JSP 활용 (1)  (0) 2024.04.30
JSP 기초  (0) 2024.04.29

 

 

 

 

 

 

JSP response

response : 사용자에게 응답

response.sendRedirect("경로") : 사용자에게 경로를 전달(서버를 실행하면 해당 경로로 바로 이동)

 

<%@ 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>
	login.jsp<br>
	<form action="check.jsp" method="post">
		<input type="text" name="id" placeholder="아이디 입력"><br>
		<input type="text" name="pwd" placeholder="비밀번호 입력"><br>
		<input type="submit" value="login"><br>
	</form>
</body>
</html>
<%@page import="java.io.PrintWriter"%>
<%@ 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>
	check.jsp<br>
	<%
		request.setCharacterEncoding("utf-8");
		String DB_id = "1", DB_pwd = "1";
		String userId = request.getParameter("id");
		String userPwd = request.getParameter("pwd");
		String msg = null;
		if(DB_id.equals(userId) && DB_pwd.equals(userPwd)){
			//response.sendRedirect("main.jsp");
			msg = "<script>alert('로그인 성공');";
			msg += "location.href='main.jsp'</script>";
		}else{
			//response.sendRedirect("login.jsp");
			msg = "<script>alert('로그인 실패!!!');";
			msg += "location.href='login.jsp';</script>";
		}
		PrintWriter pr = response.getWriter();
		pr.print(msg);
	%>
</body>
</html>
<%@ 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>
	main.jsp<br>
	<h1>로그인 성공 페이지</h1>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP scope

.setAttribute() : 영역의 속성을 저장

.getAttribute() : 속성 값을 가져옴

session : 해당하는 브라우저가 바뀌기 전까지는 유지

applicaion : 서버가 종료되기 전까지는 유지

request.getRequestDispatcher("get01.jsp").forward(request, response) : request를 해당페이지까지 유지

<%@ 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>
	set_scope.jsp<br>
	<%
		pageContext.setAttribute("name", "page");
		request.setAttribute("name", "request");
		session.setAttribute("name", "session");
		application.setAttribute("name", "application");
	%>
	page : <%= pageContext.getAttribute("name") %><br>
	request : <%= request.getAttribute("name") %><br>
	session : <%= session.getAttribute("name") %><br>
	application : <%= application.getAttribute("name") %><br>
    	<%--
		request.getRequestDispatcher("get01.jsp").forward(request, response);
	--%>
	<a href="get01.jsp">get01.jsp</a>
</body>
</html>
<%@ 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>
	page : <%= pageContext.getAttribute("name") %><br>
	request : <%= request.getAttribute("name") %><br>
	session : <%= session.getAttribute("name") %><br>
	application : <%= application.getAttribute("name") %><br>
	<a href="get02.jsp">get02.jsp</a>
</body>
</html>
<%@ 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>
	page : <%= pageContext.getAttribute("name") %><br>
	request : <%= request.getAttribute("name") %><br>
	session : <%= session.getAttribute("name") %><br>
	application : <%= application.getAttribute("name") %><br>
	<a href="get01.jsp">get01.jsp</a>
	<a href="set_scope.jsp">set_scope.jsp</a>
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP cookie

Cookie cookie = new Cookie("키값", "밸류값")

cookie.setMaxAge(5) : 얼마나 쿠키를 유지할지 지정(5초)

response.addCookie(cookie) : 쿠키를 응답하겠다(사용자에게 전달)

쿠키명.getName() : 쿠키의 키 값 가져옴

쿠키명.getValue() : 쿠키의 밸류 값 가져옴

* cookie값은 하위에 위치한 폴더에게는 전달 가능하나, 상위에 위치한 폴더에겐 전달 불가

cookie.setPath("/") : 쿠키를 사용할 수 있는 범위 지정(/ = 최상위 폴더이므로 다 사용 가능)

<%@ 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>
	ex01.jsp<br>
	<h1>쿠키 확인</h1>
	<%
		Cookie cookie = new Cookie("testCookie", "myCookie");
		cookie.setMaxAge(5);
		cookie.setPath("/");
		response.addCookie(cookie);
		
		boolean bool = true;
		
		Cookie[] cookieArr = request.getCookies();
		for(Cookie c : cookieArr){
			out.print("name : " + c.getName() + "<br>");
			out.print("value : " + c.getValue() + "<hr>");
			if( c.getName().equals("testCookie") ){
				bool = false;
			}
		}
	%>
	<% if(bool){ %>
			<script type="text/javascript">
				window.open("popup.jsp", "", "width=400, height=200, top=500, left=500");
			</script>
	<% } %>
	<a href="../test.jsp">test.jsp</a>
	<a href="delete.jsp">delete.jsp</a>
</body>
</html>
<%@ 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> - 공 지 사 항 - </h1>
	<h3>내용 . . . .</h3>
	<input type="checkbox" id="chk" onClick="window.close()">
	<label for="chk">하루동안 열지 않음</label>
</body>
</html>
<%@ 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>
	<h3>test.jsp</h3>
	<%
		for( Cookie c :request.getCookies()){
			out.print("name : " + c.getName() + "<br>");
		}
	%>
	<a href="cookie/ex01.jsp">es01.jsp</a>
</body>
</html>
<%@ 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>
	<h3>쿠키 삭제</h3>
	<a href="../test.jsp">test.jsp</a><br>
	<%
		Cookie[] cookieArr = request.getCookies();
		for(Cookie c : cookieArr){
			out.print("name : " + c.getName() + "<br>");
			out.print("value : " + c.getValue() + "<hr>");
			if( c.getName().equals("testCookie") ){
				c.setMaxAge(0);
				c.setPath("/");
				response.addCookie(c);
			}
		}
	%>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP session

session.removeAttribute("세션명") : 세션명에 해당하는 세션만 삭제

session.setMaxInactiveInterval(5) : 5초후에 모든 세션 만료

session.invalidate() : 바로 모든 세션 만료

<%@ 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>
	login.jsp<br>
	<%if(session.getAttribute("loginUser") == null){ %>
		<form action="check.jsp" method="post">
			<input type="text" name="id"><br>
			<input type="text" name="pwd"><br>
			<input type="submit" value="로그인"><br>
		</form>
	<% } else {%>
		<%= session.getAttribute("nick") %>님 로그인 상태입니다.
		<a href="logout.jsp">로그아웃</a>
		<a href="main.jsp">main 이동</a>
	<%} %>
</body>
</html>
<%@ 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>
	<%
		String id="1", pwd="1", nick="홍길동";
		if(id.equals( request.getParameter("id")) &&
						pwd.equals(request.getParameter("pwd")) ){
			session.setAttribute("nick", nick);
			session.setAttribute("loginUser", id);
			response.sendRedirect("main.jsp");
		}else{
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>
<%@ 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>
	<%if(session.getAttribute("nick") == null){ 
		response.sendRedirect("login.jsp");
	} %>
	<h3>로그인 성공 사용자 접근 가능</h3>
	<%= session.getAttribute("nick") %>님 환영합니다.
	<a href="logout.jsp">로그아웃</a>
	<a href="login.jsp">로그인</a>
</body>
</html>
<%@ 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>
	<%
		session.invalidate();
	%>
	<script type="text/javascript">
		alert("로그아웃 되었습니다!");
		location.href="login.jsp";
	</script>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP database

db 접속 방법

String driver = "oracle.jdbc.driver.OracleDriver";

Class.forName(driver);

String url = "jdbc:oracle:thin:@localhost:1521:orcl";

String id = "c##LTY", pwd="1213";

Connection con = DriverManager.getConnection(url, id, pwd);

* 11번전은 orcl => xe, c##LTY => LTY

db sql 실행 방법

PreparedStatement ps = con.prepareStatement(sql);

ResultSet rs = ps.executeQuery();

* ResultSet : bof - 내용1 - 내용2 - ... - eof (ResultSet.next() = true or false)

* sql문 안에 ?가 있으면, ps.setString(순서, 값)을 사용한다

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ 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>
	<%
		String driver = "oracle.jdbc.driver.OracleDriver";
		Class.forName(driver);
		
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		String id="c##LTY", pwd="1213";
		Connection con = DriverManager.getConnection(url, id, pwd);
		System.out.println("--- 연결 성공 ---");
	%>
</body>
</html>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@ 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>
	<%@ include file="driver.jsp" %>
	con : <%= con %><br>
	<%
		String sql = "select * from member_jsp";
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){ %>
			id : <%= rs.getString("id") %><br>
			name : 
				<a href="select_one.jsp?id=<%= rs.getString("id") %>">
					<%= rs.getString("name") %>
				</a>
			<br>
			kor : <%= rs.getInt("kor") %><br>
			eng : <%= rs.getInt("eng") %><br>
			math : <%= rs.getInt("math") %><hr>
		<% } %>
</body>
</html>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@ 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>
	<%@ include file="driver.jsp" %>
	<%	
		String paramId = request.getParameter("id");
		String sql = "select * from member_jsp where id = ?";
		PreparedStatement ps = con.prepareStatement(sql);
		ps.setString(1, paramId);
		ResultSet rs = ps.executeQuery();
		if(rs.next()){ %>
			id : <%= rs.getString("id") %><br>
			name : <%= rs.getString("name") %><br>
			kor : <%= rs.getInt("kor") %><br>
			eng : <%= rs.getInt("eng") %><br>
			math : <%= rs.getInt("math") %><hr>
		<% } %>
        <a href="select_all.jsp">모든 목록 확인</a>
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 액션 태그 (1)

<jsp:forward>

<%@ 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>
	<%
		String msg = (String)request.getAttribute("msg");
		if(msg != null){
			out.print("msg : " + msg + "<br>");
			out.print(request.getParameter("id") + " : 존재하지 않는id<br>");
		}
	%>
	<form action="check.jsp" method="post">
		<input type="text" name="id"><br>
		<input type="text" name="pwd"><br>
		<input type="submit" value="로그인"><br>
	</form>
</body>
</html>
<%@ 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>
	<%
		request.setCharacterEncoding("utf-8");
		String DB_id = "aaa", DB_pwd = "aaa";
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		if(DB_id.equals(id) && DB_pwd.equals(pwd)){ %>
			<jsp:forward page="main.jsp">
				<jsp:param value="로그인 성공!!" name="msg"/>
			</jsp:forward>
		<% }else{ 
			request.setAttribute("msg", "로그인 실패!!!");
			//response.sendRedirect("login.jsp");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		} %>
	%>
</body>
</html>
<%@ 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>
	<%= request.getParameter("id") %>님<br>
	<%= request.getParameter("msg") %><hr>
	<a href="javascript:history.back()">이전</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 액션 태그 (2)

<jsp:include> : 각각의 파일을 따로따로 번역 (변수를 같이 못쓴다)

<%@ include %> : 한꺼번에 번역 (변수를 같이 쓸 수 있다)

<%@ 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>
	<h3>ex01.jsp</h3>
	<a href="jsp_include.jsp">jsp이동</a>
	<a href="tag_include.jsp">tag이동</a>
	<hr>
	<%
		String name = "홍길동";
	%>
</body>
</html>
<%@ 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>
	<jsp:include page="ex01.jsp"></jsp:include>
	<h1>jsp include 페이지</h1>
	<%-- name : <%= name %> --%>
</body>
</html>
<%@ 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>
	<%@ include file="ex01.jsp" %>
	<h1>tag include 페이지</h1>
	name : <%= name %>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 액션 태그 (3)

<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>

<jsp:useBean id="객체명" class="객체 타입(위치)" />

<jsp:setProperty property="변수명" name="객체명" value="값" />

<jsp:getProperty property="변수명" name="객체명" />

<%@ 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>
	<h3>기본 페이지 입니다</h3>
	<hr>
	<a href="show_list.jsp">회원 목록</a> &nbsp; &nbsp;
	<a href="register_form.jsp">회원 가입</a> 
</body>
</html>
<%@ 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>
	<jsp:include page="/bean/index.jsp"></jsp:include>
	<form action="register.jsp">
		<input type="text" name="id" placeholder="id"><br>
		<input type="text" name="pwd" placeholder="pwd"><br>
		<input type="text" name="name" placeholder="name"><br>
		<input type="text" name="addr" placeholder="addr"><br>
		<input type="text" name="tel" placeholder="tel"><br>
		<input type="submit" value="등록"><br>
	</form>
</body>
</html>
<%@page import="member.MemberDAO"%>
<%@page import="member.MemberDTO"%>
<%@ 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>
	<%
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String name = request.getParameter("name");
		String addr = request.getParameter("addr");
		String tel = request.getParameter("tel");
		
		MemberDTO dto = new MemberDTO();
		dto.setId(id); dto.setPwd(pwd);
		dto.setName(name); dto.setAddr(addr);
		dto.setTel(tel);
	
	%>
	id : <%= dto.getId() %><br>
	pwd : <%= dto.getPwd() %><br>
	name : <%= dto.getName() %><br>
	addr : <%= dto.getAddr() %><br>
	tel : <%= dto.getTel() %><br>
	<hr>
	
	<h3>useBean</h3>
	<jsp:useBean id="mDto" class="member.MemberDTO" />
	<jsp:setProperty property="*" name="mDto"/>
	id : <%= mDto.getId() %><br>
	pwd : <%= mDto.getPwd() %><br>
	name : <%= mDto.getName() %><br>
	addr : <%= mDto.getAddr() %><br>
	tel : <%= mDto.getTel() %><br>
	
	<%
		MemberDAO dao = new MemberDAO();
		dao.register(mDto);
		response.sendRedirect("show_list.jsp");
	%>
</body>
</html>
<%@page import="member.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="member.MemberDAO"%>
<%@ 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>
	<jsp:include page="/bean/index.jsp"></jsp:include>
	<hr>
	show_list 페이지 입니다
	<%
		MemberDAO d = new MemberDAO();
	%>
	<jsp:useBean id="dao" class="member.MemberDAO" />
	<%
		ArrayList<MemberDTO> list = dao.getList();
		System.out.println("size : " + list.size());
	%>
	<table border="1">
		<tr>
			<th>아이디</th>
			<th>이름</th>
			<th>주소</th>
		</tr>
		<% for(MemberDTO dd : list){ %>
			<tr>
				<td><%= dd.getId() %></td>
				<td><%= dd.getName() %></td>
				<td><%= dd.getAddr() %></td>
			</tr>
		<% } %>
	</table>
</body>
</html>
package member;

public class MemberDTO {
	String id, pwd, name, addr, tel;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
}
package member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class MemberDAO {
	String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	String user = "c##LTY", pwd="1213";
	Connection con;
	PreparedStatement ps;
	ResultSet rs;
	public MemberDAO() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("--- 드라이브 로드 성공 ---");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public ArrayList<MemberDTO> getList() {
		String sql = "select * from mem_jsp";
		ArrayList<MemberDTO> list = new ArrayList<>();
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				MemberDTO dto = new MemberDTO();
				dto.setId(rs.getString("id"));
				dto.setPwd(rs.getString("pwd"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setTel(rs.getString("tel"));
				list.add(dto);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	public void register(MemberDTO dto) {
		String sql = 
		"insert into mem_jsp(id,pwd,name,addr,tel) values(?,?,?,?,?)";
		try {
			con = DriverManager.getConnection(url, user, pwd);
			ps = con.prepareStatement(sql);
			ps.setString(1, dto.getId());
			ps.setString(2, dto.getPwd());
			ps.setString(3, dto.getName());
			ps.setString(4, dto.getAddr());
			ps.setString(5, dto.getTel());
			ps.execute();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

실행 결과

'jsp' 카테고리의 다른 글

JSP 활용(3)  (0) 2024.05.02
JSP 활용(2)  (0) 2024.05.01
JSP 기초  (0) 2024.04.29

 

 

 

 

JSP 설치

확인 방법 : 설치된 ecipse에서 (crtr + n) - dy 검색 => dynamic web project 가 있으면 확인

 

없으면 설치 진행

https://www.eclipse.org 

 

The Community for Open Collaboration and Innovation | The Eclipse Foundation

The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …

www.eclipse.org

Download - Download Packages - Eclipse IDE for Enterprise Java and Web Developers - windows - Download

 

 

 

 

 

 

 

 

 

 

 

 

apache tomcat 설치

tomcat9 - 64-bit windows zip - 작업할 공간에 압축 풀기

 

 

 

 

 

 

 

 

 

 

 

 

JSP 서버 설정

Dynabic Web Project - project name 지정 -

Target runtime - New Runtim - apache Tomcak v9.0 지정 - create a new local server 체크 - 

Browse - apache-tomcat-9.0.88 - finish

 

 

 

 

 

 

 

 

 

 

 

JSP 실행

webapp - ctrl + n - JSP File - File name - finish

ctrl + shift + s = 전체 저장

(ctrl + F11) - Tomcat v9.0 Server at loclahost 지정 , Always use this server where running this project = 실행 

 

오류 발생 시 : Port Number = 8080 => 아무거나 

 

 

 

 

 

 

 

 

 

 

 

 

JSP UTF-8 설정

UTF-8 : 3바이트 처리, 한글을 효율적으로 처리.

 

window - preperences

general - workspace - UTF-8 설정

web - CSS Files - Encoding - 제일 처음의 UTF-8 설정

web - HTML Files -  Encoding - 제일 처음의 UTF-8 설정

web - JSP Files -  Encoding - 제일 처음의 UTF-8 설정

Apply and Close

 

EUC-KR => UTF-8 로 바뀜.

 

 

 

 

 

 

 

 

 

 

 

 

JSP 기본 태그 

서버 : eclipse, 클라이언트 : chrome(Window - Web Browser - 지정)

System.out.println(); : 서버에서만 보인다.

out.print(); : 클라이언트에서만 보인다.

 

<%! %> : 처음에 한번만 실행하고, 그 다음부터는 실행하지 않는다.

<%@ 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>
	<%--
		int num = 100;
		System.out.println("num :" + num);
		out.print("num :" + num);
	--%>
	<%!
		int num = 1234;
	%>
	<%
		out.print("num : <b> " + num + "</b>");
	%>
	<br>
	num : <h4><%= num++ %></h4>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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>
	<%!
		public String name = "홍길동";
		public void setName(String name) {
			this.name = name;
		}
		public String getName() {
			return name;
		}
		class Abc {
			public String test(){
				return "객체 메소드";
			}
		}
	%>
	기본 이름 : <%= name %><br>
	<% setName("김길이"); %>
	변경 이름 : <%= getName() %><br>
	<% Abc obj = new Abc(); %>
	객체 사용 : <%= obj.test() %>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 기본 문법 

<%@page import="java.util.HashMap"%>
<%@ 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>
	ex04.jsp<br>
	<%
		String name = "홍길동";
		HashMap<String, String> map = new HashMap<>();
		map.put("naver", "https://www.naver.com");
		map.put("google", "https://www.google.co.kr");
	%>
	<input type="text" value="<%= name %>"><br>
	<input type="text" value="<% out.print(name); %>"><br>
	<a href="<%= map.get("naver") %>">네이버</a>
	<a href="<%= map.get("google") %>">구글</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP 상대경로, 절대경로

 

 

default.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>
	/ : 포트까지의 경로<br>
	../ : 현재위치 전<br>
	../../ : 2단계 전<br>
	<h2>default 위치</h2>
	<a href="/2_get_post/test/test1.jsp">test1</a>
	<a href="test/test2/test2.jsp">test2</a>
</body>
</html>

 

 

test1.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>
	<h2>test1 위치</h2>
	<a href="/2_get_post/default.jsp">default</a>
	<a href="/2_get_post/test/test2/test2.jsp">test2</a>
</body>
</html>

 

 

test2.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>
	<h2>test2 위치</h2>
	<a href="../test1.jsp">test1</a>
	<a href="../../default.jsp">default</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP get, post (1)

                      post나 get방식으로 넘어온 값 받기 : request.getParameter("변수명(name)");

* post방식을 한글을 넘기면 깨진다. 따라서 encodinf 처리를 해줘야 한다. : request.getCharacterEncoding("utf-8");

 

<%@ 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>
	<h3>method get</h3>
	<form action="get.jsp" method="get">
		<input type="text" name="id"><br>
		<input type="text" name="pwd"><br>
		<input type="submit" name="submit"><br>
	</form>
	
	<h3>method post</h3>
	<form action="/2_get_post/get_post/post.jsp" method="post">
		<input type="text" name="id"><br>
		<input type="text" name="pwd"><br>
		<input type="submit" name="submit"><br>
	</form>
	
</body>
</html>
<%@ 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>
	<h3>get.jsp</h3>
	id : <%= request.getParameter("id") %><br>
	pwd : <%= request.getParameter("pwd") %><br>
	<a href="form.jsp">form 이동</a>
</body>
</html>
<%@ 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>
<% request.setCharacterEncoding("utf-8"); %>
	<h3>post.jsp</h3>
	id : <%= request.getParameter("id") %><br>
	<%
		String pwd = request.getParameter("pwd");
	%>
	pwd : <%= pwd %><br>
	<a href="form.jsp">form 이동</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP get, post (2)

<%@ 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 action="result.jsp" method="post">
		<input type="text" name="id" placeholder="register id"><br>
		<input type="text" name="pwd" placeholder="register password"><br>
		<input type="text" name="name" placeholder="register name"><br>
		남 : <input type="radio" name="gender" value="남">
		여 : <input type="radio" name="gender" value="여"><br>
		<input type="submit" value="저장">
	</form>
</body>
</html>
<%@ 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>
	<% request.setCharacterEncoding("utf-8"); %>
	<h3>넘어온 값</h3>
	id : <%= request.getParameter("id") %><br>
	pwd : <%= request.getParameter("pwd") %><br>
	name : <%= request.getParameter("name") %><br>
	gender : <%= request.getParameter("gender") %><br>
	<a href="form2.jsp">form이동</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP  지시자

taglib

<%@page import="java.util.ArrayList"%>
<%@ 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>
	<%
		ArrayList<String> list = new ArrayList<>();
		list.add("오늘");
		list.add("내일");
		list.add("그리고");
	%> 
	<%
		for(int i = 0; i < list.size(); i++){
			out.print(list.get(i) + "<br>");
		}
	%>
	<hr>
	<% for(String s : list){ %>
			값 : <%= s %> <br>
	<% } %>
</body>
</html>

 

실행 결과 

 

 

page

<%@ page errorPage="error_msg.jsp"%> : 현재 페이지에 에러 발생시, 해당하는 페이지(error_msg.jsp)로 연결

<%@ page isErrorPage="true" %>

위와 같은 태그가 있으면 exception 사용 가능

<%= exception.getMessage() %> : 에러 내용을 간략하게 알려줌

<%= exception.toString() %> : 에러 내용을 자세하게 알려줌

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="error_msg.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	ex02.jsp<hr>
	<%= 10 / 0 %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>요청 페이지에 문제 발생!!!</h3>
	<%= exception.getMessage() %><br> 
	<%= exception.toString() %><br>
</body>
</html>

 

실행 결과

 

include

* <%@ include %>에서 절대경로를 지정할 때는, 시작점이 webapp이다.

<%@ 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>
	<%
		String name = "홍길동";
	%>
	<header>
		<hr>서브페이지 | 카페 | 메인페이지 <hr>
	</header>
</body>
</html>
<%@ 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>
	<footer>
		<hr>바닥글~ / 회사소개 / 제휴제한 /
	</footer>
</body>
</html>
<%@ 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>
	<%@ include file="header.jsp" %>
	<h1>인크루드 속성</h1> : <%= name %>
	<%@ include file="/tag/footer.jsp" %>
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz01

 

풀이 과정

<%@ 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>
	<a href="/2_get_post/tag/quiz/main.jsp">메인</a>&emsp;
	<a href="/2_get_post/tag/ex01.jsp">ex01</a>&emsp;
	<a href="/2_get_post/tag/error_msg.jsp">ex02(에러)</a>
</body>
</html>
<%@ 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>
	<%@ include file="header.jsp" %>
	<hr>
	<h1>main 기본페이지 입니다</h1>
</body>
</html>
<%@page import="java.util.ArrayList"%>
<%@ 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>
	<%@ include file="/tag/quiz/header.jsp" %>
	<hr>
	<%
		ArrayList<String> list = new ArrayList<>();
		list.add("오늘");
		list.add("내일");
		list.add("그리고");
	%> 
	<%
		for(int i = 0; i < list.size(); i++){
			out.print(list.get(i) + "<br>");
		}
	%>
	<hr>
	<% for(String s : list){ %>
			값 : <%= s %> <br>
	<% } %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="/tag/quiz/header.jsp" %>
	<hr>
	<h3>요청 페이지에 문제 발생!!!</h3>
	
	<%-- 
	<%= exception.getMessage() %><br> 
	<%= exception.toString() %><br>
	--%>
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP request, response (1)

request.getContextPath() : port번호 다음에 들어오는 경로(프로젝트 이름)

* 위에서 언급한 경로는 Servers - server.xml에서 변경 가능

request.getMethod() : 사용자가 요청하는 방식(default = get)

<%@ 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>
	<%= request.getContextPath() %><br>
	<%= request.getMethod() %><br>
	
</body>
</html>

 

실행 결과 

 

 

 

 

 

 

 

 

 

 

 

 

 

JSP request, response (2)

request.getParameter("파라미터명") : 하나의 대한 데이터만 얻어올 때 사용

request.getParameterValues(" 파라미터명") : 여러개의 데이터를 얻어올 때 사용 (배열)

 

* Enumeration<String> e = request.getParameterNames();

request.getParameterNames(); : 받아온 파라미터명을 받아온다 

 request.getParameterNames()는 Enumeration<String> 형식으로 받아온다

 받아온 값은 첫번째는 bof, 마지막에는 eof로 받아온다

e.hasMoreElements() : bof 다음 값이 있으면 true, 다음 값이 eof면 false

e.nextElement() : 해당하는 파라미터명을 출력한다

<%@ 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>
<% String path = request.getContextPath(); %>
경로 : <%= path %>/req/ex02_result.jsp<br>
	<form action="<%= path %>/req/ex02_result.jsp" method="post">
		1 <input type="checkbox" name="chk" value="일">
		2 <input type="checkbox" name="chk" value="이">
		3 <input type="checkbox" name="chk" value="삼">
		<hr>
		우편번호 : <input type="text" name="addr"><br>
		주소 : <input type="text" name="addr"><br>
		상세주소 : <input type="text" name="addr"><br>
		<hr>
		우편번호 : <input type="text" name="a1"><br>
		주소 : <input type="text" name="a2"><br>
		상세주소 : <input type="text" name="a3"><br>
		<input type="submit" value="전송">
	</form>
</body>
</html>
<%@page import="java.util.Enumeration"%>
<%@ 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>
	<% request.setCharacterEncoding("utf-8"); %>
	<%-- 
	chk : <%= request.getParameter("chk") %>
	<hr>
	--%>
	<%
		String[] chks = request.getParameterValues("chk");
		if(chks != null){
			for(String s : chks){
				out.print(s + "<br>");
			}
		}
	%>
	<hr>
	<h3>주소</h3>
	<%
		for(String addr : request.getParameterValues("addr")){
			out.print(addr + "<br>");
		}
	%>
	<hr>
	<h3>주소2</h3>
	<%= request.getParameter("a1") %><br>
	<%= request.getParameter("a2") %><br>
	<%= request.getParameter("a3") %><br>
	<hr>
	<%
		Enumeration<String> e = request.getParameterNames();
		while(e.hasMoreElements()) {
			String name = e.nextElement();
			out.print(name + " : " + request.getParameter(name) + "<br>");
		}
	%>
	<a href="ex02_form.jsp">form</a>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz02

 

풀이 과정

<%@ 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>
	<h2>설문조사 폼 만들기</h2>
	<form action="quiz_result.jsp" method="post">
		이름 : <input type="text" name="name"><br><br>
		소개 : <textarea rows="4" cols="14" name="introduce"></textarea><br><br>
		<fieldset style="width: 300px">
		  <legend>연령 조사</legend>
		  <label for="ten">10대</label>
		  <input type="radio" id="ten" name="age" value="10대">
		  <label for="twenty">20대</label>
		  <input type="radio" id="twenty" name="age" value="20대" checked>
		  <label for="thity">30대</label>
		  <input type="radio" id="thity" name="age" value="30대">
		  <label for="forty">40대</label>
		  <input type="radio" id="forty" name="age" value="40대">
		</fieldset>
		<fieldset style="width: 300px">
		  <legend>취미 조사</legend>
		  <label for="book">책읽기</label>
		  <input type="checkbox" id="book" name="hobby" value="책읽기">
		  <label for="dance">춤추기</label>
		  <input type="checkbox" id="dance" name="hobby" value="춤추기">
		  <label for="mung">멍때리기</label>
		  <input type="checkbox" id="mung" name="hobby" value="멍떄리기">
		</fieldset>
		<input type="submit" value="전송">
	</form>
</body>
</html>
<%@page import="java.util.Enumeration"%>
<%@ 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>
	<% request.setCharacterEncoding("utf-8"); %>
	<h1>설문 조사 결과</h1>
	<%
		Enumeration<String> e = request.getParameterNames();
		while(e.hasMoreElements()){
			String val = e.nextElement();
			
			if(val.equals("name")){
				out.print("이름 : " + request.getParameter(val) + "<br>");
			}else if(val.equals("introduce")){
				out.print("소개 : " + request.getParameter(val) + "<br>");
			}else if(val.equals("age")){
				out.print("나이 : " + request.getParameter(val) + "<br>");
			}else if(val.equals("hobby")){
				out.print("취미 : ");
				if(request.getParameterValues(val).length >= 2){
					for(int i = 0; i < request.getParameterValues(val).length; i++){
						if(i == request.getParameterValues(val).length - 1){
							out.print(request.getParameterValues(val)[i]);
						}else{
							out.print(request.getParameterValues(val)[i] + ", ");
						}
					}
				}else if(request.getParameterValues(val).length == 1){
					out.print(request.getParameter(val));
				}
			}
		}
	%>
</body>
</html>

 

실행 결과

'jsp' 카테고리의 다른 글

JSP 활용(3)  (0) 2024.05.02
JSP 활용(2)  (0) 2024.05.01
JSP 활용 (1)  (0) 2024.04.30

 

 

 

 

 

 

NODE.JS 이미지 구현, 수정 및 삭제

history.back() : 이전 페이지로 돌아가기

const service = require("../../service/board/board_service");
const common = require("../../service/ser_common");

const board_views = {
  list: async (req, res) => {
    const list = await service.boardRead.list();
    res.render("board/list", { list });
  },
  writeForm: (req, res) => {
    const session = req.session;
    const msg = common.sessionCheck(session);
    if (msg != 0) {
      return res.send(msg);
    }
    res.render("board/write_form", { username: session.username });
  },
  data: async (req, res) => {
    const data = await service.boardRead.data(req.params.num);
    const username = req.session.username;
    res.render("board/data", { data, username });
  },
  modifyForm: async (req, res) => {
    const data = await service.boardRead.data(req.params.writeNo);
    res.render("board/modify_form", { data });
  },
};
const board_process = {
  write: async (req, res) => {
    const msg = await service.boardInsert.write(
      req.body,
      req.file,
      req.fileValidation
    );
    res.send(msg);
  },
  delete: (req, res) => {
    console.log("aaaaaaaaaaaaaaaaaaaaaaaaa");
    //데이터베이스 삭제 성공시 file 삭제
    file_process.delete(req.params.imgName);
    service.boardUpdate.delete(req.params.writeNo);
    res.redirect("/board/list");
  },
  modify: async (req, res) => {
    const deleteFile = req.body.change_file_name;
    const message = await service.boardUpdate.modify(req.body, req.file);
    if (req.file != undefined && message.result == 1) {
      file_process.delete(deleteFile);
    }
    res.send(message.msg);
  },
};
const fs = require("fs");
const file_process = {
  delete: (imgName) => {
    if (imgName != "nan") {
      fs.unlinkSync(`./upload_file/${imgName}`);
    }
  },
  download: async (req, res) => {
    const filePath = `./upload_file/${req.params.imgName}`;
    res.download(filePath);
  },
};
module.exports = { board_views, board_process, file_process };
const dao = require("../../database/board/board_dao");
const common = require("../ser_common");

boardUpdate = {
  upHit: (num) => {
    dao.boardUpdate.upHit(num);
  },
  delete: (writeNo) => {
    dao.boardUpdate.delete(writeNo);
  },
  modify: async (body, file) => {
    if (file != undefined) {
      body.origin_file_name = file.originalname;
      body.change_file_name = file.filename;
    }
    console.log("body => ", body);
    const result = await dao.boardUpdate.modify(body);
    console.log("result => ", result);
    let msg, url;
    let message = {};
    message.result = result.rowsAffected;
    if (message.result == 1) {
      msg = "수정 되었습니다";
      url = `/board/data/${body.write_no}`;
    } else {
      msg = "문제 발생 !!!";
      url = `/board/modify_form/${body.write_no}`;
    }
    message.msg = common.getMessage(msg, url);
    return message;
  }
};
const boardRead = {
  list: async () => {
    let list = await dao.boardRead.list();
    list = common.timeModify(list.rows);
    return list;
  },
  data: async (num) => {
    boardUpdate.upHit(num);
    let data = await dao.boardRead.data(num);
    data = common.timeModify(data.rows);
    return data[0];
  },
};
const boardInsert = {
  write: async (body, file, fileValidation) => {
    let msg, url;
    if (fileValidation) {
      msg = fileValidation;
      url = "/board/write_form";
      return common.getMessage(msg, url);
    }
    console.log("file : ", file);
    if (file != undefined) {
      body.origin_file_name = file.originalname;
      body.change_file_name = file.filename;
    } else {
      body.origin_file_name = "nan";
      body.change_file_name = "nan";
    }
    console.log("body : ", body);
    const result = await dao.boardInsert.write(body);
    if (result.rowsAffected === 1) {
      msg = "등록되었습니다!!!";
      url = "/board/list";
    } else {
      msg = "문제 발생!!!";
      url = "/board/write_form";
    }
    return common.getMessage(msg, url);
  },
};
module.exports = { boardRead, boardInsert, boardUpdate };
const con = require("../common_dao");
const boardRead = {
  list: async () => {
    const sql = "select * from board";
    console.log("con : ", con);
    const list = (await con).execute(sql);
    return list;
  },
  data: async (num) => {
    const sql = `select * from board where write_no='${num}'`;
    const data = (await con).execute(sql);
    return data;
  },
};
const boardInsert = {
  write: async (body) => {
    const sql = `insert into board(write_no, id, title, content, origin_file_name,
        change_file_name) values(board_seq.nextval, :id, :title, :content, 
        :origin_file_name, :change_file_name)`;
    const result = await (await con).execute(sql, body);
    console.log("result : ", result);
    return result;
  },
};
boardUpdate = {
  upHit: async (num) => {
    const sql = `update board set hit = hit + 1 where write_no='${num}'`;
    (await con).execute(sql);
  },
  delete: async (writeNo) => {
    const sql = `delete from board where write_no=${writeNo}`;
    (await con).execute(sql);
  },
  modify: async (body) => {
    const sql = `update board set title=:title, content=:content, 
        origin_file_name=:origin_file_name, 
        change_file_name=:change_file_name where write_no=:write_no`;
    let result = 0;
    try {
      result = (await con).execute(sql, body)
    } catch (err) {
      console.log(err);
    }
    return result;
  },
};
module.exports = { boardRead, boardInsert, boardUpdate };

 

list.ejs

<%- include ("../default/header") %>
<div class="content wrap">
    <table border="1" style="width:100%;">
        <tr>
            <th>번호</th> <th>id</th> <th>제목</th> <th>날짜</th>
            <th>조회수</th> <th>원본 이미지이름</th> <th>변경 이미지이름</th>
        </tr>
        <% if( list.length == 0){ %>
            <tr>
                <th colspan="7">등록된 글이 없습니다</th>
            </tr>
        <%}else{
            list.forEach(data=>{%>
            <tr>
                <td><%=data.WRITE_NO%></td><td><%=data.ID%></td>
                <td><a href="/board/data/<%= data.WRITE_NO %>"><%=data.TITLE%></a></td><td><%=data.SAVE_DATE%></td>
                <td><%=data.HIT%></td><td><%=data.ORIGIN_FILE_NAME%></td>
                <td><%=data.CHANGE_FILE_NAME%></td>
            </tr>
            <%})
        }%>
        <tr>
            <td colspan="7" align="right">
                <a href="/board/write_form">글 작성</a>
            </td>
        </tr>
    </table>
</div>

 

data.ejs

<%- include ("../default/header") %>
<div class="content wrap">
    <div style="width:600px; margin: 0 auto;">
    <h3 style="text-align: center; margin-bottom: 10px;"> - 개 인 정 보 - </h3>
    <table border="1" align="center">
        <tr>
            <th width="100">글 번호</th> <td width="200"><%= data.WRITE_NO %></td> 
            <th width="100">작성자</th>  <td width="200"><%= data.ID %></td>
        </tr>
        <tr>
            <th>제목</th> <td><%= data.TITLE %></td> 
            <th>등록일자</th> <td><%= data.SAVE_DATE %></td>
        </tr>
        <tr>
            <th>내용</th><td><%= data.CONTENT %></td> 
            <td colspan="2">
                <% if( data.ORIGIN_FILE_NAME === "nan"){%>
                    <b>이미지가 없습니다
                <%}else{%>
                    <b>이미지 : <%=data.ORIGIN_FILE_NAME%> </b>
                    <br>
                    <img src="/board/download/<%= data.CHANGE_FILE_NAME %>" width="100px" height="100px">
                <%}%>
            </td>
        </tr>
        <tr>
            <td colspan="4" align="center">
                <%if(username === data.ID){%>
                    <input type="button" onclick="location.href=
                    '/board/modify_form/<%= data.WRITE_NO %>'" value="수정하기"> 
                    <input type="button" onclick="location.href=
                    '/board/delete/<%=data.WRITE_NO%>/<%=data.CHANGE_FILE_NAME%>'"
                    value="삭제하기">
                <%}%>
                <input type="button" onclick="" value="답글달기"> 
                <input type="button" onclick="" value="리스트로 돌아가기">
            </td>
        </tr>
        </table>
    </div>
</div>

modify_form.ejs

<%- include ("../default/header") %>
<script src="/static/js/image_read.js"></script>
<div class="content wrap">
<div style="width:300px; margin: 0 auto;">
    <form action="/board/modify" enctype="multipart/form-data" method="post" >
        <input type="hidden" name="write_no" value="<%=data.WRITE_NO%>">
        <input type="hidden" name="change_file_name" value="<%=data.CHANGE_FILE_NAME%>">
        <input type="hidden" name="origin_file_name" value="<%=data.ORIGIN_FILE_NAME%>">
        제목  <input type="text" size="30" name="title" value="<%=data.TITLE%>"><hr>
        내용  <textarea rows="5" cols="30" name="content"><%=data.CONTENT%></textarea>
        <hr>
        <img width="200px" height="100px" id="img"
                        src="/board/download/<%=data.CHANGE_FILE_NAME%>">
        <input type="file" name="image_file_name" onchange="readURL(this)">
        <hr>
        <input type="submit" value="수정하기">
        <input type="button" onclick="history.back()" value="이전으로 돌아가기">
    </form>
</div>
</div>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS 페이징 및 댓글 달기

 

 

reply.css 작성

#modal_wrap{
    display: none; position: fixed; z-index: 9;
    margin: 0 auto; top:0; left: 0; right: 0;
    width:100%; height:100%;
    background-color: rgba(0, 0, 0, 0.4);
}
#first{ 
    position: fixed; z-index: 10; margin: 0 auto;
    top:30px; left: 0; right: 0; display:none;
    background-color: rgba(212, 244, 250, 0.9);
    height:350px; width:300px;
}

reply.css 코드

 

reply.js 작성

function reply_form(){
    $("#first").slideDown('slow'); 
    $("#modal_wrap").show();
}
function reply_hide(){
    $("#first").slideUp('fast'); 
    $("#modal_wrap").hide();
}
function rep(){
    let form={}; 
    let arr = $("#frm").serializeArray();
    arr.forEach( d => { form[d.name] = d.value; })
    fetch("/boardrep/register", {
        method : "post",
        headers : {"Content-Type" : "application/json"},
        body : JSON.stringify( form )
    })
    .then(res => res.json() )
    .then( result => {
        if(result === 1)
            alert("답글이 달렸습니다!!")
        reply_hide();
    })
}

reply.js 코드

 

reply_form.ejs 작성

<link href="/static/css/reply.css" rel="stylesheet" >
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="/static/js/reply.js"></script>
<div id="modal_wrap">
    <div id="first">
        <div style="width:250px;margin: 0 auto;padding-top: 20px;">
            <form id="frm">
                <input type="hidden" name="write_no" value="<%= data.WRITE_NO %>">
                <input type="hidden" name="id" value="<%= username %>">
                <b>답글 작성 페이지</b> <hr>
                <b>작성자 : <%= username %></b> <hr>
                <b>제목</b><br><input type="text" size="30" name="title"><hr>
                <b>내용</b><br>
                <textarea name="content" rows="5" cols="30"></textarea>
                <hr>
                <button type="button" onclick="rep()">답글</button>
                <button type="button" onclick="reply_hide()">취소</button>
            </form>
        </div>
    </div>
</div>

reply_form.ejs 코드

 

data.ejs 위에 작성

 

data.ejs 에 추가 작성 ( 이 작업은 댓글 창을 따로 띄우는 것이 아닌 페이지 내에 띄우는 작업, 댓글 창 스타일에 따라 작성 )

 

답글 달기 버튼을 눌렀을때 텍스트 박스와 답변 버튼이 조그맣게 생기는 부분이 data.ejs 하단에 script 와 button, div, form 태그 추가한 부분

 

댓글을 달때 fetch 를 통해 넘어오는 json 형태의 데이터를 받기 위해 app.js 에 json 형태를 받을 수 있게 추가

 

기본 router.js 에서 답글 기능에 대한 라우터를 board_reply_router.js 에 위임

 

board_reply_router.js 에 경로 작성

 

board_reply_ctrl.js 에 로직 작성

 

board_reply_service.js 작성

 

board_reply_dao.js 작성

 

reply_view.js 작성

function init( groupNum ){
        fetch(`/boardrep/replyData/`+groupNum )
        .then( res => res.json() )
        .then( data => {
            let html = ""
            data.forEach((d)=>{
                html += "<div align='left'><b>아이디 : </b>"+d.ID+"님 / ";
                html += "<b>작성일</b> : "+d.SAVE_DATE+"<br>"
                html += "<b>제목</b> : "+d.TITLE+"<br>"
                html += "<b>내용</b> : "+d.CONTENT+"<hr></div>"
            });
            const content = document.getElementById("content");
            content.innerHTML = html;
        });
    }

reply_view.js 코드

 

data.ejs 에 내용 추가 ( td 추가한 부분은 댓글 부분 )

 

header.ejs 에 작성 ( header.ejs 가 onload 로 기본으로 실행될 때 init 함수가 실행되게 함

 

board_reply_router.js 작성

 

board_reply_ctrl.js 작성

 

board_reply_service.js 작성 ( 시간을 설정하기 위해 ser_common 의 기능을 호출하여 사용함 )

 

board_reply_dao.js 작성

 

 

 

현재는 답글 달면 새로고침 하기 전에 보이지 않는데 바로 댓글 입력한 데이터를 바로 출력하게끔 입력 받은 값을 덧붙여서 출력 ( 새로 고침을 하게 되면 DB 에서 끌고온 데이터가 출력되며, 이 방법은 일시적으로 데이터를 출력할 뿐 )

 

댓글을 바로 데이터로 덧붙여서 보여주게끔 설정, 위 코드는 일시적으로 댓글을 달면 자신이 단 댓글을 보여줄 뿐이며 실제 DB 에 적용된 데이터는 새로고침을 하면 출력되게 된다

 

실행 결과

 

 

 

'node.js' 카테고리의 다른 글

NODE.JS 활용 (7)  (0) 2024.04.08
NODE.JS 활용 (6)  (0) 2024.04.05
NODE.JS 활용 (5)  (0) 2024.04.04
NODE.JS 활용 (4)  (0) 2024.04.02
NODE.JS 활용 (3)  (0) 2024.04.01

 

 

 

 

 

NODE.JS 페이징(게시판) (1)

oracledb.OBJECT : 불러온 db를 키, 값 형태로 가져오기

create sequence test_num : 1부터 1씩 증가시키겠다

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS 페이징(게시판) (2)

 

const oracledb = require("oracledb");
const dbConfig = require("./../../config/db_config");

oracledb.outFormat = oracledb.OBJECT; //키, 값 형태로 가져오기
oracledb.autoCommit = true;

const daoRead = {
  list: async () => {
    const con = await oracledb.getConnection(dbConfig);
    let result = await con.execute("select * from paging");
    return result;
  },
  content: async (num) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `select * from paging where num='${num}'`;
    const data = await con.execute(sql);
    return data;
  }
};

const daoInsert = {
  write: async (body) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `insert into paging values(test_num.nextval,:title, sysdate, 0)`;
    let result = 0;
    try {
      result = await con.execute(sql, body);
    } catch (err) {
      console.log(err);
    }
  },
};

const daoUpdate = {
    upHit: async (num) => {
        const con = await oracledb.getConnection(dbConfig);
        const sql = `update paging set count=count+1 where num='${num}'`;
        await con.execute(sql);
    }
}
module.exports = { daoRead, daoInsert, daoUpdate };

 

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS 페이징(게시판) (3)

* 한 페이지당 몇개의 글을 보여줄지 적용하는 방식

rownum : 글을 삭제하거나 추가하더라도, 개수만을 세어주는 역할이기 때문에 공백없이 잘 가져올 수 있다

 

Controller

const service = require("../service/page_service");
const views = {
  index: (req, res) => {
    res.render("index");
  },
  list: async (req, res) => {
    console.log("req.query.start : ", req.query.start);
    const totalContent = await service.pageRead.totalContent();

    const data = await service.pageRead.list(req.query.start, totalContent);

    //const list = await service.pageRead.list();
    console.log("data : ", data);
    console.log("data.list : ", data.list);
    console.log("data.start : ", data.start);
    res.render("list", { list: data.list, page: data.page, start: data.start, totalContent });
  },
  writeForm: (req, res) => {
    res.render("write_form");
  },
  content: async (req, res) => {
    const data = await service.pageRead.content(req.params.num);
    res.render("content", { data });
  },
};
const process = {
  write: async (req, res) => {
    const msg = await service.pageInsert.write(req.body);
    res.redirect("/page/list");
  },
};
module.exports = { views, process };

Service

const dao = require("../database/pageDAO");
const pageRead = {
  list: async (start, totalC) => {
    start = start && start > 1 ? Number(start) : 1;

    const page = pageOperation(start, totalC);

    const list = await dao.daoRead.list(page.startNum, page.endNum);
    console.log("service : ", list);

    data = {};
    data.page = page; 
    data.start = start;
    data.list = list.rows;

    return data;
  },
  content: async (num) => {
    await pageUpdate.upHit(num);

    const data = await dao.daoRead.content(num);
    return data.rows[0];
  },
  totalContent: async () => {
    const totalContent = await dao.daoRead.totalContent();
    console.log(totalContent);
    return totalContent.rows[0]["COUNT(*)"];
  },
};

const pageOperation = (start, totalContent) => {
  let page = {};
  const pageNum = 3; //하나의 페이지에 몇개의 게시물을 보여줄 지...
  const num = (totalContent % pageNum == 0) ? 0 : 1; 
  page.totPage = parseInt(totalContent / pageNum) + num;// 총 페이지 수
  page.startNum = (start - 1) * pageNum + 1; //start에 따라 페이지에 처음으로 보여줄 게시물
  page.endNum = start * pageNum;  //start에 따라 페이지에 마지막으로 보여줄 게시물
  return page;
};

const pageUpdate = {
  upHit: async (num) => {
    await dao.daoUpdate.upHit(num);
  },
};
const pageInsert = {
  write: async (body) => {
    const result = await dao.daoInsert.write(body);
  },
};
module.exports = { pageRead, pageInsert, pageOperation };

DAO

const oracledb = require("oracledb");
const dbConfig = require("./../../config/db_config");

oracledb.outFormat = oracledb.OBJECT; //키, 값 형태로 가져오기
oracledb.autoCommit = true;

const daoRead = {
  list: async (s, e) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `select B.* from
                    (select rownum rn, A.* from
                        (select * from paging order by num desc)A)B 
                            where rn between ${s} and ${e}`;
    let result = await con.execute(sql);
    return result;
  },
  content: async (num) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `select * from paging where num='${num}'`;
    const data = await con.execute(sql);
    return data;
  },
  totalContent: async () => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = "select count(*) from paging";
    const totalContent = await con.execute(sql);
    return totalContent;
  },
};

const daoInsert = {
  write: async (body) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `insert into paging values(test_num.nextval,:title, sysdate, 0)`;
    let result = 0;
    try {
      result = await con.execute(sql, body);
    } catch (err) {
      console.log(err);
    }
  },
};

const daoUpdate = {
  upHit: async (num) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `update paging set count=count+1 where num='${num}'`;
    await con.execute(sql);
  },
};
module.exports = { daoRead, daoInsert, daoUpdate };

ejs

<table border="1">
    <tr>
        <th>번호</th> <th>제목</th> <th>등록날짜</th> <th>조회수</th>
    </tr>
<% list.forEach( data => { %>
    <tr>
        <td><%= data.NUM %></td>  
        <td><a href="/page/content/<%= data.NUM %>"><%= data.TITLE %></a></td>
        <td><%= data.PDATE %></td> 
        <td><%= data.COUNT %></td>
    </tr>
<% });
if( list.length == 0 ){%>
    <tr><td colspan="4"><b>등록된 정보가 없습니다</b></td></tr>
<%} %>
    <tr><td colspan="4">
        <% if( start <= 1){ %>
            <button disabled>이전</button>
        <%}else{%>
            <button type="button" onclick="
                location.href='/page/list?start=<%=start - 1%>'">이전</button>
        <% }for(let i=1 ; i <= page.totPage ; i++ ){ %>
            <a href="/page/list?start=<%= i %>"><%= i %></a>
        <% }if( start < page.totPage ){%>
            <button type="button" onclick="
                location.href='/page/list?start=<%=start + 1%>'">다음</button>
        <% }else{ %>
            <button disabled>다음</button>
        <% } %>
            <br>
        start : <%= start %> / <%= page.totPage %> / <a href="/page/write_form">글 등록</a>
    </td></tr>
</table>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS 페이징(게시판) (4)

quiz_dbconnect_board.zip
3.00MB

 

 

 

위 파일에 이어서 작업

 

<link href="/static/css/header.css" rel="stylesheet" />
<script>
  window.onload = () => {
    console.log(document.cookie);
    let msg = "<li><a href='/'>HOME</a></li>";

    msg += "<li><a href='/board/list'>BOARD</a></li>";

    if (document.cookie.indexOf("isLogin=true") !== -1) {
      msg += '<li><a href="/member/logout">로그아웃</a></li>';
      msg += '<li><a href="/member/list">회원정보</a></li>';
    } else {
      msg += '<li><a href="/member/login">로그인</a></li>';
      msg += '<li><a href="/member/login">회원정보</a></li>';
    }
    document.querySelector("#nav ul").innerHTML = msg;
  };
</script>
<div class="wrap">
  <div class="header">
    <h1 class="title">CARE LAB</h1>
  </div>
</div>
<div class="navdiv">
  <div class="wrap">
    <nav id="nav" class="nav">
      <ul></ul>
    </nav>
  </div>
</div>
<hr />
<%- include ("../default/header") %>
<script src="/static/js/image_read.js"></script>
<div class="content wrap">
    <div style="width: 400px; margin: 0 auto; ">
        <h1 style="text-align: center">글쓰기</h1>
        <form method="post" action="/board/write" 
                                        enctype="multipart/form-data">
            <b>작성자</b><br>   <!-- readonly : 읽기 전용 -->
            <input type="text" name="id" value="<%= username %>" readonly />
            <hr>
            <b>제목</b> <br> <input type="text" size="50" name="title" /><hr>
            <b>내용</b> <br>
            <textarea name="content" rows="10" cols="50"></textarea><hr>
            <b>이미지파일 첨부</b><br>
            <input type="file" name="image_file_name" onchange="readURL(this);" /> 
            <img id="img" src="#" width=100 height=100 alt="선택된 이미지가 없습니다" />
            <hr> 
            <input type="submit" value="글쓰기">
            <input type=button value="목록보기" onClick="location.href='/board/list'">
        </form>
    </div>
</div>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS 페이징(게시판) (5)

const service = require("../../service/board/board_service");
const common = require("../../service/ser_common");

const board_views = {
  list: async (req, res) => {
    const list = await service.boardRead.list();
    res.render("board/list", { list });
  },
  writeForm: (req, res) => {
    const session = req.session;
    const msg = common.sessionCheck(session);
    if (msg != 0) {
      return res.send(msg);
    }
    res.render("board/write_form", { username: session.username });

  },
};
const board_process = {
    write : async (req, res) => {
        const msg = await service.boardInsert.write(
            req.body, req.file, req.fileValidation
        );
        res.send(msg);
    }
}
module.exports = { board_views, board_process };
const dao = require("../../database/board/board_dao");
const common = require("../ser_common");

const boardRead = {
  list: async () => {
    let list = await dao.boardRead.list();
    list = common.timeModify(list.rows);
    return list;
  },
};
const boardInsert = {
  write: async (body, file, fileValidation) => {
    let msg, url;
    if (fileValidation) {
      msg = fileValidation;
      url = "/board/write_form";
      return common.getMessage(msg, url);
    }
    console.log("file : ", file);
    if (file != undefined) {
      body.origin_file_name = file.originalname;
      body.change_file_name = file.filename;
    } else {
      body.origin_file_name = "nan";
      body.change_file_name = "nan";
    }
    console.log("body : ", body);
    const result = await dao.boardInsert.write(body);
    if (result.rowsAffected === 1) {
        msg = "등록되었습니다!!!";
        url = "/board/list"
    }else{
        msg = "문제 발생!!!";
        url = "/board/write_form";
    }
    return common.getMessage(msg, url)
  },
};
module.exports = { boardRead, boardInsert };
const con = require("../common_dao");
const boardRead = {
  list: async () => {
    const sql = "select * from board";
    console.log("con : ", con);
    const list = (await con).execute(sql);
    return list;
  },
};
const boardInsert = {
    write: async (body) => {
        const sql = `insert into board(write_no, id, title, content, origin_file_name,
        change_file_name) values(board_seq.nextval, :id, :title, :content, 
        :origin_file_name, :change_file_name)`;
        const result = await (await con).execute(sql, body);
        console.log("result : ", result);
        return result;
    }
}
module.exports = { boardRead, boardInsert };

<link href="/static/css/header.css" rel="stylesheet" />
<script>
  window.onload = () => {
    console.log(document.cookie);
    let msg = "<li><a href='/'>HOME</a></li>";

    msg += "<li><a href='/board/list'>BOARD</a></li>";

    if (document.cookie.indexOf("isLogin=true") !== -1) {
      msg += '<li><a href="/member/logout">로그아웃</a></li>';
      msg += '<li><a href="/member/list">회원정보</a></li>';
    } else {
      msg += '<li><a href="/member/login">로그인</a></li>';
      msg += '<li><a href="/member/login">회원정보</a></li>';
    }
    document.querySelector("#nav ul").innerHTML = msg;
  };
</script>
<div class="wrap">
  <div class="header">
    <h1 class="title">CARE LAB</h1>
  </div>
</div>
<div class="navdiv">
  <div class="wrap">
    <nav id="nav" class="nav">
      <ul></ul>
    </nav>
  </div>
</div>
<hr />
<%- include ("../default/header") %>
<script src="/static/js/image_read.js"></script>
<div class="content wrap">
    <div style="width: 400px; margin: 0 auto; ">
        <h1 style="text-align: center">글쓰기</h1>
        <form method="post" action="/board/write" 
                                        enctype="multipart/form-data">
            <b>작성자</b><br>   <!-- readonly : 읽기 전용 -->
            <input type="text" name="id" value="<%= username %>" readonly />
            <hr>
            <b>제목</b> <br> <input type="text" size="50" name="title" /><hr>
            <b>내용</b> <br>
            <textarea name="content" rows="10" cols="50"></textarea><hr>
            <b>이미지파일 첨부</b><br>
            <input type="file" name="image_file_name" onchange="readURL(this);" /> 
            <img id="img" src="#" width=100 height=100 alt="선택된 이미지가 없습니다" />
            <hr> 
            <input type="submit" value="글쓰기">
            <input type=button value="목록보기" onClick="location.href='/board/list'">
        </form>
    </div>
</div>
<%- include ("../default/header") %>
<div class="content wrap">
    <table border="1" style="width:100%;">
        <tr>
            <th>번호</th> <th>id</th> <th>제목</th> <th>날짜</th>
            <th>조회수</th> <th>원본 이미지이름</th> <th>변경 이미지이름</th>
        </tr>
        <% if( list.length == 0){ %>
            <tr>
                <th colspan="7">등록된 글이 없습니다</th>
            </tr>
        <%}else{
            list.forEach(data=>{%>
            <tr>
                <td><%=data.WRITE_NO%></td><td><%=data.ID%></td>
                <td><%=data.TITLE%></td><td><%=data.SAVE_DATE%></td>
                <td><%=data.HIT%></td><td><%=data.ORIGIN_FILE_NAME%></td>
                <td><%=data.CHANGE_FILE_NAME%></td>
            </tr>
            <%})
        }%>
        <tr>
            <td colspan="7" align="right">
                <a href="/board/write_form">글 작성</a>
            </td>
        </tr>
    </table>
</div>

 

실행 결과

 

'node.js' 카테고리의 다른 글

NODE.JS 활용 (8)  (0) 2024.04.09
NODE.JS 활용 (6)  (0) 2024.04.05
NODE.JS 활용 (5)  (0) 2024.04.04
NODE.JS 활용 (4)  (0) 2024.04.02
NODE.JS 활용 (3)  (0) 2024.04.01

+ Recent posts