마이바티스 스프링 설정

pom.xml 중요한 부분은 resources

		<resources>
			<resource>
				<directory>src/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
					<include>**/*.tld</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>board</groupId>
	<artifactId>board</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.0.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jdbc</artifactId>
			<version>8.5.27</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.33</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>

		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok-maven-plugin -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok-maven-plugin</artifactId>
			<version>1.18.20.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.2-b02</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.0.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.5</version>
		</dependency>
		
	</dependencies>

	<build>
		<sourceDirectory>src</sourceDirectory>
		
		<resources>
			<resource>
				<directory>src/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
					<include>**/*.tld</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
		
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>11</source>
					<target>11</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.3</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

해당 위치 처럼 패키지, xml파일 설정 

 

config-mybatis.xml ( 수정할 부분 없음 ) 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

	<mappers>
		<!-- 마이바티스 매퍼 XML 파일 -->
		<mapper resource="mapper/MemberMapper.xml" />
	</mappers>
	
</configuration>

 

MemberMapper.xml

해당 파일에 쿼리문 작성 후 인터페이스에 지정

#{PARAM1}같은 건 ? 대신 사용 PARAM1은 아무거나 써도 됨 

<?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="mybatis.dao.MemberDAO">
    <select id="selectCount" resultType="_int">
        SELECT count(*)
        FROM member
    </select>
    
    <select id="selectList" resultType="member.model.Member">
        SELECT *
        FROM member
    </select>
    
    <select id="selectById" parameterType="string" resultType="member.model.Member">
    	SELECT * FROM MEMBER WHERE MEMBERID = #{PARAM1}
    </select>
    
    <update id="updateArtilce">
    	update article set title = #{param1}, moddate = now()
				where article_no = #{param2}
    
    </update>
    
    <insert id="insertArtCont" parameterType="article.model.ArticleContent">
    insert into article_content(article_no, content) values(#{artCon.number}, #{artCon.content});

    </insert>
    
    <insert id="insertArticle" parameterType="article.model.Article"
    									useGeneratedKeys="true" keyProperty="number">
    	insert into article(writer_id, writer_name, title, regdate, moddate, read_cnt)
			values (#{art.writer.id},#{art.writer.name},#{art.title},now(),now(),0)
    
    </insert>
    
</mapper>

 

mybatis.dao 패키지안에 MemberDAO 인터페이스 생성

MemberMapper.xml 참고해서 만들기

 

 

 

package mybatis.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import article.model.Article;
import article.model.ArticleContent;
import member.model.Member;

@Mapper
public interface MemberDAO {
	
	@Select("select * from member")
	List<Member> selectAll();
	
	Integer selectCount();
	
	List<Member> selectList();
	
	Member selectById(String id);
	
	void updateArtilce(String title, int num);
	
	void insertArtCont(@Param("artCon") ArticleContent articleContent);
	
	void insertArticle(@Param("art") Article article);
}

 

스프링 config에 MapperScan + SqlSessionFactory 설정

@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = "mybatis.dao")
public class ControllerConfig {
	@Bean(destroyMethod = "close")
	public DataSource dataSource() {
		DataSource ds = new DataSource();
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/board?" + "useSSL=true&useUnicode=true&characterEncoding=utf8");
		ds.setUsername("jspexam");
		ds.setPassword("jsppw");
		ds.setInitialSize(2);
		ds.setMaxActive(10);
		return ds;
	}


	@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:config-mybatis.xml"));
        //factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/*.xml"));
        factoryBean.setTypeAliasesPackage("mybatis.dao");
        return factoryBean.getObject();
    }
	
//	@Bean // 필요할 때 사용 
//	public SqlSessionFactory sqlSessionFactory() throws Exception {
//		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
//		sqlSessionFactory.setDataSource(dataSource());
//		return (SqlSessionFactory) sqlSessionFactory.getObject();
//	}

	@Bean
	public SqlSessionTemplate sqlSessionTemplate() throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory());
	}

 

마이바티스 테스트

package controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import article.dao.ArticleContentDao;
import article.dao.ArticleDao;
import auth.service.LoginService;
import member.dao.MemberDao;
import member.model.Member;
import member.service.ChangePasswordService;
import mybatis.dao.MemberDAO;

@Controller
public class MyController {
	@Autowired
	private ArticleContentDao articleContentDao;
	@Autowired
	private ArticleDao articleDao;
	
	@Autowired
	private MemberDAO memberDAO; 
	
	@Autowired
	private MemberDao memberDao;
	
	@Autowired
	private LoginService loginService;
	
	@Autowired
	private ChangePasswordService changePasswordService;
	
