반응형

1. pom.xml 에 라이브러리 추가

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
   </dependency>
              
        <dependency> 
        	<groupId>org.springframework</groupId> 
        	<artifactId>spring-jdbc</artifactId>  
        </dependency> 
      
		<dependency>
		    <groupId>org.mariadb.jdbc</groupId>
		    <artifactId>mariadb-java-client</artifactId>
		    <version>2.4.1</version>
		</dependency>

 

 

 

2. src/main/resource/application.properties 설정추가

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#없으면 디폴드 포트 8080 임
server.port = 80 
spring.devtools.livereload.enabled=true
spring.thymeleaf.cache=false

# mybatis 매핑 type을 짧게 쓰기 위한 설정 (이 하위 디렉터리의 클래스들은 모두 myBatis Mapper XML에서 parameter type 이나 result Type으로 사용할 수 있다.)
#mybatis.type-aliases-package=com.bpa.main.model
# mybatis 매퍼 위치 추가. classpath:를 쓰면  src/main/resource 가 루트가 됨 (src/main/resources/sql/mariadb/admin-sql.xml)
mybatis.mapper-locations=classpath:sql/**/*.xml

# mapper 이하를 로깅 위치로 설정.(mapper interface 패키지 경로)
logging.level.com.bpa.main.dao=TRACE

# db 연결정보 추가
spring.datasource.url=jdbc:mariadb://localhost:3306/bpa
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

 

 

3. sql xml 추가 (src/main/resources/sql/mariadb/admin-sql.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="com.bpa.main.dao.AdminDBMapper"> 
    
      <select id="getUserList" resultType="map">
      	SELECT * FROM BPA_USER
      </select>
</mapper>

<mapper namespace="com.bpa.main.dao.AdminDBMapper"> 은 실제 interface 경로이며 getUserList 은 실제 메소드임

 

 

4. xml 과 메핑될 interface 추가(com.bpa.main.dao.AdminDBMapper )

package com.bpa.main.dao;

import java.util.List;

public interface 	AdminDBMapper {
  public List getUserList();
}

 

 

5. spring boot Application 에 MapperScan 추가

@SpringBootApplication
@MapperScan(basePackages = "com.bpa.main.dao") /* AdminDBMapper의 위치*/
@EnableAsync
public class BpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(BpaApplication.class, args);
	}

}

 

 

6. 호출하기

@Autowired
	private AdminDBMapper adminDBMapper;

@Override
	public List getUserList() {
		// TODO Auto-generated method stub
		return adminDBMapper.getUserList();
	}

 

 

application.properties 에서 sql xml 위치 지정해주고 xml 에서 namespace ,id 에 해당하는 interface 만들고 호출하면 됨 interface 위치는 springboot Application 에서 @MapperScan 로 지정함 admin-sql.xml 과 com.bpa.main.dao.AdminDBMapper 와 매핑이 되어 실행되는 구조 임

 

반응형
반응형

1. 이슈 증상
webjars은 웹에서 쓰는 라이브러리(jquery,bootstrap)를 패키징한 jar을 말하는데
못 불러올 경우가 있습니다.
해결방법은 다음과 같습니다.

2. 해결방법
아래 둘중에 하나를 추가 하면 됩니다.

- WebConfig 추가 하기

package kr.co.penta.dataeye.spring.web;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
 
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  }
 
}

또는 xml Config 추가하기

<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
반응형
반응형

CSV 생성 후 다운로드 하기

@RequestMapping("/csvDownload")
public ResponseEntity<String> getTotalList() {
 
   
 
   //CSV는 UTF-8로 하면 깨지고, MS949 로 세팅해야 된다.
   //import org.springframework.http.HttpHeaders; 
   HttpHeaders header = new HttpHeaders();
   header.add("Content-Type", "text/csv; charset=MS949");
   header.add("Content-Disposition", "attachment; filename=\"" + "total.csv" + "\""); 
   
  
  //내용에 콤마가 있을경우 쌍따움표로 감싼다.
   String csvData = "가, "나,1,2,3" , 다, \n 1, 2, 3";
   return new ResponseEntity<String>(csvData , header, HttpStatus.CREATED);
}
반응형
반응형

1. ExcelReader.java

import java.io.File;
import java.io.InputStream;
 
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.SAXHelper;
import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
import org.apache.poi.xssf.model.StylesTable;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
 
