반응형

회원가입 버튼 클릭시 실행되는 서블릿

@MemberEnrollFormController.java

회원가입 폼화면으로 forward만 시켜줌

package com.kh.mybatis.member.controller;

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

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("WEB-INF/views/member/memberEnrollForm.jsp").forward(request, response);
	}

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

}

 

VO 클래스 생성

@Member.java

package com.kh.mybatis.member.model.vo;

import java.sql.Date;

public class Member {
	
	private int userNo;			//	USER_NO			NUMBER
	private String userId;			//	USER_ID			VARCHAR2(30 BYTE)
	private String userPwd;			//	USER_PWD		VARCHAR2(100 BYTE)
	private String userName;		//	USER_NAME		VARCHAR2(15 BYTE)
	private String email;			//	EMAIL			VARCHAR2(100 BYTE)
	private String birthday;		//	BIRTHDAY		VARCHAR2(6 BYTE)
	private String gender;			//	GENDER			VARCHAR2(1 BYTE)
	private String phone;			//	PHONE			VARCHAR2(13 BYTE)
	private String address;			//	ADDRESS			VARCHAR2(100 BYTE)
	private Date enrollDate;		//	ENROLL_DATE		DATE
	private Date modifyDate;		//	MODIFY_DATE		DATE
	private String status;			//	STATUS			VARCHAR2(1 BYTE)
	
	public Member() {
		super();
	}

	public Member(int userNo, String userId, String userPwd, String userName, String email, String birthday,
			String gender, String phone, String address, Date enrollDate, Date modifyDate, String status) {
		super();
		this.userNo = userNo;
		this.userId = userId;
		this.userPwd = userPwd;
		this.userName = userName;
		this.email = email;
		this.birthday = birthday;
		this.gender = gender;
		this.phone = phone;
		this.address = address;
		this.enrollDate = enrollDate;
		this.modifyDate = modifyDate;
		this.status = status;
	}
	
	

	public Member(String userId, String userPwd, String userName, String email, String birthday,
			String gender, String phone, String address) {
		super();
		this.userId = userId;
		this.userPwd = userPwd;
		this.userName = userName;
		this.email = email;
		this.birthday = birthday;
		this.gender = gender;
		this.phone = phone;
		this.address = address;
	}

	public int getUserNo() {
		return userNo;
	}

	public void setUserNo(int userNo) {
		this.userNo = userNo;
	}

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Date getEnrollDate() {
		return enrollDate;
	}

	public void setEnrollDate(Date enrollDate) {
		this.enrollDate = enrollDate;
	}

	public Date getModifyDate() {
		return modifyDate;
	}

	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	@Override
	public String toString() {
		return "Member [userNo=" + userNo + ", userId=" + userId + ", userPwd=" + userPwd + ", userName=" + userName
				+ ", email=" + email + ", birthday=" + birthday + ", gender=" + gender + ", phone=" + phone
				+ ", address=" + address + ", enrollDate=" + enrollDate + ", modifyDate=" + modifyDate + ", status="
				+ status + "]";
	}
	
	
}

 

Service 인터페이스 생성

@MemberService.java

MemberService 인터페이스에서 설계하고 implements 받은 MemberServiceImpl 클래스에서 구현

인터페이스는 상수필드 또는 추상메소드만 오기때문에 public static final, public abstract 생략 가능

package com.kh.mybatis.member.model.service;

import com.kh.mybatis.member.model.vo.Member;

public interface MemberService {
	int insertMember(Member m);
}

 

ServiceImpl 클래스 생성

@MemberServiceImpl.java

이전까지는 매번 xml을 불러오는 기본생성자 new MemberDao()를 호출했지만(예. new MemberDao().updateMember)
이 경우 매번 호출이 되므로 비효율적임

전역변수로 만들어놓은 후 재사용!

package com.kh.mybatis.member.model.service;

import org.apache.ibatis.session.SqlSession;

import com.kh.mybatis.common.template.Template;
import com.kh.mybatis.member.model.dao.MemberDao;
import com.kh.mybatis.member.model.vo.Member;

public class MemberServiceImpl implements MemberService{
	