	@GetMapping("/count")
	public String countMember() {
		
		 마이바티스 테스트
		List<Member> list = memberDAO.selectAll();
		System.out.println(list);
		
		System.out.println(memberDAO.selectCount());
		
		List<Member> list = memberDAO.selectList();
		for(Member member : list) {
		System.out.println(member);	
		}
		
		Member member = memberDAO.selectById("test3");
		System.out.println(member);
		
		memberDAO.updateArtilce("글제목 369", 12);
		
		ArticleContent artc1 = new ArticleContent(105, "김기철");
		memberDAO.insertArtCont(artc1);
		
		Writer wr = new Writer("test34", "홍길동34");
		Article art = new Article(0, wr, "홍길동 테스트", null, null, 0);
		memberDAO.insertArticle(art);
//		System.out.println(art);

 

 

 

스프링5 MVC 게시판 

 

DAO

 

ArticleContentDao

package article.dao;

import java.util.List;

import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;

import article.model.ArticleContent;

public class ArticleContentDao {

	private JdbcTemplate jdbcTemplate;
	
	public ArticleContentDao(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	// 게시물 내용을 삽입
	public ArticleContent insert(ArticleContent content) { 
		String sql = "insert into article_content (article_no, content) values (?,?)";
		int insertedCount 
		 = jdbcTemplate.update(sql, content.getNumber(),content.getContent());
			

			if (insertedCount > 0) {
				return content;
			} else {
				return null;
			}
	}
	// 특정 ID에 해당하는 게시물 내용을 조회
	public ArticleContent selectById(int no){
		String sql = "select * from article_content where article_no = ?";
		List<ArticleContent> list = jdbcTemplate.query(sql, (rs, n)->{
			return new ArticleContent(
					rs.getInt("article_no"),
					rs.getString("content"));
		},no);
		return list.isEmpty() ? null : list.get(0);

	}
	
	// 특정 ID에 해당하는 게시물 내용을 업데이트
	public int update(int no, String content) {
		String sql = "update article_content set content = ? where article_no = ?";
		return jdbcTemplate.update(sql, content, no);
		

	}

}

 

 

ArticleDao

package article.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import article.model.Article;
import article.model.Writer;

public class ArticleDao {
	
	private JdbcTemplate jdbcTemplate;
	
	public ArticleDao(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

//	public Article insert(Article article) {
//		
//		String sql = "insert into article"
//				+ "(writer_id, writer_name, title, regdate, moddate, read_cnt)"
//				+ "values (?,?,?,now(),now(),0)";
//		int insertedCount = jdbcTemplate.update(sql, article.getWriter().getId(),
//													 article.getWriter().getName(),
//													 article.getTitle());
//		if (insertedCount > 0) {// 스프링 197페이지
//			int num = jdbcTemplate.queryForObject("select last_insert_id()"
//													, Integer.class);
//			article.setNumber(num);
//			return article;
//		}return null;
//				
//	}
	
	// 게시물 추가 메서드
	// 201~203쪽 keyHolder, 람다식
	public Article insert(Article article) {
	
	String sql = "insert into article"
			+ "(writer_id, writer_name, title, regdate, moddate, read_cnt) values (?,?,?,now(),now(),0)";
	
	KeyHolder keyHolder = new GeneratedKeyHolder();
	jdbcTemplate.update((con) -> {
		PreparedStatement pstm = con.prepareStatement(sql, new String[] {"article_no"});
		pstm.setString(1, article.getWriter().getId());
		pstm.setString(2, article.getWriter().getName());
		pstm.setString(3, article.getTitle());
		return pstm;
	},keyHolder);
	// 자동 생성된 키 값 가져오기 및 설정
	Number keyvalue = keyHolder.getKey();
	article.setNumber(keyvalue.intValue());
	return article;
	

			
}
	
	
	
	
    // 전체 게시물 개수 조회
	private Timestamp toTimestamp(Date date) {
		return new Timestamp(date.getTime());
	}

	public int selectCount()  {
		
		String sql = "select count(*) from article";
		
		return jdbcTemplate.queryForObject(sql, Integer.class);
	}
	
	// 특정 범위의 게시물 목록 조회
	public List<Article> select(int startRow, int size) {
		
		String sql = "select * from article order by article_no desc limit ?, ?";
		
		return jdbcTemplate.query(sql,
				(rs, n)-> convertArticle(rs), startRow, size);

	}
	// ResultSet을 Article 객체로 변환
	private Article convertArticle(ResultSet rs) throws SQLException {
		return new Article(rs.getInt("article_no"),
				new Writer(
						rs.getString("writer_id"),
						rs.getString("writer_name")),
				rs.getString("title"),
				toDate(rs.getTimestamp("regdate")),
				toDate(rs.getTimestamp("moddate")),
				rs.getInt("read_cnt"));
	}
	
	
	// Timestamp를 Date로 변환
	private Date toDate(Timestamp timestamp) {
		return new Date(timestamp.getTime());
	}
	
	
	// 특정 ID에 해당하는 게시물 조회
	public Article selectById(int no)  {
		
		String sql = "select * from article where article_no = ?";
		
		List<Article> list = jdbcTemplate.query(sql,
				(rs, n) -> convertArticle(rs), no);
		
		return list.isEmpty() ? null : list.get(0);
		

	}
	  // 게시물의 조회수 증가
	public void increaseReadCount(int no) {
		String sql = "update article set read_cnt = read_cnt + 1 where article_no = ?";
		jdbcTemplate.update(sql, no);
		

	}
	 // 게시물 정보 업데이트 메서드
	public int update(int no, String title) {
		String sql = "update article set title = ?, moddate = now() where article_no = ?";
		
		return jdbcTemplate.update(sql, title, no);

	}
	// 게시물 삭제 메서드
	public int delete(int no) {
		String sql = "delete from article where article_no =?";
		return jdbcTemplate.update(sql, no);
	}
	
	
}

 

 

Service ( 종류가 많아서 GitHub 주소 참고 )

 

 

Config 

package config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import article.dao.ArticleContentDao;
import article.dao.ArticleDao;
import article.service.ListArticleService;
import article.service.ModifyArticleService;
import article.service.ReadArticleService;
import article.service.WriteArticleService;
import auth.service.LoginService;
import controller.ArtController;
import controller.LogController;
import controller.MyController;
import member.dao.MemberDao;
import member.service.ChangePasswordService;
import member.service.JoinService;

@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = "mybatis.dao")
public class ControllerConfig {
	@Bean(destroyMethod = "close")
	public DataSource dataSource() {
		DataSource ds = new DataSource();
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/board?" + "useSSL=true&useUnicode=true&characterEncoding=utf8");
		ds.setUsername("jspexam");
		ds.setPassword("jsppw");
		ds.setInitialSize(2);
		ds.setMaxActive(10);
		return ds;
	}

	@Bean
	public MemberDao memberDao() {
		return new MemberDao(dataSource());
	}

	@Bean
	public LoginService loginService() {
		return new LoginService();
	}

	@Bean
	public ChangePasswordService changePasswordService() {
		return new ChangePasswordService();
	}

	@Bean
	public JoinService joinService() {
		return new JoinService();
	}

	@Bean
	public PlatformTransactionManager transactionManager() {
		DataSourceTransactionManager tm = new DataSourceTransactionManager();
		tm.setDataSource(dataSource());
		return tm;
	}

	@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:config-mybatis.xml"));
        //factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/*.xml"));
        factoryBean.setTypeAliasesPackage("mybatis.dao");
        return factoryBean.getObject();
    }
	
//	@Bean
//	public SqlSessionFactory sqlSessionFactory() throws Exception {
//		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
//		sqlSessionFactory.setDataSource(dataSource());
//		return (SqlSessionFactory) sqlSessionFactory.getObject();
//	}

	@Bean
	public SqlSessionTemplate sqlSessionTemplate() throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory());
	}


