728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js

 

-index.jsp-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ 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="uploadAction.jsp" method="post" enctype="multipart/form-data">
        파일 : <input type="file" name="file"/></br>
        <input type="submit" value="upload"/>
    </form>
 
    <a href="fileDownload.jsp">파일 다운로드 페이지</a>
 
</body>
</html>
cs

-fileDownload.jsp-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@page import="java.net.URLEncoder"%>
<%@page import="java.io.File"%>
<%@ 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 uploadDirectory = application.getRealPath("./upload/");
    String[] files= new File(uploadDirectory).list();
    for(String file : files){
%>
    <a href="<%=request.getContextPath()%>/downloadAction?file=<%=URLEncoder.encode(file,"UTF-8")%>"><%=file%></a></br>
<%
    }
%>
 
    <a href="index.jsp">돌아가기</a>
    
    
</body>
</html>
cs
더보기

-Description

15 : list() : 지정된 디렉토리(폴더)에 저장된 파일이름목록을 얻어온다.

-downloadAction.java(서블렛파일)-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.koreait.fileupload;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
 
@WebServlet("/downloadAction")
public class downloadAction extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public downloadAction() {
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
    protected void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String fileName = request.getParameter("file");
 
        String uploadDirectory = this.getServletContext().getRealPath("./upload/")+fileName;
 
        File file = new File(uploadDirectory);
        
        String mimeType = getServletContext().getMimeType(file.toString());
 
        if(mimeType == null) {
            response.setContentType("application/octet-stream");
        }
    
        String downloadName = null;
        if (request.getHeader("user-agent").indexOf("MSIE")==-1){
 
            downloadName = new String(fileName.getBytes("UTF-8"),"8859_1");
        }else {
 
            downloadName = new String(fileName.getBytes("EUC-KR"),"8859_1");
        }
        response.setHeader("Content-Disposition""attachment;filename=\""+downloadName+"\";");
        
        FileInputStream fileInputStream= new FileInputStream(file);
        ServletOutputStream servletOutputStream=response.getOutputStream();
        
        byte[] b= new byte[1024];
        int data =0;
 
        while((data = (fileInputStream.read(b,0,b.length))) !=-1) {
            servletOutputStream.write(b,0,data);        
        }
        servletOutputStream.flush();
        servletOutputStream.close();
        fileInputStream.close();
    }
 
}
 
cs
더보기

-Description

31 :  //다운로드할 파일의 이름을 받는다.

33 : //다운로드 할 파일이 저장된 실제물리적 디렉토리 경로를 얻어온다.
//String uploadDirectory = this.getServletContext().getRealPath("./upload/");
//다운로드할 파일이 저장된 실제 물리적 디렉토리 경로와 다운로드할
//파일이름을 연결한다. 

35 : //다운로드 할 파일 객체를 만든다.

37 : //MIME = > Multipurpose Internet Mail Extension의 약자로
//파일 변환을 의미한다.
//getMimeType() :  인수로 지정된 파일의 MIME 타입을 얻어온다.

39 : //MIME 타입을 얻어오지 못했다면 파일을 전송하는 것을 사용자에게 알려주기 위해서
// response객체를 사용해서 file 형태의 데이터를 전송한다는 것을
//"application/octet-stream"을 사용해 알려준다.

43 : //접속한  브라우저에 따라 다운로드할 파일의 헤더 정보를 다르게 
//설정한다.

44: //접속한 브라우저가 뭔지 알아내는 헤더

46: //IE를 제외한 나머지 브라우저들

51 : //attachment 뒤의 filename은 반드시 큼따옴표를 사용해서 묶어줘야한다.

53,54 : //파일 전송에 사용할 객체를 선언한다.

56 : //파일을 1024바이트(1KB) 단위로 전송한다.

59~61 : //디스크에서 읽어들인 전송할 파일의 데이터가 있는 동안 반복하며 
//브라우저로 전송한다

62~64 : //flush() : servletOutputStream객체의 출력버퍼에 남아있는 모든 데이터를 
//전송하고  전송에사용한 객체를 닫는다.

-uploadAction.jsp-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ 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");
 
MultipartRequest mr = new MultipartRequest(
        request,
        application.getRealPath("./upload"),
        5*1024*1024,
        "UTF-8",
        new DefaultFileRenamePolicy()
        );
 
String fileName = mr.getOriginalFileName("file");
out.println("fileName : " + fileName+ "<br/>");
String fileRealName = mr.getFilesystemName("file");
out.println("fileRealName : " + fileRealName+ "<br/>");
 
if( fileName.endsWith(".jar") || fileName.endsWith(".zip") ){
    out.println("업로드한 파일 이름: " +fileName+"</br>");
    out.println("실제 업로드된 파일 이름: " +fileRealName+"</br>");
}else{
    out.println("<script>");
    out.println("alert('"+fileName+"은 업로드 할수 없는 형식의 파일입니다.\\njar,zip파일만 업로드가 가능합니다"+"')");
    out.println("</script>");
    File file = new File(application.getRealPath("./upload/")+fileName);
    file.delete();
}
%>
 
    <a href="index.jsp">돌아가기</a>
 
 
</body>
</html>
cs
더보기

-Description

24 : //단일 파일 업로드
//getOriginalFileName() : 사용자가 업로드 한 파일 이름을 얻어온다.

26 : //getFilesystemName() : 업로드되서 실제 디스크에 저장된 파일 이름을 얻어온다.


29 : //업로드제한
//startsWith() : 인수로 지정된 문자열로 문자열이 시작하면 true, 그렇지 않으면
//false를 리턴한다.
//endsWith() : :인수로 지정된 문자열로 문자열이 끝나면 true, 그렇지 않으면
//false를 리턴한다.
// jar파일과 zip파일만 업로드 할 수 있도록 한다. 