	private MemberDao memberDao = new MemberDao();
	
	@Override
	public int insertMember(Member m) {
		
		SqlSession sqlSession = Template.getSqlSession();
		
		int result = memberDao.insertMember(sqlSession, m);
		
		if(result>0) {
			sqlSession.commit();
		} else {
			sqlSession.rollback();
		}
		
		sqlSession.close();
		
		return result;
	}
}

 

Dao클래스 생성 및 mapper 생성

@MemberDao.java

sqlSession에서 제공하는 메소드를 통해 sql문을 찾아 실행후 결과를 받음
sqlSession.sql문종류메소드("메퍼파일namespace.sql문id", sql문을완성시킬객체);
-> 해당 sql문이 완성상태(위치홀더가없을때)이면 sql문을완성시킬객체는 생략

package com.kh.mybatis.member.model.dao;

import org.apache.ibatis.session.SqlSession;

import com.kh.mybatis.member.model.vo.Member;

public class MemberDao {

	public int insertMember(SqlSession sqlSession, Member m) {
    
		return sqlSession.insert("memberMapper.insertMember",m);
	}
}

@member-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
  <mapper namespace="memberMapper">
  
	  	<insert id="insertMember" parameterType="member">
	  	   INSERT 
	  	   		INTO MEMBER 
                		(
	  	   		USER_NO,
	            	        USER_ID,
	                 	USER_PWD,
	                    	USER_NAME,
		                EMAIL,
		                BIRTHDAY,
		                GENDER,
		                PHONE,
		                ADDRESS
		                )
	            VALUES(
	            	    SEQ_UNO.NEXTVAL,
	                    #{userId},
	                    #{userPwd},
	                    #{userName},
	                    #{email},
	                    #{birthday},
	                    #{gender},
	                    #{phone},
	                    #{address}
	                    )                                 
	  	</insert>
  
  </mapper>
반응형
반응형

SqlSession 객체 생성 및 반환

mybatis-config.xml 파일을 읽어서 해당 DB에 접속 SqlSession 객체 생성 및 반환

 

선언 및 초기화

 

sqlSession 객체를 생성하기 위해서 sqlSessionFactory 객체가 필요하고
sqlSessionFactory 객체를 생성하기 위해선 sqlSessionFactoryBuilder 객체가 필요함