	@Bean
	public MyController myController() {
		return new MyController();
	}

	@Bean
	public LogController logController() {
		return new LogController();
	}
	
	@Bean
	public ArticleContentDao articleContentDao() {
		return new ArticleContentDao(dataSource());
	}
	
	@Bean
	public ArticleDao articleDao() {
		return new ArticleDao(dataSource());
	}
	
	@Bean
	public ListArticleService listArticleService() {
		return new ListArticleService();
	}
	@Bean
	public ModifyArticleService modifyArticleService() {
		return new ModifyArticleService();
	}
	@Bean
	public ReadArticleService readArticleService() {
		return new ReadArticleService();
	}
	@Bean
	public WriteArticleService writeArticleService() {
		return new WriteArticleService();
	}
	@Bean
	ArtController artController() {
		return new ArtController();
	}

}

 

package config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/view/", ".jsp");
	}
	

}

 

 

controller

package controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import article.model.Writer;
import article.service.ArticleContentNotFoundException;
import article.service.ArticleData;
import article.service.ArticleNotFoundException;
import article.service.ArticlePage;
import article.service.ListArticleService;
import article.service.ModifyArticleService;
import article.service.ModifyRequest;
import article.service.PermissionDeniedException;
import article.service.ReadArticleService;
import article.service.WriteArticleService;
import article.service.WriteRequest;
import auth.service.User;



@Controller
public class ArtController {
	@Autowired
	private ListArticleService listArticleService;
	
	@Autowired
	private ModifyArticleService modifyArticleService;
	
	@Autowired
	private ReadArticleService readArticleService;
	
