Java Web開発プロセス🌞
ファイルのアップロード
ファイルをアップロード
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="/admin/notice/reg" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
@PostMapping("upload")
public String upload(/*@RequestParam(name="file1")*/ MultipartFile file, /*file이라는 같은 변수명으로 받으려면 name 속성도 같은 이름("file")이어야함, name 속성 이름이 다르다면 RequestParam을 써줘야함*/
HttpServletRequest request) {
String fileName = file.getOriginalFilename(); // file 이름 얻기
ServletContext application = request.getServletContext();
String path = "/upload";
String realPath = application.getRealPath(path);
File pathFile = new File(realPath);
if(!pathFile.exists())
pathFile.mkdirs();
String filePath = realPath + File.separator + fileName;
File saveFile = new File(filePath); // 저장할 파일
try {
file.transferTo(saveFile); // 이 메소드에 의해 저장 경로에 실질적으로 파일이 생성됨, 저장하려고 한 파일이 저장되는 것임
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "ok";
}
複数のファイルをアップロード
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/admin/upload" method="post" enctype="multipart/form-data">
<input type="file" name="files"><br>
<input type="file" name="files"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
@PostMapping("upload") // 비동기적으로 파일 업로드하기
public String upload(MultipartFile[] files, /*file이라는 같은 변수명으로 받으려면 name 속성도 같은 이름("file")이어야함, name 속성 이름이 다르다면 RequestParam을 써줘야함*/
HttpServletRequest request) {
for(MultipartFile file : files) {
String fileName = file.getOriginalFilename(); // file 이름 얻기
ServletContext application = request.getServletContext();
String path = "/upload";
String realPath = application.getRealPath(path);
File pathFile = new File(realPath);
if(!pathFile.exists())
pathFile.mkdirs();
String filePath = realPath + File.separator + fileName;
File saveFile = new File(filePath); // 저장할 파일, 파일에 대한 정보 구조가 메모리에만 생기는 것
try {
file.transferTo(saveFile); // 이 메소드에 의해 저장 경로에 실질적으로 파일이 생성됨, 저장하려고 한 파일이 저장되는 것임
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "ok";
}
Tiles
Tailsは、Webページの上部や下部のメニューなど、繰り返し使用する部分のコードを分離し、1つの場所で管理することができます.
説明の作成
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="../../css/style.css" type="text/css" rel="stylesheet">
<c:set var="title" value="${title }"></c:set> <!-- SubLayoutPreparer에서 심어준 title -->
<title>${title}</title>
<!-- tiles.xml에서 설정한 값 출력 -->
<c:set var="js"><tiles:getAsString name="js" /></c:set> <!-- 태그가 태그를 감싸지 않게 하기 -->
<script type="text/javascript" src="/js/admin/notice/${js}"></script>
</head>
<body>
<div id="root">
<!-- header 영역 -->
<tiles:insertAttribute name="header" />
<div id="visual">
<div class="float-content"></div>
</div>
<div id="body">
<div class="float-content">
<!-- asdie 영역, admin에서만 사용할 aside이므로 admin/inc 안에 두기 -->
<tiles:insertAttribute name="aside" />
<!-- main 영역 -->
<tiles:insertAttribute name="main" />
</div>
</div>
<!-- footer 영역 -->
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="admin.notice.list" template="/WEB-INF/view/admin/inc/layout.jsp"> <!-- name은 url 본떠서 작성하기 -->
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/admin/inc/aside.jsp" />
<put-attribute name="main" value="/WEB-INF/view/admin/notice/list.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
</tiles-definitions>
オブジェクト化レイヤのコード
package com.newlecture.web.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.view.tiles3.TilesView;
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
//@Controller/@RestController
//@Service
//@Repository(DAO)
//@Configuration
//(Component == 위 4개)식별할 때 더 잘 식별하기 위해 역할에 따른 객체를 선택적으로 사용 가능
@Configuration
// 객체를 담고 있는 것은 빈을 담고 있다고 해서 Bean Container(콩자루, 콩보따리)라고 함: IoC Container
// 다섯 개 중 아무 거나 붙이면 톰캣이 실행되면서 TilesConfig를 객체화하게 됨
public class TilesConfig /* tilesConfig라는 이름으로 참조변수가 됨 */ { // 2. 이게 먼저 인스턴스화되어야 함
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer configurer = new TilesConfigurer();
return configurer;
}
@Bean // 얘도 콩이라고, 객체라고 알려주는 것
// 누군가가 호출해서 사용하는 함수가 아니라 config로서 메모리에 올리기 위한 변수, tilesViewResolver가 콩자루에 들어가는 식별명
public TilesViewResolver tilesViewResolver() { // 1. 이게 인스턴스화되려면
TilesViewResolver resolver = new TilesViewResolver();
resolver.setViewClass(TilesView.class);
resolver.setOrder(1);
return resolver; // bean은 실행해서 반환하는 이 객체를 콩자루에 담게 해줌
// resolver가 tilesViewResolver라는 이름으로 콩자루에 들어감
}
// tilesViewResolver = resolver;
}
🐥の最後の部分
最初のプロジェクトでは、重複するヘッダー、aside、footerを一度に修正する方法が分からず、同じコードを何度も修正したことがあり、今日やっと同じレイアウトを集中化する食事法がわかりました.
これは、Tilesを使用する方法で、まずTilesをオブジェクト化するためのコードを記述し、header、aside、main、footerをどのレイアウトページにマージするかについての命令を記述します.また、レイアウトページはtiles jstlタグを使用してヘッダー、aside、main、フッターをnameとしてマークします.これにより、いくつかのステップを経るだけで、同じコードを簡単に修正することができ、繰り返し修正する必要はありません.
コメントサイト
テルズって何?Tiles
Reference
この問題について(Java Web開発プロセス🌞), 我々は、より多くの情報をここで見つけました
https://velog.io/@minjulee97/0603-자바-웹-개발-과정
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Java Web開発プロセス🌞), 我々は、より多くの情報をここで見つけました https://velog.io/@minjulee97/0603-자바-웹-개발-과정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol