깃 허브 또는 SVN에서 프로젝트를 커밋할시

제외해야 할 파일,폴더 들이 몇 가지가 있다.


대표적으로 target 폴더인데 먼저 target 폴더에 대해 알아보면,

Maven으로 빌드를 하면 생기는 jar 파일을

저장하는 것이 주요 일이다.


개발을 할때는 이클립스 안에서 모든것이 이루어 지기 때문에 중요하지

않지만 나중에 프로젝트 결과물인 jar또는 war를 실서버에 반영할 때에는

target폴더 밑에 있는 jar나 war를 배포하게 된다.


target 폴더를 모르고 삭제했다면 Maven Build를 하여 다시 만들수 있다.

이러한 이유 들로 target폴더는 커밋의 대상이 아니다. 


target 폴더 이외에 .project .classpath .settings 등도

커밋의 대상이 아니다. 먼저 이 파일들을 커밋하지 않게

ignored 시키는 방법에 대해 알아보자.


이클립스든 전자정부프레임워크든 방법은 똑같다.

아래 이미지 순서대로 실행하자.
















위의 순서대로 약4가지 정도의 파일을 ignored 시키자.


출처 : http://rwd337.tistory.com/179



Bootstrap 4 


<head>

  <title>Bootstrap Example</title>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>

  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

</head>


Bootstrap 3 


<head>

  <title>Bootstrap Example</title>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>

1



이클립스에서 깃버튼을 활성화 시킨다.







이후 Clone a Git Repository and add the clone to this view 를 누른다 




URI 와 HOST Repository path 를 모를경우 깃에 가면 아래와 같이 복사하는 버튼이 있다 해당버튼을 누르면 자동으로 채워진다.






여기까지 하면 깃허브 연결이 완료!!


여기 이후부터는 SVN 등 과 방법이 똑같다. Commit , Update 등 은 모두 같고 한가지 다른점은. 



Commit 할때 Commit and Push 를 눌러주어야만 파일이 업로드된다. 이후








공유된 깃 주소에 들어가면



다음과같이 공유된 프로젝트를 볼수있다. 


MongoDB 2.2 버전부터 collection의 index에 TTL을 지정하여,

시간이 경과하면 자동으로 삭제해주는 기능이 있음.


일단 동작원리만 간단히 설명하자면 아래와 같다.

1. TTL을 적용할 컬렉션에 expire time을 저장할 index를 만드는데, 옵션에 expireAfterSeconds 가 들어가야 함.

2. 해당 컬렉션에 데이터를 넣을 때, 만들어둔 TTL용 index 필드에는 data/time object값이 들어가야 함.

3. primary 머신에서 백그라운드로 TTL이 다 된 document를 삭제해주는 task가 돌면서 지워줌.



아래의 단서조건이 붙는다.

* TTL용 index 필드는 반드시 date BSON 타입의 데이터만 저장해야 함.

* _id 필드를 이용할 수 없다.

* 이미 index가 걸려있는 필드에 TTL constraints 부여 불가.

* 복합인덱스는 안됨.

* 만약 TTL용 필드가 배열이고 각 배열원소들이 date BSON 타입의 데이터가 저장되어 있다면 자동삭제 task는 해당 원소 중 가장 초기 date/time 값을 기준으로 삭제.

* capped collection에는 사용할 수 없음.

* 자동삭제 task는 60초에 한번씩 동작한다. 그러므로 60초 이하로 지정한 expire time은 정확한 삭제시간을 보장할 수 없다. (=오차범위 60초)



[예제]

// TTL을 적용하고자 하는 컬렉션에 TTL용 index 생성

// 예제에선 logs DB의 mylog collection이라고 가정함.

mongos> use logs

mongos> db.mylog.ensureIndex({expire:1}, {expireAfterSeconds:3600}) // TTL = 1시간


// expire값을 현재시각으로 넣은 이 데이터는 1시간 후에 자동으로 삭제됨

mongos> db.mylog.insert({name:'mytest', expire: new Date()}) 



출처: http://bloodguy.tistory.com/entry/MongoDB-document에-expire-time-적용하기-expire-TTL [Bloodguy]

1. 질의 스크립트를 생성해주세요.
query.js

1
2
3
4
5
6
7
var dbname = 'log';
var db = db.getSiblingDB(dbname);
var cursor = db.ItemLogData.find();
 
while(cursor.hasNext()) {
 printjson(cursor.next());
}

query.js의 내용중에 dbname과 collection, 질의 내용을 본인에 맞게 수정해주세요.

2 mongo 명령어를 사용해서 질의 스크립트를 실행해주시면 됩니다.
$mongo –quiet query.js > result.txt

Mongo DB를 사용하여 예약 작업 구현하기

등록할 예약 작업의 성격

  • 특정 일시에 실행되어야 하는 작업
  • ex) 2015.11.31 09:00 OO에게 메일 발송

 

스케쥴 서버의 조건

  • 예약 작업이 많아 졌을 경우, scale-out 확장이 가능해야 함

예약 작업 저장을 위한 스토리지로 Mongo DB를 선택했으며, Collection 구조는 아래와 같이 정의하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// collection
var reservedTask{
    _id: xxx, //taskId
    cmd: OOOO, // 실행할 작업
    contents: {name:'aasfdsadf'} // 작업에 필요한 내용 Object Type
    reserved: YYYY-MM-DDTHH:MM:SS, // 실행될 시간
    registered: YYYY-MM-DDTHH:MM:SS, // 등록한 시간
    status: REQUEST // 작업 실행 상태
}
// task 등록
db.reservedTasks.save({
    cmd: 'sendMail',
    registered: new Date(),
    reserved: new Date('2015-11-13T09:00:00'),
    contents: {
        to: 'abc@def.com',
        body: '.......'
    },
    status: 'REQUEST'
});

구현할 기능은 아래와 같다

  1. 예약 작업 등록
  2. 실행할 작업을 DB로 부터 읽어 옴.
  3. 실행할 작업이 있을 경우, 상태를 실행으로 변경하고 예약 작업을 실행
  4. 실행을 완료한 작업은 완료로 처리

여러 서버에서 스캐쥴러가 동작할 경우 2, 3, 4번의 과정에서 동일한 작업이 여러번 실행되는 문제가 발생할 수 있다. 만약 서버 A가 2, 3번 과정을 실행중일때, 서버 B가 2번 과정을 실행하게 되면, 동일한 작업이 두번 실행되게 된다. 이러한 문제는 MongoDB로 구현할때 findAndModify 연산을 이용하여 해결할 수 있다.

findAndModify 연산을 이용한 예약 작업 읽기

1
2
3
4
5
db.reservedTasks.findAndModify({
    query: { reserved: new Date('2015-11-13T09:00:00'), status: 'REQUEST' },
    update: { $set: { status: 'RUNNING' } },
    new: true
});

위의 쿼리를 수행하게 되면 읽기와 쓰기가 동시에 수행이 되어, 여러 서버에서 동시에 수행이 되더라도 동일한 작업이 여러번 실행되는 것을 막을 수 있다. 또한 이후 작업이 결과에 따라 status 값을 조정함으로써 완료/실패 처리가 가능하다.

문제점
findAndModify를 사용할 경우 예약된 작업을 하나씩 실행해야 한다. 만약 1000개의 예약된 작업이 있을 경우 1000번 위의 과정을 수행해야 한다. 이러한 제한은 findAndModify가 하나의 document에 대해서만 update가 가능하기 때문이다. 이를 위해서는 다른 해결책이 필요하다.

 

이중 확인을 사용한 방법(transId 추가)

  1. 실행할 작업을 DB로 부터 읽어 옴.
  2. DB로 부터 읽어 온 작업을 업데이트(상태: 실행중, transId:’transactionNum’)
  3. transId가 ‘transactionNum’인 작업을 읽음
  4. 작업 완료후 처리한 작업을 완료로 처리
1
2
3
4
5
6
7
8
9
10
11
db.reservedTasks.find({ reserved:&amp;amp;amp;amp;nbsp;new Date('2015-11-13T09:00:00'),
status: 'REQUEST'
}).limit(100) // ID 읽음.
db.reservedTasks.update( {_id: {$in: [/* 앞에서 읽어온 id 리스트 */]},
        status: 'REQUEST'},// 읽은 ID중 아직까지 REQUEST 상태인 것만,
    {$set: {status: 'RUNNING',
                transId: 'transactionNum'}},
// transaction Num을 부여하고, 실행중 상태로
    {multi: true}
)
db.reservedTaks.find({transId: 'transactionNum'})// 실제로 실행할 작업을 다시 읽음

위 과정중 1 번 쿼리의 필요성에 대해 고민해 볼 필요가 있다. 1번 과정은 실제로 최대 N개로 한번의 작업 횟수를 제한하는데 필요하다. 이러한 제한이 필요 없을 경우 1번 과정은 생략 가능하다


https://developer.android.com/studio/