	@Autowired
	private WriteArticleService writeArticleService;
	

	
	///article/write.do=article.command.WriteArticleHandler
	///article/list.do=article.command.ListArticleHandler
	///article/read.do=article.command.ReadArticleHandler
	///article/modify.do=article.command.ModifyArticleHandler
	
	@GetMapping("/article/list.do")
	public String listArticle(HttpServletRequest req) {
		
		String pageNoVal = req.getParameter("pageNo");
		int pageNo = 1;
		if (pageNoVal != null) {
			pageNo = Integer.parseInt(pageNoVal);
		}
		ArticlePage articlePage = listArticleService.getArticlePage(pageNo);
		req.setAttribute("articlePage", articlePage);
		return "listArticle";
		
		
	}
	@GetMapping("/article/read.do")
	public String readArticle(HttpServletRequest req, HttpServletResponse res) {
		
		String noVal = req.getParameter("no");
		int articleNum = Integer.parseInt(noVal);
		try {
			ArticleData articleData = readArticleService.getArticle(articleNum, true);
			req.setAttribute("articleData", articleData);
			return "readArticle";
		} catch (ArticleNotFoundException | ArticleContentNotFoundException e) {
			req.getServletContext().log("no article", e);
			try {
				res.sendError(HttpServletResponse.SC_NOT_FOUND);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return null;
		}
		
		
	}
	
	@GetMapping("/article/write.do")
	public String writeArticle1() {
		return "newArticleForm";
	}
	
	private WriteRequest createWriteRequest(User user, HttpServletRequest req) {
		return new WriteRequest(
				new Writer(user.getId(), user.getName()),
				req.getParameter("title"),
				req.getParameter("content"));
	}
	
	@PostMapping("/article/write.do")
	public String writeArticle2(HttpServletRequest req, HttpServletResponse res) {
		
		Map<String, Boolean> errors = new HashMap<>();
		req.setAttribute("errors", errors);

		User user = (User)req.getSession(false).getAttribute("authUser");
		WriteRequest writeReq = createWriteRequest(user, req);
		writeReq.validate(errors);
		
		if (!errors.isEmpty()) {
			return "newArticleForm";
		}
		
		int newArticleNo = writeArticleService.write(writeReq);
		req.setAttribute("newArticleNo", newArticleNo);
		
		return "newArticleSuccess";
		
		
	}
	
	@GetMapping("/article/delete.do")
	public String delete(){
		return "delete";
	}	
	
	private boolean canModify(User authUser, ArticleData articleData) {
		String writerId = articleData.getArticle().getWriter().getId();
		return authUser.getId().equals(writerId);
	}
	
	@GetMapping("/article/modify.do")
	public String modifyArticle1(HttpServletRequest req, HttpServletResponse res) {
		
		try {
			String noVal = req.getParameter("no");
			int no = Integer.parseInt(noVal);
			ArticleData articleData = readArticleService.getArticle(no, false);
			User authUser = (User) req.getSession().getAttribute("authUser");
			if (!canModify(authUser, articleData)) {
				res.sendError(HttpServletResponse.SC_FORBIDDEN);
				return null;
			}
			ModifyRequest modReq = new ModifyRequest(authUser.getId(), no,
					articleData.getArticle().getTitle(),
					articleData.getContent());

			req.setAttribute("modReq", modReq);
			return "modifyForm";
		} catch (ArticleNotFoundException | IOException e) {
			try {
				res.sendError(HttpServletResponse.SC_NOT_FOUND);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return null;
		}
		
		
	}
	
	@PostMapping("/article/modify.do")
	public String modifyArticle2(HttpServletRequest req, HttpServletResponse res) {
		
		User authUser = (User) req.getSession().getAttribute("authUser");
		String noVal = req.getParameter("no");
		int no = Integer.parseInt(noVal);

		ModifyRequest modReq = new ModifyRequest(authUser.getId(), no,
				req.getParameter("title"),
				req.getParameter("content"));
		req.setAttribute("modReq", modReq);

		Map<String, Boolean> errors = new HashMap<>();
		req.setAttribute("errors", errors);
		modReq.validate(errors);
		if (!errors.isEmpty()) {
			return "modifyForm";
		}
		try {
			modifyArticleService.modify(modReq);
			return "modifySuccess";
		} catch (ArticleNotFoundException e) {
			try {
				res.sendError(HttpServletResponse.SC_NOT_FOUND);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return null;
		} catch (PermissionDeniedException e) {
			try {
				res.sendError(HttpServletResponse.SC_FORBIDDEN);
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return null;
		}
		
		
	}
	

	

	
	
}

 

 

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-08-17 63일차  (0) 2023.08.17
2023-08-16 62일차  (0) 2023.08.16
2023-08-10 60일차  (0) 2023.08.10
2023-08-09 59일차  (0) 2023.08.09
2023-08-08 58일차  (0) 2023.08.08

+ Recent posts