36 : //업로드된 파일을 삭제한다.

37 : //delete()메소드로 파일을 삭제한다.

-요약-

JAVASCRIPT

-alert-

alert내 개행을 원한다면 \\n을 사용한다

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

JSP-파일업로드  (0) 2021.04.14
JSP+Oracle - DBCP , JDBC 연결  (0) 2021.03.31
Oracle-명령어정리  (0) 2021.03.31
Jquery- AJAX 이용  (0) 2021.03.30
Jquery-table  (0) 2021.03.30
728x90

0413_FileUpLoad.zip
0.06MB

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JAVA : JAVA8

-GUI

-구성도

 

-요약-


HTML 

HTML 

-웹에 파일로드-
드라이버파일필요.
enctype="multipart/form-data" 같이 속성,속성값을 지정하여 파일을 로드 가능하게함
<form action="fileUploadOK.jsp" enctype="multipart/form-data">
<input type="file" name="filename"/><br/>
<input type="submit" value="파일전송"/>

CSS



JAVASCRIPT


JAVA


JSP

-웹에 로드된 파일이용-
<%
request.setCharacterEncoding("UTF-8");
//enctype="multipart/form-data"로 설정된 폼에서 넘어오는 데이터를
//받으려면 일반적인 request로 받을수 없고, multipart를 지원하는
//객체로 받아야한다.
MultipartRequest mr = new MultipartRequest(
request,//요청객체
application.getRealPath("/upload"),//업로드 되는 파일이 실제로 저장될 경로
5*1024*1024,//업로드 되는 파일의 최대 크기 => 바이트 단위로 지정한다.
"UTF-8",//문자인코딩방식
new DefaultFileRenamePolicy()//업로드 되는 파일과 같은 이름의 파일이 존재할 경우 이름을 자동으로 변경하는 객체
);

//업로드 하는 원본 파일의 이름을 얻어온다.
String oldFileName = mr.getOriginalFileName("filename");
out.println("원본 파일 이름 : " + oldFileName + "<br/>");
// 실제로 디스크에 업로드된 파일 이름을 얻어온다.
File file = mr.getFile("filename");
out.println("실제로 디스크에 업로드(저장)된 파일 이름 : " + file.getName() + "<br/>");
%>

JQUERY


JSTL+EL


EL


IBATIS


MYBATIS


SQL


ORACLE



 

-마침글-

.

'21년이전 > 국비-JSP' 카테고리의 다른 글

JSP-파일  (0) 2021.04.14
JSP+Oracle - DBCP , JDBC 연결  (0) 2021.03.31
Oracle-명령어정리  (0) 2021.03.31
Jquery- AJAX 이용  (0) 2021.03.30
Jquery-table  (0) 2021.03.30
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JAVA : JAVA8
oracle : oracle 11g

-JDBC 방식으로 Oracle과 연결하기위한 기본설정-

Eclipse의 WEB-INF 의 lib 에 ojdbc6-12.1.0.1-atlassian-hosted.jar 삽입 (드라이버연결)

-DBCP방식으로 Oracle과 연결하기위한 기본설정-

Eclipse의 WEB-INF 의 lib 에 commons-dbcp-1.4.jar 삽입
Eclipse의 WEB-INF 의 lib 에 commons-pool-1.5.7.jar 삽입  (commonsDBCP드라이버 클래스)
Eclipse의 WEB-INF 의 lib 에 ojdbc6-12.1.0.1-atlassian-hosted.jar 삽입 (드라이버연결)
Eclipse의 src 에 pool.jocl 삽입

-tomcatDBCP 설정-

Eclipse의 lib 폴더에 tomcat-dbcp.jar 파일을 복사한다. ( tomcatDBCP 드라이버 클래스)
Eclipse의 META-INF 폴더에 context.xml 파일을 만든다.(데이터베이스 연결정보)
Eclipse의 WEB-INF 의 web.xml 에 필요내용작성

-context.xml-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<Context>
 
    <!-- 
        name = 커넥션 풀 이름, "jdbc/"  부분은 항상 공통
        type =데이터베이스 연결에 사용하는 자바 클래스 이름, 무조건 "javax.sql.DataSource"  를 사용한다.
        auth = DBCP를 tomcat이 관리한다는 의미로 무조건"Container" 를 사용한다.
        maxActive =데이터베이스 커넥션 풀의 최대 개수 => 최대 연결 허용 개수
        maxIdle = 데이터베이스에 접속을 유지하는 데이터베이스 커넥션 풀의 최대 개수 =>
                     항상 연결을 유지하는 커넥션 풀의 개수
        maxWait = 데이터베이스에 접속하기 위해서 기다리는 최대 시간 => 
                    -1작성시, 기다림없이 바로 접속한다
        username = 사용자 계정 이름
        password =  사용자 비밀 번호
        driverClassName = 데이터베이스 드라이버 클래스 이름
        url = 데이터베이스 접속을 위한 경로
     -->
 
    <Resource
        name = "jdbc/TestDB" 
        type = "javax.sql.DataSource" 
        auth = "Container"
        maxActive = "100" 
        maxIdle = "30" 
        maxWait = "-1"
        username = "Shin" 
        password = "0000" 
        driverClassName = "oracle.jdbc.driver.OracleDriver"
        url = "jdbc:oracle:thin:@localhost:1521:xe"/>
</Context>
cs

-web.xml-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>0331_DBCPTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <resource-ref>
      <description>단순설명칸) tomcat DBCP oracle Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  