new SqlSessionFactoryBuilder() : SqlSessionFactoryBuilder 객체 생성
→ .build(stream) : 통로로부터 mybatis-config.xml 파일을 읽어들이면서 sqlSessionFactory 객체를 만들겠다
→ .openSession() : SqlSession 객체 생성

	public static SqlSession getSqlSession() {

		SqlSession sqlSession = null;

		String resource = "/mybatis-config.xml";
		
		try {
			InputStream stream = Resources.getResourceAsStream(resource); 
			
			sqlSession = new SqlSessionFactoryBuilder().build(stream).openSession(); 	
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sqlSession;
	}
반응형

'MyBatis' 카테고리의 다른 글

[MyBatis] 개요 및 다운로드  (0) 2023.03.27
[MyBatis] mapper.xml  (0) 2022.06.15
[MyBatis] 회원가입 기능 구현  (0) 2022.06.15
[MyBatis] XML설정파일 mybatis-config.xml  (0) 2022.06.14
반응형

XML에서 SqlSessionFactory 빌드하기

모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용하기 때문에 빌드해야함

 

mybatis-config.xml 파일 생성

XML설정파일인 mybatis-config는 소스폴더에 넣어야함 배포폴더(classes)에 담기기 때문

DTD : 유효성체크(이 페이지에 있는 태그들이 configuration 태그 안에 존재해도 되는지 유효성체크 해주는 구문)

 

<configuration>

이 문서의 형식이 configuration(환경설정) 이라는 것을 알려주기 위해 구문 추가함

(configuration 태그가 전체를 감싸는 형태)

 

<settings>

Mybatis 구동 시 선언할 설정들을 작성하는 태그 영역

만약 null로 데이터가 전달된 경우 빈칸이 아닌 NULL로 인식(반드시 대문자 NULL로 작성) - 공식사이트 참고

 

<typeAliases>

VO/DTO 클래스의 풀 클래스명을 단순한 클래스명으로 사용하기 위해 별칭(보통소문자)을 등록할 수 있는 영역

 

<environments>

Mybatis에서 연동할 DB에 대한 정보들을 등록하는 영역(여러개 DB 정보 등록 가능)
단, default 속성으로 여러개의 id 중 어떤 DB를 기본 DB로 사용할 것인지 설정 필요

   <transactionManager type="JDBC/MANAGED "/>

       - JDBC : 트랜잭션 처리를 직접 관리(수동 commit)
       - MANAGED : 트랜잭션에 관여하지 않음(자동 commit)

   <dataSource type="POOLED/UNPOOLED ">

      - Connection pool 사용 여부 설정
      - Connection pool : connection 객체를 담아둘수 있는 영역, 한번 생성된 connection 객체 재사용 가능
      - POOLED : Connection pool 사용O
      - UNPOOLED : Connection pool 사용X

 

<mappers>

실행할 sql문들을 기록해둔 파일 등록 영역

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
   <configuration>
   
   	<settings>
   		<setting name="jdbcTypeForNull" value="NULL"/>
   	</settings>
   	
   	<typeAliases>
   		<typeAlias type="com.kh.mybatis.member.model.vo.Member" alias="member"/>
   		<typeAlias type="com.kh.mybatis.board.model.vo.Board" alias="board"/>
   	</typeAliases>
   	
   	<environments default="development">
   		<environment id="development">
   			 <transactionManager type="JDBC"/>
   			 <dataSource type="POOLED">
   			 	<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
   			 	<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
   			 	<property name="username" value="mybatis"/>
   			 	<property name="password" value="mybatis"/>
   			 </dataSource>
   		</environment>
   	</environments>
   
   	<mappers>
   		<mapper resource="/mappers/member-mapper.xml"/>
 		<mapper resource="/mappers/board-mapper.xml"/>
   	</mappers>
   	
   </configuration>

 

 

 

반응형

'MyBatis' 카테고리의 다른 글

[MyBatis] 개요 및 다운로드  (0) 2023.03.27
[MyBatis] mapper.xml  (0) 2022.06.15
[MyBatis] 회원가입 기능 구현  (0) 2022.06.15
[MyBatis] SqlSession 객체 정보 Template 클래스 생성  (0) 2022.06.14
반응형

스마트에디터 v.2.8.2.3 다운로드

https://github.com/naver/smarteditor2/releases/tag/v2.8.2.3

 

Release v2.8.2.3: archive v2.8.2.4259f59 · naver/smarteditor2

2.8.2.3 보안 패치 file_uploader_html5.php의 null byte injection 취약점 추가 보완 file_uploader.php의 리다이렉트 취약점 보완 sample.php에서 XSS filtering을 위해 HTMLPurifier라이브러리를 적용 sample.php -> sample/viewer/in

github.com

 

프로젝트에 다운로드 파일 추가

 

view jsp파일에 에디터코드 추가

@admin_recEnrollForm.jsp

 

 

 

라이브러리 파일 추가

 

디렉토리내 파일 코드 수정

@photo_uploader.html

action="FileUploader.php" 삭제

@attach_photo.js

sUrl, sCallback 각 파일의 경로에 맞게 수정

sUploadURL 경로에 맞게 수정

 

사진 입력을 위한 file_uploader, file_uploader_html5 JSP 파일 만들기

다운로드한 스마트에디터 파일 내에 php 파일로 존재하지만 JSP로 처리할 것이기 때문에

개발천재님의 블로그에서 코드를 가져온후 경로수정한 JSP파일을 만들어줬다

@file_uploader_html5.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@page import="java.io.*"%>
<%@page import="java.util.UUID"%>
<%@page import="java.text.SimpleDateFormat"%>
 
<%
    //파일정보
    String sFileInfo = "";
    //파일명을 받는다 - 일반 원본파일명
    String filename = request.getHeader("file-name");
    //파일 확장자
    String filename_ext = filename.substring(filename.lastIndexOf(".") + 1);
    //확장자를소문자로 변경
    filename_ext = filename_ext.toLowerCase();
 
    //이미지 검증 배열변수
    String[] allow_file = { "jpg", "png", "bmp", "gif" };
 
    //돌리면서 확장자가 이미지인지 
    int cnt = 0;
    for (int i = 0; i < allow_file.length; i++) {
        if (filename_ext.equals(allow_file[i])) {
            cnt++;
        }
    }
 
    //이미지가 아님
    if (cnt == 0) {
        out.println("NOTALLOW_" + filename);
    } else {
        //이미지이므로 신규 파일로 디렉토리 설정 및 업로드   
        //파일 기본경로
        String dftFilePath = request.getSession().getServletContext().getRealPath("/");
        //파일 기본경로 _ 상세경로
        String filePath = dftFilePath + "resources" + File.separator + "board_upfiles" + File.separator;
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        String realFileNm = "";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
        String today = formatter.format(new java.util.Date());
        realFileNm = today + UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));
        String rlFileNm = filePath + realFileNm;
        ///////////////// 서버에 파일쓰기 ///////////////// 
        InputStream is = request.getInputStream();
        OutputStream os = new FileOutputStream(rlFileNm);
        int numRead;
        byte b[] = new byte[Integer.parseInt(request.getHeader("file-size"))];
        while ((numRead = is.read(b, 0, b.length)) != -1) {
            os.write(b, 0, numRead);
        }
        if (is != null) {
            is.close();
        }
        os.flush();
        os.close();
        ///////////////// 서버에 파일쓰기 /////////////////
 
        // 정보 출력
        
        
        sFileInfo += "&bNewLine=true";    
        sFileInfo += "&sFileName=" + filename;    
        sFileInfo += "&sFileURL=/KGG/resources/board_upfiles/"+realFileNm;
        out.println(sFileInfo);
    }