해당경로에서 안드로이드 스튜디오를 다운로드 받는다 


설치는 default 값으로 설치한다. 



업데이트가 시간이 오래걸리니 이과정에서 기다려주면된다.



설치가 완료되면 다음과같이 프로젝트를 생성할수있는 화면이 활성화된다.














여기까지가 기본 설치 완료 화면.


추가로 다음버튼들을 클릭할때 설치하라고 나오는게있으면 모두 설치한다.




이렇게 화면이 모두 나와야 정상적인 초기 셋팅이 완료된 상태이다.


추가적 APP 등록등에 필요한 구글관련 SDK 툴들도 다운받는다






activity_main.xml 의 내용 입력후 시작 버튼을 누르면 왼쪽에 다음과 같은 화면이 뜨면 정상적으로 완료.





porm.xml 에 추가 (아래에있음)

http://mvnrepository.com/

MongoDB Java Driver

Spring Data MongoDB Core



프로젝트 새로 생성시

Maven-> update project 해주어야함.





jsp 파일 생성시 자동추가되도록 설정 

<!DOCTYPE html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<html>
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head> 
<body>

</body>
</html>




몽고디비 설정


> use myperson
switched to db myperson
> db.createCollection("dto")
{ "ok" : 1 }
> show collections
dto
person
> show dbs
admin     0.000GB
config    0.000GB
local     0.000GB
myperson  0.000GB

>data={ "_id" : 1, "name" : "김연아", "hp" : "0102-222-3333", "address" : "서울시 강남구", "age" : 26 }
> db.dto.find()
> db.dto.insert(data)
WriteResult({ "nInserted" : 1 })
> db.dto.find()
{ "_id" : 1, "name" : "김연아", "hp" : "0102-222-3333", "address" : "서울시 강남구", "age" : 26 }
>







porm.xml


Spring 버전 변경


<!-- Spring -->

<spring-framework.version>4.0.9.RELEASE</spring-framework.version>



#몽고DB Core

<dependency>

    <groupId>org.springframework.data</groupId>

    <artifactId>spring-data-mongodb</artifactId>

    <version>1.6.1.RELEASE</version>

</dependency>



#몽고DBJAVA드라이버

<dependency>

    <groupId>org.mongodb</groupId>

    <artifactId>mongo-java-driver</artifactId>

    <version>2.11.4</version>

</dependency>



web.xml 인코딩 문제


    <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>

    </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

    



제일아래쪽 servlet

    <servlet-mapping>

        <servlet-name>dispatcherServlet</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>



src/main/java 

test.mongodb 패키지 생성




mvc-config

    <context:annotation-config></context:annotation-config>

    <context:component-scan base-package="test.*"></context:component-scan>





application-config

**namespace 에서 mongo 추가


<!--  mongo db server setting -->

<mongo:mongo id="mongo" host="127.0.0.1" port="27017">

<mongo:options

threads-allowed-to-block-for-connection-multiplier="4"

connect-timeout="1000" 

max-wait-time="1500"

auto-connect-retry="true"

socket-keep-alive="true"

socket-timeout="1500"

write-number="1"

write-timeout="0"

write-fsync="true"

/>

</mongo:mongo>



<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="databaseName" value="myperson"/>
<constructor-arg name="mongo" ref="mongo"/>
<!-- 보안설정 -->
<constructor-arg name="userCredentials">
<bean class="org.springframework.data.authentication.UserCredentials">
<constructor-arg name="username" value="admin"/>
<constructor-arg name="password" value=""/>
</bean>
</constructor-arg>
<property name="writeConcern" value="SAFE"/>
</bean>
<!-- test.* 으로해도됨 -->
<mongo:repositories base-package="test.mongodb"/>





src/main/java
test.mongodb 밑에
UserDto.java 생성

import org.springframework.data.annotation.Id;       <- @Id 추가시 해당 패키지




@Document(collection="dto")
public class UserDto

@Id
private String id;
private String name;
private String hp;
private String address;
private int age;

후 setter getter 해서 자동생성



최종 UserDto.java 파일 