public class ExcelReader {
 
  public static void main(String[] args) {
    // TODO Auto-generated method stub
       
 
//읽어올 엑셀파일 경로
    SheetHandler excelData = readExcel(new File("C:\\work\\excel\\mysample.xlsx"));
 
    System.out.println("Header List" + excelData.getHeader().size());
    System.out.println("Rows List" + excelData.getRows().size());
 
  }
 
   
  public static SheetHandler readExcel(File excelFile) {
 
   
      SheetHandler sheetHandler = new SheetHandler();
 
      try {
 
          OPCPackage pkg = OPCPackage.open(excelFile);
 
          XSSFReader xssfReader = new XSSFReader(pkg);
 
          ReadOnlySharedStringsTable data = new ReadOnlySharedStringsTable(pkg);
           
          StylesTable styles = xssfReader.getStylesTable();
 
 
          InputStream sheetStream = xssfReader.getSheetsData().next();
          InputSource sheetSource = new InputSource(sheetStream);
          
          ContentHandler handler = new XSSFSheetXMLHandler(styles, data, sheetHandler, false);
          
          XMLReader sheetParser = SAXHelper.newXMLReader();
 
          sheetParser.setContentHandler(handle
          sheetParser.parse(sheetSource);
          sheetStream.close();
        
      }catch (Exception e) {
        throw new RuntimeException(e);
      }
 
      return sheetHandler;
  }
   
}

 

2. SheetHandler.java

import java.util.ArrayList;
import java.util.List;
 
import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler;
import org.apache.poi.xssf.usermodel.XSSFComment;
public class SheetHandler implements SheetContentsHandler {
 
    private List<List<String>> rows = new ArrayList<>();
 
    private List<String> row = new ArrayList<>();
 
    private List<String> header = new ArrayList<>();
 
    private int currentCol = -1;
 
    private int currRowNum = 0;
     
    public List<String> getHeader() {
      return header;
    }
     
    public List<List<String>> getRows() {
      return rows;
    }
 
    public void startRow(int rowNum) {
 
        this.currentCol = -1;
        this.currRowNum = rowNum;
 
    }
 
    public void endRow(int rowNum) {
        if(rowNum ==0) {
            header = new ArrayList(row);
        } else {
            if(row.size() < header.size()) {
                for (int i = row.size(); i < header.size(); i++) {
                    row.add("");
                }
            }
            rows.add(new ArrayList(row));
        }
       row.clear();
    }
 
    public void cell(String columnName, String value, XSSFComment var3) {
        int iCol = (new CellReference(columnName)).getCol();
        int emptyCol = iCol - currentCol - 1;
 
        for(int i = 0 ; i < emptyCol ; i++) {
            row.add("");
        }
        currentCol = iCol;
        row.add(value);
    }
 