%>

@file_uploader.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.util.UUID"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
 
<%
String return1="";
String return2="";
String return3="";
String name = "";
 
if (ServletFileUpload.isMultipartContent(request)){
    ServletFileUpload uploadHandler = new ServletFileUpload(new DiskFileItemFactory());
    uploadHandler.setHeaderEncoding("UTF-8");
    List<FileItem> items = uploadHandler.parseRequest(request);
    for (FileItem item : items) {
        if(item.getFieldName().equals("callback")) {
            return1 = item.getString("UTF-8");
        } else if(item.getFieldName().equals("callback_func")) {
            return2 = "?callback_func="+item.getString("UTF-8");
        } else if(item.getFieldName().equals("Filedata")) {
            if(item.getSize() > 0) {
      
                name = item.getName().substring(item.getName().lastIndexOf(File.separator)+1);
                String filename_ext = name.substring(name.lastIndexOf(".")+1);
                filename_ext = filename_ext.toLowerCase();
                String[] allow_file = {"jpg","png","bmp","gif"};
                int cnt = 0;
                for(int i=0; i<allow_file.length; i++) {
                    if(filename_ext.equals(allow_file[i])){
                        cnt++;
                    }
                }
                if(cnt == 0) {
                    return3 = "&errstr="+name;
                } else {
                     
                    //파일 기본경로
                    String dftFilePath = request.getSession().getServletContext().getRealPath("/");
                    //파일 기본경로 _ 상세경로
                    String filePath = dftFilePath + "resources" + File.separator +"board_upfiles" + File.separator;
                     
                    File file = null;
                    file = new File(filePath);
                    if(!file.exists()) {
                        file.mkdirs();
                    }
                     
                    String realFileNm = "";
                    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
                    String today= formatter.format(new java.util.Date());
                    realFileNm = today+UUID.randomUUID().toString() + name.substring(name.lastIndexOf("."));
                     
                    String rlFileNm = filePath + realFileNm;
                    ///////////////// 서버에 파일쓰기 ///////////////// 
                    InputStream is = item.getInputStream();
                    OutputStream os=new FileOutputStream(rlFileNm);
                    int numRead;
                    byte b[] = new byte[(int)item.getSize()];
                    while((numRead = is.read(b,0,b.length)) != -1){
                        os.write(b,0,numRead);
                    }
                    if(is != null) {
                        is.close();
                    }
                    os.flush();
                    os.close();
                    ///////////////// 서버에 파일쓰기 /////////////////
                     
                    return3 += "&bNewLine=true";
                                // img 태그의 title 옵션에 들어갈 원본파일명
                    return3 += "&sFileName="+ name;
                    return3 += "&sFileURL=/KGG/resources/board_upfiles/"+realFileNm;
                }
            }else {
                  return3 += "&errstr=error";
            }
        }
    }
}
response.sendRedirect(return1+return2+return3);
 