package test.mongodb;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="dto")
public class UserDto {
@Id
private String id;
private String name;
private String hp;
private String address;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHp() {
return hp;
}
public void setHp(String hp) {
this.hp = hp;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}






src/main/java
test.mongodb 패키지 밑에 생성
ListController.java                  -> 리스트 출력
UpdateController.java                -> 정보수정
Userdao.java                         -> 쿼리문수행
WriteController.java                 -> 새글 추가
DeleteController.java                -> 삭제 
 
webapp/WEB-INF/view 에 jsp 생성
boardlist.jsp                        ->게시글 리스트
showMessage.jsp                      ->
updateform.jsp                       -> 수정버튼시 불러오는 폼
writeform.jsp                        -> 새글추가시 불러오는 폼







index.jsp body부분 에 삽입 (메인페이지 접속시 list.do 로 연결되도록함)

<c:redirect url="mongo/list.do"/>






test.mongodb/ListController.java


@Controller

public class ListController {

@RequestMapping("/mongo/list.do")

public ModelAndView list()

{

ModelAndView model=new ModelAndView();

model.setViewName("boardlist");

return model;

}

}







초기 셋팅








src/main/java/test.mongodb/Userdao.java


import java.util.List;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.mongodb.core.MongoTemplate;

import org.springframework.data.mongodb.core.query.Criteria;

import org.springframework.data.mongodb.core.query.Query;

import org.springframework.stereotype.Repository;



@Repository

public class Userdao {

@Autowired

private MongoTemplate mongoTemp;

public void dropCollection()

{

mongoTemp.dropCollection(UserDao.class);

}

public List<UserDto> findList()

{

//방법 1 : 전체 데이타를 목록으로 얻고자 할 경우

List<UserDto> list=mongoTemp.findAll(UserDto.class,"dto");

//방법 2 - 조건에 의한 목록을 얻고자 할경우

/* Query query=new Query(Criteria.where("_id").in("a1","a2","a3"));

List<UserDto> list=mongoTemp.find(query, UserDto.class);*/

return list;

}

}





ListController


@Autowired

private Userdao dao;


List<UserDto> list=dao.findList();

model.addObject("list",list);

model.addObject("count",list.size());



추가






boardlist 

부트스트랩 추가 head 에


<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>





body 부분에 추가

<body>
<c:if test="${count==0}">
<b>저장된 데이타가 없습니다</b>
</c:if>
<c:if test="${count>0}">
<b>총 <span style="color: red;">${count}</span>개의 데이타가 있습니다.</b>
</c:if>
</body>





디자인부분 추가



<input type="button" class="btn btn-sm btn-success" value="멤버등록" onclick="location.href='writeform.do'" style="magin-left:50px;">

<table style="margin:0 auto;" class="table table-striped">

<caption><b>MongoDB Test</b></caption>

<tr bgcolor="#ffffcc">

<th style="text-align: center;">순번</th>

<th style="text-align: center;">이름</th>

<th style="text-align: center;">핸드폰</th>

<th style="text-align: center;">주소</th>

<th style="text-align: center;">나이</th>

<th style="text-align: center;">편집</th>

</tr>

<c:forEach var="dto" items="${list}" varStatus="i">

<tr>

<td align="center">${i.count}</td>

<td align="center">${dto.name}</td>

<td align="center">${dto.hp}</td>

<td align="center">${dto.address}</td>

<td align="center">${dto.age}</td>

<td align="center">

<!-- info 파란색 버튼 danger 빨간색 버튼 -->

<input type="button" value="수정" class="btn btn-cs btn-info" 

onclick="location.href='updateform.do?name=${dto.name}'">

<input type="button" value="삭제" class="btn btn-cs btn-danger" 

onclick="location.href='delete.do?name=${dto.name}'">

</td>

</tr>

</c:forEach>

</table>

</body>




webapp/index.jsp


body 내용을 수정 list.do 로 표출되도록 




<c:redirect url="mongo/list.do"></c:redirect>






여기까지 진행하였을경우 프로젝트 실행시 정상적으로 입력된 게시글들이 출력되어야함. 







WriteController.java


@Controller

public class WriteController {

@Autowired

private UserDao dao;

@RequestMapping("/mongo/writeform.do")

public String form()

{

return "writeform";

}

}






Writeform.jps


<head>
<meta charset="utf-8">
<title>Welcome</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head> 
<body>
<form action="write.do" method="post">
<table class="table table-bordered" style="width:300px; margin: 0 auto;">
<caption><b>맴버 등록하기</b></caption>
<tr>
<th style="width:100px;">이름</th>
<td>
<input type="text" name="name" autofocus="autofocus" required="required">
</td>
</tr>
<tr>
<th style="width:100px;">핸드폰</th>
<td>
<input type="text" name="hp" required="required">
</td>
</tr>
<tr>
<th style="width:100px;">주소</th>
<td>
<input type="text" name="address" required="required">
</td>
</tr>
<tr>
<th style="width:100px;">나이</th>
<td>
<input type="text" name="age" required="required">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="mongodb저장" class="btn btn-sm btn-warning">
<input type="button" value="멤버목록" class="btn btn-sm btn-success" onclick="location.href='list.do'">
</td>
</tr>
</table>
</form>
</body>






UserDao.java   추가



//dto 한개 저장시

public void insert(UserDto dto)

{

mongoTemp.insert(dto);

}

//dto 여러개를 List 에 담아 저장시 

public void insertList(List<UserDto> list)

{

mongoTemp.insert(list,UserDto.class);

}








WriteController



@RequestMapping("/mongo/write.do")

public String readData(@ModelAttribute UserDto dto)

{

dao.insert(dto);

return "redirect:list.do";

}



여기까지 진행하면 맴버등록이 됨.











boardlist.jsp

네임클릭시 반응하게 네임부분 수정 



<td align="center">

<a href="content.do?name=${dto.name}">${dto.name}</a>

</td>






/WEB-INF/view/content.jsp 생성




UserDao.java 추가 

public UserDto getSearchName(String name)

{

Query query=new Query(Criteria.where("name").is(name));

return mongoTemp.findOne(query, UserDto.class);

}





ListController.java 추가

@RequestMapping("/mongo/content.do")

public ModelAndView content(@RequestParam String name)

{

ModelAndView model=new ModelAndView();

UserDto dto=dao.getSearchName(name);

model.addObject("dto",dto);

model.setViewName("content");

return model;

}




Content.jsp -> writeform 에 있는거 그대로 복사해서 수정


form 삭제후


<body>


<table class="table table-bordered" style="width:300px; margin: 0 auto;">

<caption><b>맴버 확인</b></caption>

<tr>

<th style="width:100px;">이름</th>

<td>

${dto.name}

</td>

</tr>

<tr>

<th style="width:100px;">핸드폰</th>

<td>

${dto.hp}

</td>

</tr>

<tr>

<th style="width:100px;">주소</th>

<td>

${dto.address}

</td>

</tr>

<tr>

<th style="width:100px;">나이</th>

<td>

${dto.age}세

</td>

</tr>

<tr>

<td colspan="2" align="center">


<input type="button" value="멤버목록" class="btn btn-sm btn-success" onclick="location.href='list.do'">

</td>

</tr>

</table>


</body>




여기까지 이상없이 진행시 

---이름 수정 누르면 데이터 출력--






삭제기능추가


UserDao.java


public void deletedata(String name)

{

Query query=new Query(Criteria.where("name").is(name));

mongoTemp.remove(query,UserDto.class);

}




deleteController.java


@Controller

public class DeleteController {


@Autowired

private UserDao dao;

@RequestMapping("mongo/delete.do")

public String delete(@RequestParam String name)

{

dao.deletedata(name);

return "redirect:list.do";

}

}





여기까지 진행시 삭제버튼누르면 해당 이름 삭제됨.



수정기능


writeform.jsp 내용을 updateform.jsp 로 복사


updateform.jsp


<body>

<form action="update.do" method="post">

<table class="table table-bordered" style="width:300px; margin: 0 auto;">

<caption><b>맴버 정보수정하기</b></caption>

<tr>

<th style="width:100px;">이름</th>

<td>

${dto.name }

<input type="hidden" name="name" value="${dto.name}">

</td>

</tr>

<tr>

<th style="width:100px;">핸드폰</th>

<td>

<input type="text" name="hp" required="required" value="${dto.hp}">

</td>

</tr>

<tr>

<th style="width:100px;">주소</th>

<td>

<input type="text" name="address" required="required" value="${dto.address}">

</td>

</tr>

<tr>

<th style="width:100px;">나이</th>

<td>

<input type="text" name="age" required="required" value="${dto.age}">

</td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="mongodb수정" class="btn btn-sm btn-warning">

<input type="button" value="멤버목록" class="btn btn-sm btn-success" onclick="location.href='list.do'">

</td>

</tr>

</table>

</form>

</body>




updateController.java



@Controller

public class UpdateController {


@Autowired

private UserDao dao;

@RequestMapping("/mongo/updateform.do")

public ModelAndView updateform(@RequestParam String name)

{

ModelAndView model=new ModelAndView();

UserDto dto=dao.getSearchName(name);

model.addObject("dto",dto);

model.setViewName("updateform");

return model;

}

}



-----------------------여기까지 했을때 수정폼 나오면 정상



Userdao.java


public void updateData(UserDto dto)

{

Query query=new Query(Criteria.where("name").is(dto.getName()));

mongoTemp.updateFirst(query, Update.update("hp", dto.getHp()), UserDto.class);

mongoTemp.updateFirst(query, Update.update("address", dto.getAddress()), UserDto.class);

mongoTemp.updateFirst(query, Update.update("age", dto.getAge()), UserDto.class);

}




updateController.java


@RequestMapping("/mongo/update.do")

public String update(@ModelAttribute UserDto dto)

{

dao.updateData(dto);

return "redirect:list.do";

}




변수   바꿀대상 url 의 값


package test.crawling;


import java.io.IOException;


import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;


public class Ex3test {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

String url="https://www.melon.com/chart/index.htm";