</web-app>
cs

-pool.jocl-(데이터베이스 연결정보)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<object class="org.apache.commons.dbcp.PoolableConnectionFactory" 
        xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
 
    <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
        <string value="jdbc:oracle:thin:@localhost:1521:xe"/>
       <string value="Shin"/>
        <string value="0000"/>
    </object>
    
    <object class="org.apache.commons.pool.impl.GenericObjectPool">
        <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
    </object>
    
    <object class="org.apache.commons.pool.KeyedObjectPoolFactory" null="true"/>
    
    <string null="true"/>
    
    <boolean value="false"/>
    
    <boolean value="true"/>
</object>
 
cs

-DBCP 방식과 JDBC방식의 차이-

JDBC는 데이터베이스 커넥션 인터페이스 이다. 

DBCP는 DB커넥션을 어플리케이션 소스 내에서 제어하면서 DB풀을 가진다.

JNDI는 DB커넥션을 WAS단에서 제어하면서 서버에서 하나의 커넥션 풀을 가진다.

 

-DBUtil.java-(데이터베이스 간편연결 클래스)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package src.koreait.DbUtil;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class DBUtil {
    
    //mysql에 연결하는 Connection 을 리턴하는 메소드
    public static Connection getMysqlConnection() {
        Connection conn = null;
        try{//드라이버는 WEB-INF/lib 에 저장
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/jspam?useUnicode=true&characterEncoding=UTF-8";
            //?useUnicode=true&characterEncoding=UTF-8  테이블에 한글이 들어올경우 대비해서 설정
            conn = DriverManager.getConnection(url,"root","0000");
            System.out.println("연결 성공 :"+conn+"<br/>");
        }catch(ClassNotFoundException e){
            System.out.println("드라이버 클래스가 존재 하지 않습니다 ");
        }catch(SQLException e){
            System.out.println("데이터베이스 연결 정보가 옳바르지 않습니다 ");
        }
        return conn;
    }
    
    //Oracle에 연결하는 Connection을 리턴하는 메소드
    public static Connection getOracleConnection() {
        Connection conn = null;
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");//드라이버 로드 ,드라이버이름이 인자
            String url="jdbc:oracle:thin:@localhost:1521:xe";//1521: 포트번호 , xe:개발자테스트용버전
            conn=DriverManager.getConnection(url, "Shin""0000");//오라클 연결 얻기
        } catch (ClassNotFoundException e){
        } catch (SQLException e){
        }
        return conn;
    }
    
    //commonsDBCP를 사용해서 oracle에 연결하는 Connection을 리턴하는 메소드
    public static Connection getCommonsDBCPconnection() {
        Connection conn = null;
        try{
            //Class.forName("com.mysql.jdbc.Driver");//mysql 드라이버
            Class.forName("oracle.jdbc.driver.OracleDriver");//oracle 드라이버
            Class.forName("org.apache.commons.dbcp.PoolingDriver");//commonsDBCP드라이버 클래스를 읽어온다,드라이버 로드 
            String url="jdbc:apache:commons:dbcp:/pool";//데이터베이스 연결정보가 저장된 파일의 경로를 지정한다.
            conn=DriverManager.getConnection(url);//오라클 연결 얻기
            
        } catch (ClassNotFoundException e){
            e.printStackTrace();
        } catch (SQLException e){
            e.printStackTrace();
        }
        return conn;
    }
    
    public static Connection getTomcatDBCPConnection() {
        Connection conn = null;
        try{
            
            Context initContext = new InitialContext();
    /*         Context envContext = (Context)initContext.lookup("java:/com/env");
            DataSource dataSource = (DataSource)envContext.lookup("jdbc/TestDB"); */
            
            //위의 주석으로 처리한 2줄을 tomcat Server 7.0부터 아래와 같이 1줄로 줄여서 사용할 수 있다.
            DataSource dataSource = (DataSource)initContext.lookup("java:/comp/env/jdbc/TestDB");
            
            conn = dataSource.getConnection();
            
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
    
    //Connection을 닫아주는 메소드
        public static void close(Connection conn) {
            if(conn!= null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
}
cs

 

-요약-

 

 

-마침글-

.

'21년이전 > 국비-JSP' 카테고리의 다른 글

JSP-파일  (0) 2021.04.14
JSP-파일업로드  (0) 2021.04.14
Oracle-명령어정리  (0) 2021.03.31
Jquery- AJAX 이용  (0) 2021.03.30
Jquery-table  (0) 2021.03.30
728x90
-오라클 접속-
SQL> connect system
※ 실제로 비밀번호를 입력할 때는 문자가 화면에 표시되지 않는다.
Enter Password : 0000
 
-오라클 계정 생성-
SQL> create user Shin identified by 0000;
 
-계정에 권한 설정-
*connect는 접속 권한, resource는 테이블을 만들때 필요한 입력,수정,삭제,검색을 하는 개발자 사용권한
SQL> grant connect, resource to Hong;
 
-오라클 계정 지우기-
* cascade는 사용자와 연관된것 까지 묶어서 처리해주는 명령어
SQL> drop user Shin cascade;
 
-CREATE-
-READ-
-UPDATE-
-DELETE-
 

'21년이전 > 국비-JSP' 카테고리의 다른 글

JSP-파일업로드  (0) 2021.04.14
JSP+Oracle - DBCP , JDBC 연결  (0) 2021.03.31
Jquery- AJAX 이용  (0) 2021.03.30
Jquery-table  (0) 2021.03.30
Jquery-주기적 작업명령어를 이용한 이미지롤링  (0) 2021.03.30
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js


-설정-

설정에는 두가지 방법이 있는데 , 
1. 인터넷 서비스 제공자로부터 직접 연결하여 데이터를 전송받는 CDN방식(당연히 네트워크필수)
밑 명령줄을 ecilipse의 head태그내에 삽입. 
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="  crossorigin="anonymous"></script>

2. JQuery 메인 홈페이지에서 js 파일을 다운후 script문 작성.
<script type="text/javascript" src="./js/jquery-3.6.0.min.js"></script>

 

-jquery19_ajax1.html-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
 
<script type="text/javascript">
    $(document).ready(function(){
        $('#emp_search').click(function(){
            
            
            var empid = $('input[name=empid]').val();
            
            //if(empid>=100 && empid<=999){
            if(!isNaN(empid) && empid.length ===3 ){ 
                
                $.ajax({
                    url: 'emplist.xml',
                    //cache: false,    //사용자 캐시 사용 여부
                    method: 'get',
                    asyn: true
                    dataType: 'xml'
                    success: function(data) { 
                
                        var emdInfo = $(data).find('EMPLOYEE_ID:contains('+empid+')').parent();
                        
                        if($(emdInfo).is('ROW')){
                                $('table input').each(function(index){
                                     $('table input').eq(index).val($(emdInfo).children().eq(index).text());                        
                                });
                        }else{
                            alert(empid+'는 존재하지 않는 사원 번호입니다.');
                            $('input[name=empid]').val('');//텍스트 비우기        
                        }
                        $('input[name=empid]').focus();
                    },
                    error: function(request){ 
                        console.log('ajax 실패~~~~');
                        console.log(request.status + ' : ' + request.statusText);
                    }
                });
                
                //==============================================================
            }else{
                alert('정확한 사원 번호를 입력하세요');
                $('input[name=empid]').val('');//텍스트 비우기
                $('input[name=empid]').focus();
            } //if끝
            
        });//click끝
        
        
    });//onload 끝
</script>
 
<style type="text/css">
    *{   
        margin : 0px;
        padding : 0px;
    }
    body{
        width: 1000px;
        margin: 50px auto;  /*  위아래마진 좌우마진 순서 */
    }
    fieldset{
        width: 300px;
        height: 50px;
        padding: 0px 10px;
    }
    table{
        width: 400px;
        border: 1px solid black;
        padding: 0px 0px;
    }
    table tr:nth-child(odd){
        background: hotpink;
    }
    table tr:nth-child(even){
        background: skyblue;
    }
    input{
        border-radius: 5px;
        height: 25px;
    }
</style>
 
</head>
<body>
 
    <h2>데이터 가져오기</h2>
 
    <fieldset>
        <legend>사원 정보 조회</legend>
        <input type="text" name="empid"/>
        <input id="emp_search" type="button" value="조회"/>
     </fieldset><br/>
     
     <table>
         <tr>
             <th>사원번호</th>
             <td><input type="text" name="idx"/></td>
         </tr>
         <tr>
             <th>이름</th>
             <td><input type="text" name="name"/></td>
         </tr>
         <tr>
             <th>이메일</th>
             <td><input type="text" name="email"/></td>
         </tr>
         <tr>
             <th>내선번호</th>
             <td><input type="text" name="phone"/></td>
         </tr>
         <tr>
             <th>입사일</th>
             <td><input type="text" name="hire"/></td>
         </tr>
     </table>
     
</body>
</html>
cs
 
더보기

-Description

GUI :

10 : 조회버튼이 클릭될시 수행되는 이벤트

13 : 입력받은 사원번호를 empid로 옮긴다

16 : 3자리 숫자만 입력받는다.
//isNaN ( value ) 의 value가 숫자가 아니라면 true, 숫자라면 false
//ps)$.isNumeric( value ) 은 value가 숫자인 경우 true 이외의 경우 false반환. 추천방법

18: ajax 수행

26 : 입력한 사원번호에 해당되는 모든 데이터를 출력해야 하기 때문에
검색한 사원 번호의 부모 요소를 선택한다. ROW 가 선택됨

28 : 검색된 사원 번호에 해당되는 데이터가 있으면 테이블에 출력한다.

28~31 : table 태그의 자손 태그 input 의 갯수 만큼 반복하며 xml파일에서 읽어온
데이터를 채워 넣는다.

42  : ajax 끝

58 : *은 모든 것에적용, 보통 초기화시 이용 

-emplist.xml-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<ROWSET>
    <ROW>
        <EMPLOYEE_ID>100</EMPLOYEE_ID>
        <LAST_NAME>KING</LAST_NAME>
        <EMAIL>INFO@KINGDOM.COM</EMAIL>
        <PHONE_NUMBER>114</PHONE_NUMBER>
        <HIRE_DATE>2019.03.19 오전 9:36:00</HIRE_DATE>    
    </ROW>
    <ROW>
        <EMPLOYEE_ID>101</EMPLOYEE_ID>
        <LAST_NAME>QUEEN</LAST_NAME>
        <EMAIL>RADIO@HEAVEN.COM</EMAIL>
        <PHONE_NUMBER>503</PHONE_NUMBER>
        <HIRE_DATE>2019.03.19 오전 9:36:00</HIRE_DATE>    
    </ROW>
    <ROW>
        <EMPLOYEE_ID>102</EMPLOYEE_ID>
        <LAST_NAME>BOB</LAST_NAME>
        <EMAIL>BOB@BOB.COM</EMAIL>
        <PHONE_NUMBER>11425</PHONE_NUMBER>
        <HIRE_DATE>2019.03.19 오전 9:36:00</HIRE_DATE>    
    </ROW>
    <ROW>
        <EMPLOYEE_ID>103</EMPLOYEE_ID>
        <LAST_NAME>JACKSON</LAST_NAME>
        <EMAIL>JACKSON@HEAVEN.COM</EMAIL>
        <PHONE_NUMBER>114</PHONE_NUMBER>
        <HIRE_DATE>2019.03.19 오전 9:36:00</HIRE_DATE>    
    </ROW>
</ROWSET>
cs

 

 

-요약-

//===JQuery Ajax ===============================================
//ajax = AJAX는 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록
//XMLHttpRequest객체를 통해 서버에 request한다. 
//이 경우, JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에
//그만큼의 자원과 시간을 아낄 수 있다.

 

ajax 사용법
$.ajax({
     url: 'emplist.xml', //호출할 페이지 주소 or 요청 or 읽어올 xml 파일 이름
     cache: false,//사용자 캐시 사용 여부
     method: 'get',//서버에 데이터를 전송하는 방식
     asyn: true, // 비동기 방식(true) 혹은 동기방식을 사용(false는 동기 방식을 의미)
     dataType: 'xml', //전송받는 데이터 타입을 적는다.(xml,json,html,script)
     data:{ //서버로 전송할 데이터
               'key':'value'
     },
     success: function(data) { //ajax가 성공했을 때 실행할 콜백 함수
     //함수의 인수 data에 응답받은 데이터가 저장된다.

     },
     error: function(request){ //ajax가 실패했을 때 실행할 콜백 함수
     //함수의 인수 request에 응답받은 데이터가 저장된다.
     }
});

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

JSP+Oracle - DBCP , JDBC 연결  (0) 2021.03.31
Oracle-명령어정리  (0) 2021.03.31
Jquery-table  (0) 2021.03.30
Jquery-주기적 작업명령어를 이용한 이미지롤링  (0) 2021.03.30
Jquery-태그삭제  (0) 2021.03.30
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js


-설정-

설정에는 두가지 방법이 있는데 , 
1. 인터넷 서비스 제공자로부터 직접 연결하여 데이터를 전송받는 CDN방식(당연히 네트워크필수)
밑 명령줄을 ecilipse의 head태그내에 삽입. 
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="  crossorigin="anonymous"></script>

2. JQuery 메인 홈페이지에서 js 파일을 다운후 script문 작성.
<script type="text/javascript" src="./js/jquery-3.6.0.min.js"></script>

 

-jquery18_table.html-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
 
    $(document).ready(function(){
        $('#btn1').click(function(){
            //var html ='<tr><td>방법1</td><td>방법</td><td>방법</td><td>방법</td></tr>';
            var str = '내장된 표현식'
            var html =`<tr>
                            <td>${str}</td>
                            <td>방법1</td>
                            <td>방법1</td>
                            <td>방법1</td>
                    </tr>`;
            $('tbody').append(html);
        });
        
        $('#btn2').click(function(){
            var $tr = $('<tr>',{});//태그기억하는 Jquery변수는 앞에 $ 붙임.
            var $td1 = $('<td>',{text:'방법2'});
            var $td2 = $('<td>');
            var $td3 = $('<td>');
            var $td4 = $('<td>');    
        
            $('tbody').append($td1);
            $('tbody').append($td2);
            $('tbody').append($td3);
            $('tbody').append($td4);
            $('tbody').append($tr);
        });
    });
 
 
</script>
</head>
<body>
 
    <table border="1">
        <!-- colgroup 태그로 열 설정을 미리 할 수 있다. -->
        <colgroup>
            <col width="200"/>
            <col width="200"/>
            <col width="200"/>
            <col width="200"/>
        </colgroup>
        <thead>
            <tr>
                <th>1</th>
                <th>2</th>
                <th>3</th>
                <th>4</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
            </tr>
        </tbody>
    </table><br/>
    
    <button type="button" id='btn1'>방법1</button>
    <button type="button" id='btn2'>방법2</button>
 
</body>
</html>
cs

 

 
더보기

-Description

GUI :

13~18 : Template literals : 템플릿 리터럴은 여러 줄로 이뤄진 문자열을 허용하는 
문자열 리터럴이다 ,
내장된 표현식은 '${' 와 '}' 사이에 변수 이름을 입력하면 변수에 저장된
데이터가 템플릿 리터럴에 삽입된다.

23~27 : 태그기억하는 Jquery변수는 앞에 $ 붙임.
$('<tag>')는 태그를 만든다. 태그를 만들고 태그에 데이터를 넣어주려면 
2번째 인수로 {}로 묶어서 데이터를 넣어주면 된다.

방법2 버튼 클릭후 GUI

 

-요약-

 

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

Oracle-명령어정리  (0) 2021.03.31
Jquery- AJAX 이용  (0) 2021.03.30
Jquery-주기적 작업명령어를 이용한 이미지롤링  (0) 2021.03.30
Jquery-태그삭제  (0) 2021.03.30
Jquery-태그추가2  (0) 2021.03.30
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js


-설정-

설정에는 두가지 방법이 있는데 , 
1. 인터넷 서비스 제공자로부터 직접 연결하여 데이터를 전송받는 CDN방식(당연히 네트워크필수)
밑 명령줄을 ecilipse의 head태그내에 삽입. 
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="  crossorigin="anonymous"></script>

2. JQuery 메인 홈페이지에서 js 파일을 다운후 script문 작성.
<script type="text/javascript" src="./js/jquery-3.6.0.min.js"></script>

 

-jquery17_이미지롤링.html-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
 
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
 
 $(document).ready(function(){
     
     var count =0 ;
     setInterval(function(){
         $('.active').first().appendTo($('#menu'));//id=menu 내부의  마지막요소로 들어간다.
     }
     ,1000
             );  // 1초 , ms 단위
     
     
     
     
    $('button').click(function(){
        if($(this).text()=='start')
            $(this).text('stop');
        else
            $(this).text('start');
        $('img').toggleClass('active');
    });
 });
</script>
 
<style>
 
    body{
        margin:0;
    }
    img{
        width:150px;
        height:150px;
        float: left;  /* 부유속성, 여기선 이미지태그가 글 왼쪽위로 뜨게됨 */
    }
    .sel{
        width: 140px;
        height:140px;
        border: 5px solid tomato;
        position: absolute;
        left: 300px;
    }
    button{
        width: 150px;
        height: 50px;
        font-size: 20pt;
        margin-left: 300px;
    }
    #menubox{
        position: relative;
    }
    #menu{
        overflow: auto; /* auto : 컨텐츠 량에 따라 스크롤바를 추가할지 자동으로 결정됩니다.( 필요에 따라 가로, 세로 별도로 추가될 수도 있습니다.) */
    }
 
</style>
 
</head>
<body>
 
    <h2>점심 식사 메뉴 뽑기</h2>
 
    <div id="menubox">
        <div class="sel"></div>
        <div id="menu">
            <img alt="떡볶이" src="./images/ddbg.jpg"/>
            <img alt="돈까스" src="./images/don.jpg"/>
            <img alt="햄버거" src="./images/hamburg.jpg"/>
            <img alt="라면" src="./images/lamyun.jpg"/>
            <img alt="막창" src="./images/makchang.jpg"/>
        </div>
        <button type="button">start</button>
    </div>
</body>
</html>
cs
더보기

-Description

GUI :

13 :  지정된 시간 간격으로 함수를 반복해서 실행한다 ,
메뉴의 첫 번재 이미지를 메뉴의 마지막 이미지로 이동시킨다.

14 : appendTo() : 선택된 요소를 인자 내부의 마지막에 추가한다.
=> append()메소드와 유사하지만, 선택한요소가 appendTo 인자 내부의 마지막 요소로 들어감

16 : 1초 단위로 반복수행함을 의미

22: start 버튼이 클릭되면 버튼위의 문자열을 stop으로 변경한 후 이미지 롤링을 시작한다.

27 : start 버튼이 클릭되면 active라는 class를 추가하고 이미지 롤링을 시작.
stop 버튼이 클릭되면 active라는 class를 제거하고 이미지 롤링을 중지한다.

40 : float 속성을 left로 줌. 즉 img 태그가 왼쪽 위로 뜨면서 텍스트는 오른쪽에 위치하게 됨

59 : overflow: auto; /* auto : 컨텐츠 량에 따라 스크롤바를 추가할지 자동으로 결정됩니다.( 필요에 따라 가로, 세로 별도로 추가될 수도 있습니다.) */

 

-요약-

//자바스크립트로 주기적인 작업을 실행하기 위해서 setInterval()함수와 setTimeout()함수를 사용한다.
// 두가지는 비슷하지만 어떤 차이점을 가진다.
//setTimeout(함수,시간) : 지정된 시간이 지나면 함수를 실행한다.
//clearTimeout() : setTimeout()함수를 중지시킨다.

//setInterval(함수,시간) : 지정된 시간 간격으로 함수를 반복해서 실행한다.
//clearInterval() : setInterval() 함수의 실행을 중지시킨다.
//clearTimeout(),clearInterval()함수는 실행중인 작업을 중지시키는 것이 아니고 다음 작업 스케줄을 중지시킨다.

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

Jquery- AJAX 이용  (0) 2021.03.30
Jquery-table  (0) 2021.03.30
Jquery-태그삭제  (0) 2021.03.30
Jquery-태그추가2  (0) 2021.03.30
MergeInterval  (0) 2021.03.29
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js


-설정-

설정에는 두가지 방법이 있는데 , 
1. 인터넷 서비스 제공자로부터 직접 연결하여 데이터를 전송받는 CDN방식(당연히 네트워크필수)
밑 명령줄을 ecilipse의 head태그내에 삽입. 
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="  crossorigin="anonymous"></script>

2. JQuery 메인 홈페이지에서 js 파일을 다운후 script문 작성.
<script type="text/javascript" src="./js/jquery-3.6.0.min.js"></script>

 

-jquery16_요소삭제.html-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
 
    $(document).ready(function(){
        $('p:eq(0)').click(function(){
            let remove= $(this).remove(); // <p>지우기 - remove</p> 가 사라짐
            console.log(remove);
            $('h2').append(remove);
        });
        $('p:eq(1)').click(function(){
            let detach= $(this).detach(); // <p>잘라내기 - detach</p> 가 사라짐
            console.log(detach);
            $('h2').append(detach);
        });
        $('p:eq(2)').click(function(){
            $(this).empty();// <p> 태그 내부가 비워짐
        });
        $('p:eq(3)').click(function(){
            $(this).unwrap();
        });
    });
 
</script>
 
</head>
<body>
 
    <h2>요소 제거하기</h2>
 
    <div>
        <p>지우기 - remove</p>
        <p>잘라내기 - detach</p>
        <p>비우기 - empty</p>
        <p>부모 지우기 - unwrap</p>
    </div>
 
</body>
</html>
cs
더보기

-Description

GUI :

11 : remove() : 선택된 요소를 DOM 트리에서 삭제한다.
삭제된 요소와 연관된 jquery데이터나 이벤트도 같이 삭제된다.
13 : h2태그 뒤에 삭제한 remove가 추가된다.
16 : detach() : 선택된 요소를 DOM 트리에서 삭제한다.
삭제된 요소와 연관된 jquery데이터 그리고 이벤트는 유지된다.
21 : empty() : 선택된 요소의 모든 자식 요소를 삭제한다.
24 :  unwrap() : 선택된 요소의 부모 요소를 삭제한다. 
부모 요소만 삭제되고 자식 요소는 삭제 되지 않는다.

 

-요약-

JAVASCRIPT

-alert-

alert내 개행을 원한다면 \\n을 사용한다

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

Jquery-table  (0) 2021.03.30
Jquery-주기적 작업명령어를 이용한 이미지롤링  (0) 2021.03.30
Jquery-태그추가2  (0) 2021.03.30
MergeInterval  (0) 2021.03.29
Jquery-요소(태그)추가  (0) 2021.03.29
728x90

-개발환경-

IDE : Eclipse IDE for Enterprise Java Developers ver-2020-06 (4.16.0)
Tomcat : Tomcat v8.0 Server
JQuery : jquery-3.6.0.min.js


-설정-

설정에는 두가지 방법이 있는데 , 
1. 인터넷 서비스 제공자로부터 직접 연결하여 데이터를 전송받는 CDN방식(당연히 네트워크필수)
밑 명령줄을 ecilipse의 head태그내에 삽입. 
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="  crossorigin="anonymous"></script>

2. JQuery 메인 홈페이지에서 js 파일을 다운후 script문 작성.
<script type="text/javascript" src="./js/jquery-3.6.0.min.js"></script>

 

-jquery15_요소추가2.html-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
 
<style type="text/css">
 
    div{
        border: 1px solid red;
    }
 
</style>
 
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
 
    $(document).ready(function(){
        $('button:eq(0)').click(function(){
            $('#base').after('<div>after() 메소드로 추가한 요소</div>');
        });
        
        $('button:eq(1)').click(function(){
            $('<div>insertAfter() 메소드로 추가한 요소</div>').insertAfter('#base');
        });
        
        $('button:eq(2)').click(function(){
            $('#base').before('<div>before() 메소드로 추가한 요소</div>');
        });
        
        $('button:eq(3)').click(function(){
            $('<div>insertBefore() 메소드로 추가한 요소</div>').insertBefore('#base');
        });
        
    });
 
</script>
</head>
<body>
 
    <button type="button">after</button>
    <button type="button">insertAfter</button>
    <button type="button">before</button>
    <button type="button">insertBefore</button>
 
    <div id="base">
        <p>외부 삽입</p>
    </div>
 
 
</body>
</html>
cs
더보기

-Description

GUI :

20 : after() : 선택된 요소 뒤에 새로운 요소를 추가한다.

24 : insertAfter() : 선택된 요소 뒤에 새로운 요소를 추가한다.

28 : before() : 선택된 요소 앞에 새로운 요소를 추가한다.

32 : insertBefore() : 선택된 요소 앞에 새로운 요소를 추가한다.

 

-요약-

 

 

-마침글-

단순문법공부는 boring하다..

인용

 

'21년이전 > 국비-JSP' 카테고리의 다른 글

Jquery-주기적 작업명령어를 이용한 이미지롤링  (0) 2021.03.30
Jquery-태그삭제  (0) 2021.03.30
MergeInterval  (0) 2021.03.29
Jquery-요소(태그)추가  (0) 2021.03.29
Jquery-Plugin 적용  (0) 2021.03.29
728x90

-개발환경-

IDE : Eclipse IDE for Java Developers Version: 2020-03 (4.15.0)

공부 자료 :  www.inflearn.com/course/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%B0%94/lecture/22652

-문제-

인터벌들의 모음이 주어질때 , 인터벌의 오버래핑되는 모든 부분을 통합해라.
ex)
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]

 