%>

 

전송시 컨트롤러로 입력값 가져가서 INSERT 처리

@RecommendationAdminInsertController.java

@RecommendationService.java

@RecommendationDao.java

@recommendation-mapper.xml

 

 


참고한 블로그

개발천재님들👍🏼👍🏼👍🏼

https://blog.naver.com/javaking75/220249200436

 

[JSP] 스마트에디터(smarteditor)의 싱글/멀티 이미지업로드하기

[참고] 관련포스트 [jsp] 네이버의 스마트에디터(SmartEditor) 적용하기 스마트에디터에서 사진을 업로드...

blog.naver.com

https://beforb.tistory.com/m/53

 

[Project] Naver SmartEditor 2.0으로 게시판만들기 - 1. 에디터 적용

다시 생각해도 힘든 기억이 떠오르는 네이버 스마트 에디터 적용기... 개발하면서 이것만큼은 무조건 블로그에 정리하겠다고 다짐했다. 프로젝트를 마치고 이제서야 겨우 정리할 시간이 생겨

beforb.tistory.com

 

반응형

'Web/Tool/ETC' 카테고리의 다른 글

[ETC] 유효성 검사  (0) 2023.03.28
[JDBC] JDBC 객체 종류 및 처리순서  (0) 2023.03.27
Template Engine 이란?  (0) 2023.03.27
[Tomcat] profile 설정  (0) 2023.03.27
[ETC] MacOS jdk11 설치 및 환경변수 설정  (0) 2023.03.17
반응형

데이터 샘플 예시

 

파일 import

1. 데이터를 넣을 테이블 우클릭 - 데이터 임포트

2. 찾아보기에서 파일 선택 후 미리보기 확인

예시는 컬럼이름을 헤더로 잡아서 가져오기위해 헤더 체크

3. 필요시 임포트 제한 설정

4. 열 선택 및 순서 변경 가능

5. 데이블 유형 등 호환 확인

6. 완료(문제 없는데 실패할 경우 구문 스크립트 실행하여 삽입 후 커밋)

반응형

'DB(SQL)' 카테고리의 다른 글

[MySQL] LEAD를 이용해서 다음 주문일과의 일수 계산  (0) 2023.08.22
[MySQL] 저번달 말일, 지난달 1일 계산  (0) 2023.08.01
[ORACLE] DDL - DROP  (0) 2022.03.28
ORACLE / DDL - ALTER  (0) 2022.03.28
ORACLE / DDL 기본 정의  (0) 2022.03.27
반응형

getAttribute

현재 jsp에서 필요로 하는 데이터들을 꺼내기 위한 메소드
Object 형식으로 반환되기 때문에 내가 받고자 하는 자료형으로 형변환하여 담아주면 됨

request.getAttribute("키값");

 

@view/responsePage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 	
	// servlet에서 전달(forward)받은 request의 attribute에 담겨있는 데이터 가져오기
	String name = (String)request.getAttribute("name");
	int age = (int)request.getAttribute("age");
	String gender = (String)request.getAttribute("gender");
	String city = (String)request.getAttribute("city");
	double height = (double)request.getAttribute("height");
	String[] foods = (String[])request.getAttribute("foods");
%>
	

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	h1{color: red};
	#name{color: orange};
	#age{color: yellow};
	#city{color: green};
	#height{color: blue};
	#gender{color: navy};
	ul{color: purple};