                             //크롤링하고싶은 대상 url 을 적는다 

Document doc=Jsoup.connect(url).get();

Elements titles=doc.select("div.ellipsis>span>a");

                                             //하단의 그림참조하여 적는다

for(Element e:titles)

{

String song=e.text();

System.out.println("제목:"+song);

}

System.out.println("============");


}


}

1






대상의 가장 가까이에있는 id 나 class 의 값을 찾아서 해당 루트까지 표기해주도록한다.

div.ellipsis>span>a





package test.crawling;


import java.io.IOException;


import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;


public class Ex6Test {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub


String urls="http://media.daum.net";

Document daum_news=Jsoup.connect(urls).get();

Elements news_url=daum_news.select("div.box_headline>ul>li>strong>a");

for(Element element:news_url)

{

String url=element.attr("href");

System.out.println(url);

if(url.contains("media.daum.net"))

{

Document doc=Jsoup.connect(url).get();

Elements body=doc.select("div#harmonyContainer");

Elements title=doc.select("h3.tit_view");

String content=body.text();

String newstitle=title.text();

System.out.println("제목:"+newstitle);

System.out.println("내용:"+content);

}


}

}


}


1

     

콘솔창 출력 결과



오라클 접속시 ORA-01034: ORACLE not available



발생시 디비가 시작되지 않은경우이다 