    public void headerFooter(String text, boolean isHeader, String tagName) {
 
    }
 
}
반응형
반응형

원래파일명하고 물리파일명을 받아
물리파일명을 읽어 원래 파일명으로 다운로드 시킵니다.

@RequestMapping("/download")
      public void download(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException {
           
        
       int fileNo = (request.getParameter("fileNo")==null)?0:Integer.parseInt(request.getParameter("fileNo"));
        
       Map<String,String> fileInfo = portalService.getPortalBoardFileInfo(fileNo);
           
          String filename = fileInfo.get("ORG_NAME");
          String downname = fileInfo.get("SYS_NAME");
          String path = fileInfo.get("PATH");
           
           
          String realPath = "";
          System.out.println("downname: "+downname);
          if (filename == null || "".equals(filename)) {
              filename = downname;
          }
            
          try {
              String browser = request.getHeader("User-Agent"); 
 
              if (browser.contains("MSIE") || browser.contains("Trident")
                      || browser.contains("Chrome")) {
                  filename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+",
                          "%20");
              } else {
                  filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
              }
          } catch (UnsupportedEncodingException ex) {
              System.out.println("UnsupportedEncodingException");
          }
          realPath = path +"/" + downname;
          System.out.println(realPath);
          File file1 = new File(realPath);
          if (!file1.exists()) {
              return ;
          }
                
          response.setContentType("application/octer-stream");
          response.setHeader("Content-Transfer-Encoding", "binary;");
          response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
          try {
              OutputStream os = response.getOutputStream();
              FileInputStream fis = new FileInputStream(realPath);
    
              int ncount = 0;
              byte[] bytes = new byte[512];
    
              while ((ncount = fis.read(bytes)) != -1 ) {
                  os.write(bytes, 0, ncount);
              }
              fis.close();
              os.close();
          } catch (FileNotFoundException ex) {
              System.out.println("FileNotFoundException");
          } catch (IOException ex) {
              System.out.println("IOException");
          }
      }
반응형
반응형

웹에서 로그인시 사용자 아이디를 저장하면
다시 로그인 창에 접속할때 전에 로그인한 아이디가 자동으로
입력되어서 사용자에게 편리성을 제공해줍니다.

다음은 처리 코드입니다

 

1. 로그인 

<input type="text" id="userId">
<input type="checkbox" id="idSaveCheck">아이디 저장하기

2. 아이디 저장 

$(document).ready(function(){
  
     
    var key = getCookie("key");
    $("#userId").val(key); 
      
    if($("#userId").val() != ""){
        $("#idSaveCheck").attr("checked", true); 
    }
      
    $("#idSaveCheck").change(function(){ 
        if($("#idSaveCheck").is(":checked")){ 
            setCookie("key", $("#userId").val(), 7); 
        }else{ 
            deleteCookie("key");
        }
    });
      
    
    $("#userId").keyup(function(){ 
        if($("#idSaveCheck").is(":checked")){ 
            setCookie("key", $("#userId").val(), 7); 
        }
    });
});
  
function setCookie(cookieName, value, exdays){
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var cookieValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toGMTString());
    document.cookie = cookieName + "=" + cookieValue;
}
  
function deleteCookie(cookieName){
    var expireDate = new Date();
    expireDate.setDate(expireDate.getDate() - 1);
    document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString();
}
  
function getCookie(cookieName) {
    cookieName = cookieName + '=';
    var cookieData = document.cookie;
    var start = cookieData.indexOf(cookieName);
    var cookieValue = '';
    if(start != -1){
        start += cookieName.length;
        var end = cookieData.indexOf(';', start);
        if(end == -1)end = cookieData.length;
        cookieValue = cookieData.substring(start, end);
    }
    return unescape(cookieValue);
}
반응형
반응형

1. @EnableScheduling 어노테이션()을 추가합니다.

@SpringBootApplication
@EnableScheduling
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

 

2. @Scheduled 어노테이션 사용을 사용하여 스케줄러를 등록합니다.

@Component
public class SchedulerService {
   
  @Autowired
  private CommonDao commonDao;
 
//초 분 시 ... 13시 50에 매일 실행됨
 @Scheduled(cron = "0 50 13 * * *")
 public void doUserUpdate() {
    //실행 로직
   comonDao.insert("portal.common.userUpdate",new DaoParam())
 }
 
 
}

 

반응형
반응형

1. Aplication을 수정합니다.

@SpringBootApplication
@MapperScan(basePackages = "com.portal.admin.main.dao")
@EnableAsync
public class PortalApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
 
    public static void main(String[] args) {
        SpringApplication.run(PortalApplication.class, args);
    }
 
//추가
    @Override
  protected WebApplicationContext run(SpringApplication application) {
 
      return super.run(application);
  }
 
//추가
  @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(PortalApplication.class);
    }

 

 

2. pom.xml 에서 packaging war로 수정합니다.

... 생략 ...
 
 
  <!-- [수정]war로 수정한다. -->
  <packaging>war</packaging>
  <name>PORTAL_ADMIN</name>
  <description>Demo project for Spring Boot</description>
 
  <properties>
    <java.version>1.8</java.version>
  </properties>
 
  <dependencies>
    <!-- [추가]추가 한다 -->
    <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
     
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
      </dependency>
      
 
 
              .. . 생략 ...
 
 
 
  </dependencies>
 
 
    <build>
        <!-- portal_admin.war 가 생성된다. -->
          <finalName>portal_admin</finalName>
  <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
    </build>
 
 
</project>

 

3. Run As 에서 Maven Build... 선택 후 Goals 안에 clean package 라고 입력 후 Run 버튼을 누르면 war 파일이 생성됩니다.

 

 

4. 서버 콘솔에서 실행합니다.

$ java -jar portal_admin.war
반응형

+ Recent posts