-접근법-

접근법 
1. 한 인터벌을 (start,end)로 명명할 때 , start를 기준으로 오름차순 정렬을 수행
2. before이라는 인터벌을 담을 객체를 생성후 정렬된 인터벌중 가장 앞 값을 집어 넣는다.
3. 정렬된 인터벌모임을 반복문으로 돌린다. 반복문 내용으로,
case1) before.end >= current.start 일시 ,
before의 start와 end를 갱신 .
 (이와같이 명료히 할 수 있는 이유는 초기에 정렬을 해주었기에)
case2) before.end < current.start 일시 ,
before을 result에 저장.
현재의 current를 before로 만듬
4. for문 종료 이후 , before를 result에 저장.

 

그림으로 나타낸 절차는 아래와 같다.

 

 

-MergeInterval.java-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package codingTest;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
class Interval_{
    int start;
    int end;
    Interval_(){start=0;end=0;}
    Interval_(int s,int e){start=s;end=e;}
    
}
 
public class MergeInterval {
 
    public static void main(String[] args) {
        //TestCase
        Interval_ in2=new Interval_(1,3);
        Interval_ in1= new Interval_(2,6);
        Interval_ in3= new Interval_(8,10);
        Interval_ in4= new Interval_(15,18);
        
        List<Interval_> intervals= new ArrayList<>();
        intervals.add(in1);
        intervals.add(in2);
        intervals.add(in3);
        intervals.add(in4);
 
        //Procedure
        MergeInterval a= new MergeInterval();
        List<Interval_> list= a.merge(intervals);  
        //OutPut
        System.out.println("==========================================");
        a.print(list);
    }
    public List<Interval_> merge(List<Interval_> intervals){
        if (intervals.isEmpty()) return intervals;
        //1.ds
        List<Interval_> result= new ArrayList<>();
        
        //sort
        print(intervals);//test
        Collections.sort(intervals, (a,b)->a.start-b.start);//람다표현식 오름차순
        //Collections.sort(intervals,comp ); //기존방식
        System.out.println("==========================================");
        print(intervals);//test
        
        //2
        Interval_ before = intervals.get(0);//[1,3]
        for(int i=1;i<intervals.size();i++) {
            Interval_ current= intervals.get(i);
            if(before.end >= current.start) {
                before.end=Math.max(before.end,current.end);
            }else {
                result.add(before);
                before=current;
            }
        }
        
        if(!result.contains(before)) { //해당 if 문은 없어도 무방해보임, 단 내부 명령어는 쓰여져야 함
            result.add(before);
        }
        
        return result;
    }
    