$ sqlplus /nolog


SQL> conn sys/ as sysdba


SQL> startup




이후 계정접속시 정상적으로 이루어진다. 

'프로그래밍언어 > Oracle' 카테고리의 다른 글

오라클 비번 만료(the password has expired)  (0) 2020.11.04
Mariadb 백업 및 복구  (0) 2020.02.26
오라클 명령어  (0) 2018.10.15

Tomcat 이클립스 서버 설치 & 구동하기




먼저 Tomcat 을 다운받습니다. 


https://tomcat.apache.org/download-80.cgi



본인의 버전에 맞는것을 다운받습니다.





이후 이클립스를 구동하여 Tomcat 을 설치합니다.












혹시 실행하였는데 포트관련 오류가 뜬다면






JAVA 다운로드


http://www.oracle.com/technetwork/java/javase/downloads/index.html


JDK 다운로드 클릭



Windows 버전에 맞는것을 다운로드한다.




기타 설치방법은 Next 만 누르면 크게 어려운부분이 없으므로 생략. 설치를 진행한다.


설치이후 2가지를 설정해주어야 한다.






환경변수를 수정해야한다. (제어판 -> 시스템 -> 고급 시스템 설정 -> 환경변수)





새로만들기 클릭 하여 아래와같이 환경변수를 추가해준다.



환경변수에서 Path 를 클릭하여 %JAVA_HOME%\bin 을 추가하여준다.





----------------JAVA 설정 완료----------------


정상적으로 설치되었는지 확인하기위하여 


실행 (윈도우키 + R ) cmd (명령프롬프트) 하여 하기와같이 입력하여본다.


java -version



이렇게 출력되었다면 정상적으로 설치된것이다.








이클립스 다운로드(64비트기준)


https://www.eclipse.org/downloads/download.php?file=/oomph/epp/oxygen/R2/eclipse-inst-win64.exe




이클립스의 경우 설치시 JPA , JSF 등의 기능을 추가히기위해선 처음설치할때


Eclipse IDE for Java EE Developers 로 선택한다



따로 설정할것은 없다 모두 기본값으로 설정하면 된다.


이클립스의 워크스페이스 선택경로가 나오는데 이것은 가능한 자료가 손상되지않는 루트에 저장하는것이 안전하다.






이것으로 JAVA 와 이클립스의 모든 설치가 완료되었습니다.



설치가 완료되면 다음과같은 이클립스의 화면이 나타나게됩니다.








+ Recent posts