2017 JAVA 교육수료/DAY
- 45DAY / JSP지시어 2017.06.08
- 40DAY / Git 2017.05.31
- 35DAY / mysql / TRANSACTION 2017.05.24
- 34DAY / DAO,DTO / 검색처리, 로그인처리 2017.05.23
45DAY / JSP지시어
JSP지시어 (Directive)
<%@ page langauge = "java" %>
JSP파일 내에서 사용 될 스크립트 언어 지정
<%@ page extends = "클래스명" %>
상속할 부모 클래스 지정
<%@ page import = "패키지명.클래스명" %>
Java의 import와 같은기능
<%@ page session = "true" %>
JSP내에서 세션사용
*세션(Session) : HTTP의 Stateless특성으로 인해 커넥션을 매번 새로 생성해야하기 때문에 동일한 클라이언트에 대해 정보를 유지할 필요가 있는 경우, 정보유지가 가능하도록 만드는 가상의 커넥션
<%@ page buffer = "8kb" %>
JSP페이지가 서블릿으로 변환되어 응답을 생성해 클라이언트에 전송할 때 사용되는 버퍼의 크기 지정
none으로 설정 할 경우 버퍼를 사용하지 않는다
<%@ page autoFlush = "true" %>
buffer속성에서 지정한 버퍼가 다 채워졌을경우
true : 클라이언트에게 전송 후 버퍼비운다
false : Exception발생시킨다
<%@ page isThreadSafe = "true" %>
다중스레드에 의한 동시접근을 차단한다
<%@ page info = "페이지설명" %>
페이지전체에 대한 주석의 역할
<%@ page errorPage = "errorpage.jsp" %>
예외가 발생했을 때 에러페이지를 지정해 에러페이지에서 예외처리함
<%@ page contentType = "text/html" %>
JSP페이지가 전송할 응답의 MINE형식 지정 대분류/소분류 순으로 명시한다
<%@ page isErrorPage = "false" %>
현재 페이지가 다른 페이지에서 발생한 예외처리할 페이지 일때 지정한다
<%@ page pageEncoding = "euc-kr" %>
JSP페이지 문자셋 인코딩방식을 지정
파일 업로드
</form>
enctype 속성을 multipart/form-data 로 지정하지 않으면 파일객체가 아닌 파일이름 이 문자열형태로 전송된다.
예제 / 단일 파일 업로드
<form action="./partUplaodPro1" method="post" enctype="multipart/form-data">
<label for ="writer">작성자</label>
<input type=text name="writer" id="writer"><br>
<label for ="partFile1">업로드 파일</label>
<input type="file" name="partFile1" id="partFile1">
<input type="submit" value="업로드">
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/partUplaodPro1")
@MultipartConfig(
fileSizeThreshold=0 ,
location = "d:/upload"
)
public class partUploadPro1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String writer = request.getParameter("writer");
System.out.println(writer);
Part part = request.getPart("partFile1");
String contentDisposition = part.getHeader("content-disposition");
String contentType = part.getHeader("content-type");
System.out.println(part);
if(contentType.equals("image/gif")
|| contentType.equals("image/jpeg")
|| contentType.equals("image/png")){
System.out.println(contentDisposition);
int dotPosition = contentDisposition.lastIndexOf(".");
String temp = contentDisposition.substring(dotPosition,contentDisposition.length()-1);
UUID uuid = UUID.randomUUID();
String fileName = uuid.toString()+temp;
part.write(fileName);
File srcFile = new File("d:\\upload\\"+fileName);
File destFile = new File("d:\\upload\\_"+fileName);
BufferedImage srcbi = ImageIO.read(srcFile);
BufferedImage destbi = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = destbi.createGraphics();
g.drawImage(srcbi, 0, 0, 50, 50, null);
ImageIO.write(destbi, temp.substring(1), destFile);
}
else{
response.sendRedirect("./partUploadForm1.jsp");
}
}
}
코드설명 /
@MultipartConfig 는 서블릿에서 multipart/form-data 형태로 전송된 데이터를 처리할 수 있게 지정한다.
파일이 최종 저장될 경로는 d:/upload 이고
업로드된 파일이 0바이트보다 커지면 임시 디렉토리에 저장된다.
파일이 gif,jpeg,png형식이 아닐경우 partUploadForm1.jsp로 돌아가고 맞을경우엔 흰화면
40DAY / Git
Git
Git은 속도가 낮고 효율성이 높은 소규모 프로젝트부터 대규모 프로젝트까지 모든 것을 처리하도록 설계된 무료 오픈 소스 분산 버전 제어 시스템이다.
Git은 SVN과 다르게 commit은 로컬 저장소에서 이루어 지고 push라는 동작으로 원격 저장소에 반영되고 받을때도 pull 또는 fetch로 서버에서 변경된 내역을 받아 올 수 있다.
[window] - [Perspective] - [Open perspective] -[ Git ] 을 선택하여 연다
Java 파일에서 마우스 우클릭 - [ Team ] - [ Commit ] 창을 연다
Commit할 파일을 드래그하여 아래로 당긴후
Commit 메세지를 작성한 뒤 Commit 버튼을 누른다.
Commit 메세지는 일의 능률을 높이기 때문에 신중하게 작성해야한다.
간단한 예제로 Properties 사용
db.properties 파일을 생성한다.
-->무슨 이유인지는 몰라도 위에 공백을 넣어야 내용이 읽히는 오류가 발생하였다...
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class MemberDao {
private String url;
private String dbid;
private String dbpw;
private void dbPropertiesInit() throws IOException{
FileInputStream fin = new FileInputStream("d:\\db.properties");
Properties pro = new Properties();
pro.load(fin);
this.url=pro.getProperty("url");
this.dbid=pro.getProperty("dbid");
this.dbpw=pro.getProperty("dbpw");
}
public Member selectMemberById(String id) throws ClassNotFoundException, SQLException, IOException{
//properties 에서 db정보 가져옴(내부적으로 input)
this.dbPropertiesInit();
System.out.println(this.dbid+"<=id");
System.out.println(this.dbpw+"<=pw");
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection(this.url,this.dbid,this.dbpw);
String query ="select * from oracle_member where ora_id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, id);
ResultSet rs = stmt.executeQuery();
Member mem=null;
if(rs.next()){
mem = new Member();
mem.setId(rs.getString("ora_id"));
mem.setPw(rs.getString("ora_pw"));
mem.setLevel(rs.getString("ora_level"));
mem.setName(rs.getString("ora_name"));
mem.setEmail(rs.getString("ora_email"));
}
return mem;
}
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException{
MemberDao mdao = new MemberDao();
Member m = mdao.selectMemberById("id001");
System.out.println(m.getId());
}
}
GitHub
2)주소 복사
3)이클립스로 돌아가서 PUSH 한다.
4)
5) [master(기본)]를 선택하고 [Add Spec]클릭시 추가된다.
6)GitHub에 가서 확인한다!
35DAY / mysql / TRANSACTION
TRANSACTION 트랜잭션
OldidDao.java : Oldid DB에 id값을 저장하는 클래스
CustomerService.java : 회원을 삭제와 동시에 데이터베이스에 추가하는 클래스
둘 중 하나가 실패시 ROLLBACK을 하고
성공했을 때 COMMIT을 한다.
package Service;
import java.sql.Connection;
import java.sql.SQLException;
public class CustomerService {
private DBService dbservice;
private CustomerDao customerDao;
private OldidDao oldidDao;
//java실행시 바로실행
public CustomerService(){
dbservice = new DBService();
}
public void removeCustomer(int id){
customerDao = new CustomerDao();
oldidDao = new OldidDao();
Connection conn = null;
try{
conn=dbservice.getConnection();
customerDao.deleteCustomer(dbservice,conn, id);
oldidDao.insertId(dbservice, conn, id);
conn.commit();
}
catch (SQLException e){
e.printStackTrace();
try{
conn.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
}
}
finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package Service;
import java.sql.*;
public class OldidDao {
public int insertId(DBService dbservice, Connection conn,int id) throws SQLException{
int returnRow = 0;
PreparedStatement stmt = null;
stmt = conn.prepareStatement("INSERT INTO oldid(id) VALUES (?)");
stmt.setInt(1, id);
returnRow=stmt.executeUpdate();
return returnRow;
}
}
34DAY / DAO,DTO / 검색처리, 로그인처리
public String mLoginCheck(String in_id,String in_pw) : 로그인체크
public Member mGetForSession(String in_id) : 로그인 성공 한 회원 체크
login_pro.jsp
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
Mdao mdao = new Mdao();
String loginresult = mdao.mLoginCheck(id, pw);
switch(loginresult){
case "로그인성공" :
Member m = mdao.mGetForSession(id);
session.setAttribute("S_NAME", m.getM_name());
session.setAttribute("S_LEVEL", m.getM_level());
session.setAttribute("SID", m.getM_id());
%><script language="javascript">
alert("로그인성공");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "비밀번호불일치" :
%>
<script language="javascript">
alert("비밀번호불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
case "아이디불일치" :
%>
<script language="javascript">
alert("아이디불일치");
location.href = "<%= request.getContextPath() %>/index.jsp";
</script>
<%
break;
}
%>