    void print(List<Interval_> list) {
        for(int i=0;i<list.size();i++) {
            Interval_ in =list.get(i);
            System.out.println(in.start +" "+in.end);
            
        }
    }
    Comparator comp = new Comparator<Interval_>() {
        public int compare(Interval_ a,Interval_ b) {
            return a.start-b.start;
        }
    };
}
 
cs
더보기

-Description

 

25 : TestCase 객체들을 담을 ArrayList인 intervals을 생성한다.
33 : 구현한 merge함수를 이용하여 문제를 해결한후 결과값 반환
39 : input이 없을 경우 처리
41 : 결과를 담을 ArrayList 형 result 생성
45 : 람다표현식으로  intervals를 start을 기준으로 하여 오름차순으로 정렬
51~64 : 접근법에서 설명한 내용이다.
66 : 결과 result 반환
76 : 람다식을 이용한 정렬을 수행하였으므로 , 이 함수는 이용하지 않았다.

결과화면

-추가개념-

List , ArrayList , Collections , Lambda 표현식

 

List는 인터페이스 그리고,  ArrayList 및 ,LinkedList,Stack,Vector 는 클래스로 List를 구현.

//List 인터페이스
     //순서 o  , 중복 허용  ex)대기자 명단
     //ex)
          //ArrayList,LinkedList,Stack,Vector등
     //메소드 (자세 한건 JAVA8 API 문서볼것)
          //add -추가
          // get,set  - 얻어오기, 저장하기.
          //indexOf - 검색  (왼쪽부터 오른쪽으로)
          //lastIndexOf - 검색 (오른쪽부터 왼쪽으로)
          //sort  -정렬
          //subList - from부터 to 까지 뽑아옴

          //int size() - size반환

          //isEmpty - 비어있는지 확인

          //boolean contains(Object o) - 지정된 객체가 존재하는지 확인
     //ArrayList - 동기화 처리가 안되어 있다. -
          //vector는 동기화 처리가 되어있다.
          //데이터의 저장공간으로 배열을 사용한다. ( Object 배열 )
          //메소드
               //생성자
                    //ArrayList()
                    //ArrayList(Collection c)
                    //ArrayList(int initialCapacity) -배열의 길이 넣어줌-
               //boolean add(Object o)
               //void add(int index,Object element)
               //boolean addAll(Collection c)
               //boolean addAll(int index , Collection c)
               //boolean remove(Object o)
               //Object remove(int index)
               //boolean removeAll(Collection c)
               //void clear() - 모든객체삭제
               //int indexOf(Object o) - 찾으면 인덱스반환 , 못찾으면 -1 반환
               //int lastIndexOf(Object o) - 오른쪽부터 찾음
               //boolean contains(Object o) - 지정된 객체가 존재하는지 확인
               //Object get(int index) - 객체 읽기
               //Object set(int index, Object element) - 수정
               //List subList(int fromIndex,int toIndex) - from부터 to 전까지 객체들을 뽑아서 새로운 리스트를 반환
               //Object[] toArray()  - ArrayList가 가지고 있는 객체 배열을 반환
               //boolean isEmpty() - 비어있는지 확인
               //void trimToSize() - 빈공간 제거
               //int size()  -ArrayList에 저장된 객체의 갯수를 반환

 