</style>
</head>
<body>
	<h1>개인정보 응답화면</h1>
	
	<span id="name"><%=name %></span>님은 
	<span id="age"><%=age %></span>살이며
	<span id="city"><%=city %></span>에 거주하고
	<span id="height"><%=height %></span>cm이며,

	성별은 
	<%if(gender==null){%>
		선택하지 않았습니다 <br>
	<%}else{%>
		<%if(gender.equals("M")){%>
			<span id="gender">남자</span>입니다. <br>
		<%}else{%>
			<span id="gender">여자</span>입니다. <br>
		<%}%>
	<%}%>

	좋아하는 음식은
	<%if(foods==null){%>
		없습니다.
	<%}else{%>
		<ul>
			<%for(int i=0; i<foods.length; i++){%>
				<li><%=foods[i] %></li>
			<%}%>
		</ul>
	<%}%>

</body>
</html>
반응형

'Servlet/JSP' 카테고리의 다른 글

[JSP] JSP 기초 - 스크립팅원소, 지시어, 주석  (0) 2022.05.02
[Servlet/JSP] Servlet과 JSP 기본 정의  (0) 2022.05.02
[Servlet] POST 방식 요청  (0) 2022.05.01
[Servlet] GET 방식 요청  (0) 2022.05.01
기본환경구축  (0) 2022.04.28
반응형

스크립팅 원소(Scripting Element)

JSP페이지 내에서 자바코드 작성할수 있게 해주는 기능

// 선언문 : 멤버변수와 메소드를 선언시 사용
<%! code
%>

//스크립틀릿 : 자바 코드를 기술하기 위한 기본적인 표현법(변수 선언 및 초기화, 제어문 등)
<% code%>

//표현식(출력식) : 자바에서 작성한 값 또는 메소드호출을 출력하기 위해 사용
<%= code%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>스크립팅 원소</title>
</head>
<body> 
    <h1>스크립팅 원소</h1>
    
    <% //스크립틀릿
   	int sum=0;
   	for(int i=0; i<=100; i++){
   		sum+=i;
   	}
   	System.out.println("덧셈 결과 >>"+sum); //콘솔출력
    %>
    
    //화면으로 출력
    //1. 표현식(출력식)으로 출력
    <%=sum %>
    //2. 스클립틀릿으로 출력(내장객체활용)
    <%out.println(sum); %>
    
     <%
    //배열 만들기
    String[] food={"떡볶이","곱창","김치찌개","육개장","김치낙지죽"};
    %>

    <h4>배열의 길이 <%=food.length %></h4>
    <h4>배열값 <%=String.join("-",food) %></h4>

    <ul>

    <%for(int i=0; i<food.length; i++){ %>
        <li><%=food[i] %></li>
    <%} %>
    </ul>
</body>
</html>

 

지시어(Directive)

JSP 페이지 전체에 영향을 미치는 정보를 기술할 때 사용

<%@ page/include/taglib 속성="속성값" ...%>

1. page 지시어 : 현재의 jsp 페이지를 처리하는데 필요한 각종 속성을 기술하는 부분

  - language : 사용할 스트립트 언어 유형을 지정
  - contentType : 웹 브라우저가 받아볼 해당 페이지의 형식, 인코딩 방식 지정
  - pageEncoding : jsp파일에 기록된 자바코드의 인코딩 방식 지정
  - import : 자바의 import와 동일한 역할
  - errorPage : 해당 jsp상에서 오류가 발생했을 경우 보여줄 에러페이지의 경로를 지정한다
2. include 지시어 : jsp 파일에 또 다른 jsp를 포함시키고자 할 때 사용하는 지시어

 

JSP 주석

<%--JSP주석 --%> // 개발자도구 노출 안됨

cf. <!--HTML주석 --> // 개발자도구 노출 됨

 

반응형

'Servlet/JSP' 카테고리의 다른 글

[JSP] getAttribute  (0) 2022.05.02
[Servlet/JSP] Servlet과 JSP 기본 정의  (0) 2022.05.02
[Servlet] POST 방식 요청  (0) 2022.05.01
[Servlet] GET 방식 요청  (0) 2022.05.01
기본환경구축  (0) 2022.04.28

+ Recent posts