Collections 는 정적메소드들의 집합으로 구성된 클래스이다.
//여기에는 컬렉션에서 작동하는 다형성 알고리즘이 포함되어 있다.
1. reverse() 메서드 - 뒤집기
2. sort() 메서드 - 정렬하기
3. copy() 메서드 - 복사본만들기
4. shuffle 메서드 - 무작위로 섞기

 

-람다(Lambda)표현식-
람다표현식은 함수형 인터페이스를 통해서 사용할수 있다.
함수형 인터페이스는 추상 메소드가 한개뿐인 메소드이다..
자바에서는 @FunctionalInterface 를 인터페이스구문위에 적어서 구분한다고 한다..
람다표현식은 , 파라미터,화살표, 바디(구현부분) 3가지로 나뉜다.
람다 표현식은
1. () -{}
2. () ->"history"
3. () -> {return "history";}
4. 파라미터->{return "history"+a;}
5. (파라미터,파라미터)->"history" 
바디(구현부분)에는 return문에 적힐 문장이 온다. return은 생략가능..
파라미터 타입도 생략이 가능..
 return 을 적어줄시 {} 을 써야하며 ; 도 붙여줘야한다..

 

 

-마침글-

 

 

인용

'21년이전 > 국비-JSP' 카테고리의 다른 글

Jquery-태그삭제  (0) 2021.03.30
Jquery-태그추가2  (0) 2021.03.30
Jquery-요소(태그)추가  (0) 2021.03.29
Jquery-Plugin 적용  (0) 2021.03.29
Jquery- class 추가 및 제거  (0) 2021.03.29

+ Recent posts