EgovMenuList.js 에 추가한 내용이다. 


본부코드는 20000000 대 코드번호를 갖는다는 조건을 이용하였다

부서클릭시 본부코드와 본부명을 출력한다. 


/*

 * 부서 클릭 시 본부코드 출력

 * 

 * Auth : XXXXXX

 * 

 * param : 부서코드번호

 * 

 * return: 본부코드번호

 */


function getHdqrtrsCd(deptNo) {

var r = '';

if (deptNo < 30000000) {

r = deptNo

} else {

for (i = 0; i < treeNodes.length; i++) {

var nodeValues = treeNodes[i].split("|");

if (nodeValues[0] == deptNo) {

r = getHdqrtrsCd(nodeValues[1]);

}

}

}

return r;

}


/*

 * 부서 클릭 시 본부이름 출력

 * 

 * Auth : XXXXXX

 * 

 * param : 부서코드번호

 * 

 * return: 본부이름

 */

function getHdqrtrsNM(deptNo) {

var r = '';

if (deptNo < 30000000) {

for (i = 0; i < treeNodes.length; i++) {

var nodeValues = treeNodes[i].split("|");

if (nodeValues[0] == deptNo) {

r = nodeValues[2];

}

}

} else {

for (i = 0; i < treeNodes.length; i++) {

var nodeValues = treeNodes[i].split("|");

if (nodeValues[0] == deptNo) {

r = getHdqrtrsNM(nodeValues[1]);

}

}

}

return r;

}



<result property="empAnslry" column="EMP_ANSLRY" nullValue="0"/>

<result property="empMntslr" column="EMP_MNTSLR" nullValue="0"/>

eGovFrame 01.실행환경_실습교제(공통기반)


이 문제를 진행하다보면 XMLEmpDAO의 소스에서 Collections부분의 에러를 확인할 수 있다. 

Bound mismatch : the generic method sort(list <t> ) of type collections is not applicable....



이는 콜렉션프레임워크에서 정렬을 할 때 각 원소간 크기를 비교해야하는데 그 기준을 정의하지 않아서 발생하는에러이다. 

이 에러를 해결하기 위해선 객체를 정의할 때 Comparable을 implement 한 뒤 정의 하면 된다.






<![CDATA[

attendance_date >= to_date(#{start_month}, 'YYYYMM') and attendance_date < to_date(#{finish_month}, 'YYYYMM')

]]>

SpringMVCMybatis project 이클립스설치->marketplace spring sts

프로젝트 생성  : Spring project MVC

src/main/webapp/web-inf/web.xml 수정 *.do, 인코딩 관련


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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/spring/root-context.xml</param-value>

  </context-param>

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

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  <servlet>

    <servlet-name>appServlet</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>appServlet</servlet-name>

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

  </servlet-mapping>

</web-app>

pom.xml 수정 DB드라이버 추가 Build path 사용하지않고 추가


<repositories>

<repository>

<id>codelds</id>

<url>https://code.lds.org/nexus/content/groups/main-repo</url>

</repository>

</repositories>

 

 <dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.2.2</version>
  </dependency>
  <dependency>
   <groupId>commons-io</groupId>
   <artifactId>commons-io</artifactId>
   <version>1.3.2</version>
  </dependency>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${org.springframework-version}</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.2</version>

</dependency>


<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.6.9</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>1.6.9</version>

</dependency>


<dependency>

<groupId>cglib</groupId>

<artifactId>cglib</artifactId>

<version>2.2.2</version>

</dependency>



<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.0</version>

</dependency>

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.3</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>xerces</groupId>

<artifactId>xercesImpl</artifactId>

<version>2.9.1</version>

</dependency>

<dependency>

<groupId>cglib</groupId>

<artifactId>cglib</artifactId>

<version>2.2.2</version>

</dependency>



<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/webapp/web-inf/spring/appservlet/servlet-context.xml 수정

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

<beans:beans xmlns="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


<!-- DispatcherServlet Context: defines this servlet's request-processing 

infrastructure -->


<!-- Enables the Spring MVC @Controller programming model -->

<annotation-driven />

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

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

<!-- Handles HTTP GET requests for /resources/** by efficiently serving 

up static resources in the ${webappRoot}/resources directory -->

<resources mapping="/**" location="/resources/" />


<!-- Resolves views selected for rendering by @Controllers to .jsp resources 

in the /WEB-INF/views directory -->

<beans:bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>




<!-- JNDI기반의 설정 설정 예시 -->

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myoracle"

resource-ref="true" />

<!-- <beans:bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 

<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 

<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> 

<beans:property name="username" value="hr"/> <beans:property name="password" 

value="hr"/> </beans:bean> -->




<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<beans:property name="dataSource" ref="dataSource" />

<beans:property name="mapperLocations" value="classpath*:mappers/*Mapper.xml" />

<beans:property name="configLocation" value="classpath:sqlMapConfigure.xml" />


</beans:bean>


<!--공유되지 않고 thread에 안전, requestScope, method scope -->

<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

<beans:constructor-arg index="0" ref="sqlSessionFactory" />

</beans:bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<beans:bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

p:dataSource-ref="dataSource" />

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="*" propagation="REQUIRED" />

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut expression="within(com.kodb.web.*)" id="serviceInsertMethod" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceInsertMethod" />

</aop:config>

<!-- <beans:bean name="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<beans:property name="maxUploadSize" value="10000000" />

</beans:bean> -->



</beans:beans>


<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> 서버 설정 server/context.xml JNDI 사용시 서버설정<!--[endif]-->

<Resource name="jdbc/myoracle" auth="Container"

type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"

url="jdbc:oracle:thin:@127.0.0.1:1521:xe"

username="hr" password="hr" maxActive="20" maxIdle="10"

maxWait="-1"/>

 

 

 

src/main/resources/sqlMapConfigure.xml 에 TypeAiases 지정

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

<typeAliases>

<typeAlias type="model.MemberVO" alias="membervo/>

</typeAliases>

</configuration>

 

src/main/resources/mappers/memberMapper.xml 생성

<mapper namespace="mymember">

<select id="selectAll" resultType="membervo">

select MNO, EMAIL, PWD, MNAME,

CRE_DATE, MOD_DATE

from members

order by 1

</select>

<select id="selectByNo" parameterType="int" resultType="membervo">

select

MNO, EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE

from members

where MNO = #{mno}

</select>

<update id="updateByNo" parameterType="membervo">

update members

set EMAIL=#{email},

PWD=#{pwd},

MNAME=#{mname},

MOD_DATE = sysdate

where MNO = #{mno}

</update>

<delete id="deleteByNo" parameterType="membervo">

delete from members

where MNO = #{mno}

</delete>

<insert id="insertMember" parameterType="membervo">

insert into

members(MNO, EMAIL, PWD, MNAME, CRE_DATE, MOD_DATE)

values(seq_mno.nextval, #{email}, #{pwd},#{mname},sysdate, sysdate)

<!-- #{cre_date:DATE} -->

</insert>

</mapper>

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/modelVO, DAO(인터페이스사용), Service(인터페이스사용)생성

VO 구현 default생성자+생성자+getter/setter+toString(확인용)

private int mno;

private String email;

private String pwd;

private String mname;

private Date cre_date;

private Date mod_date;

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/model/MemberDAO.java 생성 (인터페이스)

public interface MemberDAO {

public ArrayList<MemberVO> selectAll(String condition, String keyword);

public MemberVO selectByNo(int mno);

public MemberVO selectByEmail(String email);

public int insertMember(MemberVO member);

public int updateMember(MemberVO member);

public int deleteMember(int mno);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/model/MemberDAOImpl.java 생성

<!--[if !supportEmptyParas]--> <!--[endif]-->

@Component

public class MemberDAOImpl implements MemberDAO {

@Autowired

SqlSession sqlSession;

<!--[if !supportEmptyParas]--> <!--[endif]-->

public ArrayList<MemberVO> selectAll(String condition, String keyword) {

<!--[if !supportEmptyParas]--> <!--[endif]-->

List list = sqlSession.selectList("mymember.selectAll");

return (ArrayList<MemberVO>) list;

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

@Override

public MemberVO selectByNo(int mno) {

return sqlSession.selectOne("mymember.selectByNo", mno);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

@Override

public int insertMember(MemberVO member) {

return sqlSession.insert("mymember.insertMember", member);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

@Override

public int updateMember(MemberVO member) {

return sqlSession.update("mymember.updateByNo", member);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

@Override

public int deleteMember(int mno) {

return sqlSession.delete("mymember.deleteByNo", mno);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/model/MemberService.java 생성(인터페이스)

public interface MemberService {

public ArrayList<MemberVO> selectAll(String condition, String keyword);

public MemberVO selectByNo(int mno);

public MemberVO selectByEmail(String email);

public int insertMember(MemberVO member);

public int updateMember(MemberVO member);

public int deleteMember(int mno);

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/model/MemberServiceImpl.java 생성

@Service

public class MemberServiceImpl implements MemberService{

@Autowired

MemberDAO memberDAO;

@Override

public ArrayList<MemberVO> selectAll(String condition, String keyword) {

return memberDAO.selectAll(condition, keyword);}

@Override

public MemberVO selectByNo(int mno) {

return memberDAO.selectByNo(mno);}

@Override

public MemberVO selectByEmail(String email) {

return memberDAO.selectByEmail(email);}

@Override

public int insertMember(MemberVO member) {

return memberDAO.insertMember(member);}

@Override

public int updateMember(MemberVO member) {

return memberDAO.updateMember(member);}

@Override

public int deleteMember(int mno) {

return memberDAO.deleteMember(mno);}

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/controllerMemberController.java 생성

@Controller

public class MemberController {

@Autowired

MemberService memberService;

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

public ModelAndView memberlist() {

ModelAndView mv = new ModelAndView();

<!--[if !supportEmptyParas]--> <!--[endif]-->

ArrayList<MemberVO> members = memberService.selectAll(null, null);

mv.addObject("memberlist", members);

mv.setViewName("member/memberlist");

return mv;

}

@RequestMapping(value = "/member/add.do", method = RequestMethod.GET)

public String addMember() {

return "member/memberInsertForm";

}

@RequestMapping(value = "/member/add.do", method = RequestMethod.POST)

public String addMemberPost(MemberVO member) {

int ret = memberService.insertMember(member);

System.out.println(ret + "건 입력됨");

System.out.println(member);

return "redirect:list.do";

}

@RequestMapping(value = "/member/update.do", method = RequestMethod.GET)

public ModelAndView updateMember(int mno) {

MemberVO member = memberService.selectByNo(mno);

ModelAndView mv = new ModelAndView();

mv.addObject("member", member);

mv.setViewName("member/updateForm");

return mv;

}

@RequestMapping(value = "/member/update.do", method = RequestMethod.POST)

public String updateMemberPost(int mno, String email,String pwd, String mname) {

MemberVO member = new MemberVO(mno, email, pwd, mname, null, null);

int ret = memberService.updateMember(member);

System.out.println(ret+"건 수정");

System.out.println(member);

return "redirect:list.do";

}

@RequestMapping("/member/delete.do")

public String deleteMember(int mno) {

ModelAndView mv = new ModelAndView();

int ret = memberService.deleteMember(mno);

System.out.println(ret + "건 수정");

return "redirect:list.do";

}

@ExceptionHandler(Exception.class) //에러발생시 화면전환 + console출력

public String handleException(Exception e){

System.out.println("Eception오류:"+e);

e.getStackTrace();

return "/myerror";

}

}

src/main/webapp/web-inf/views 밑에 auth(login관련)+메인화면+출력화면 jsp파일들 생성

/member/memberlist.jsp

<%@page import="model.MemberVO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ page import="java.util.ArrayList"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<jsp:useBean id="memberlist" class="java.util.ArrayList"

type="ArrayList<MemberVO>" scope="request" />

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%@include file="../header.jsp"%><br>

<h1>우리반 목록</h1>

<a href='add.do'>신규입력</a><br><br><br>

<%-- <c:if test="${sessionScope.member==null}">

<c:redirect url="../auth/login.do"></c:redirect>

</c:if> --%>

<c:set var="a" value=""></c:set>

<c:set var="b" value=""></c:set>

<c:if test="${condition=='mname'}">

<c:set var="a" value="selected"/>

</c:if>

<c:if test="${condition=='email'}">

<c:set var="b" value="selected"/>

</c:if>

<form action="list.do" method="get">

<select name="condition">

<option value="mname" ${a}>이름

<option value="email" ${b}>이메일

</select>

<input type="text" name="keyword" value="${keyword }">

<input type="submit" value="조회">

</form>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<table border='1'>

<tr>

<th>번호</th>

<th>이름</th>

<th>이메일</th>

<th>암호</th>

<th>가입일</th>

<th>변경일</th>

<th>삭제</th>

</tr>

<c:forEach var="m" items="${memberlist}">

<tr>

<td><a href="update.do?mno=${m.mno }">${m.mno }</a></td>

<td>${m.mname }</td>

<td>${m.email }</td>

<td>${m.pwd }</td>

<td>${m.cre_date }</td>

<td>${m.mod_date }</td>

<td><a href="delete.do?mno=${m.mno }">삭제</a>

</th>

</tr>

</c:forEach>

</table>

<%@include file="../bottom.jsp"%><br>

</body>

</html>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

/member/memberInsertForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<!--[if !supportEmptyParas]--> <!--[endif]-->

</head>

<body>

<h1>신규등록</h1>

<br>

<br>

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

이름 : <input type="text" name="mname"><br> 이메일 : <input

type="text" name="email"><br> 비밀번호 : <input

type="password" name="pwd"><br> <input type="submit"

value="추가"> <input type="reset" value="취소" onclick='func();'>

<!--[if !supportEmptyParas]--> <!--[endif]-->

</form>

</body>

</html>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

/member/updateForm.jsp

<%@page import="model.MemberVO"%>

<%@page import="model.MemberDAO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<%-- <%

MemberVO mem = (MemberVO)request.getAttribute("member");

%>

--%>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<h1>회원정보 수정</h1>

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

번호:<input type="text" name="mno" value="${member['mno'] }"><br>

이름:<input type="text" name="mname" value="${member.mname }"><br>

이메일:<input type="text" name="email" value="${member.email }"><br>

비밀번호:<input type="text" name="pwd" value="${member.pwd }"><br>

생성일:<input type="text" name="cre_date" value="${member.cre_date }"><br>

수정일:<input type="text" name="mod_date" value="${member.mod_date }"><br>

<input type="submit" value="수정">

<input type="reset" value="취소" >

</form>

<!--[if !supportEmptyParas]--> <!--[endif]-->

</body>

</html>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

에러 발생시 호출되는 페이지

/error.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

오류발생~~~~

</body>

</html>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

UpLoad기능추가

pom.xml

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.2.2</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>1.3.2</version>

</dependency>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/webapp/upload 폴더 생성

/member/memberInsertForm.jsp

<form action="add.do" method="post" enctype="multipart/form-data">

이름 : <input type="text" name="mname"><br>

이메일 : <input type="text" name="email"><br>

비밀번호 : <input type="password" name="pwd"><br>

사진 : <input type="file" name="file">

<input type="submit" value="추가">

<input type="reset" value="취소" onclick='func();'>

</form>

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/model/MemberVO 추가 +Getter/Setter

private String fileSrc;

private CommonsMultipartFile file;

<!--[if !supportEmptyParas]--> <!--[endif]-->

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/java/controller/MemberController.javac

if(!member.getFile().isEmpty()){

String path = request.getSession().getServletContext().getRealPath("/upload");

String file = member.getFile().getOriginalFilename();

String fpath = path+"\\"+file;

FileOutputStream fo = null;

System.out.println(fpath);

//나중에 DB에 파일이름 저장하기위함

member.setFileSrc(file);

try {

fo = new FileOutputStream(fpath);

fo.write(member.getFile().getBytes());

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

try {

if(fo!=null)fo.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

<!--[if !supportEmptyParas]--> <!--[endif]-->

src/main/webapp/web-inf/spring/appservlet/servlet-context.xml 수정

<!--[if !supportEmptyParas]--> <!--[endif]-->

<beans:bean name="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<beans:property name="maxUploadSize" value="10000000" />

</beans:bean>

맵퍼

<select id="selectByLecIdwithRownums" parameterType="map"

resultType="databoardvo">

select databoard_id, databoard_title,

databoard_regid,databoard_content,databoard_filename, databoard_uploaddate, lecture_id,

databoard_regname,category

from

(

select rownum rn, ln.*

from

(select *

from databoard

where lecture_id=#{lecture_id}

order by databoard_id desc) ln

)

where rn between #{start_row} and #{finish_row}

order by databoard_id desc

</select>




컨트롤러


@RequestMapping(value = "databoard.do", method = RequestMethod.GET)

public ModelAndView dataBoard(HttpServletRequest request,

HttpSession session) {

ModelAndView mv = new ModelAndView();

int start_row = Integer.parseInt(request.getParameter("start_row"));

int finish_row = Integer.parseInt(request.getParameter("finish_row"));

int nowpage = Integer.parseInt(request.getParameter("nowpage"));


LectureVO lecture = (LectureVO) session.getAttribute("lecture");


int lecture_id = 0;

lecture_id = lecture.getLecture_id();


System.out.println(lecture_id);


System.out.println(start_row + "~~~~" + finish_row + "~~~~"

+ lecture_id);


ArrayList<DataBoardVO> datalist = dataBoardService

.selectByLecIdwithRownums(lecture_id, start_row, finish_row);


// System.out.println(dataBoardService.selectByLecId(lecture_id));

for (DataBoardVO aa : datalist) {

System.out.println(aa);

}


// 게시글 총합 구하기

int boardcount = dataBoardService.countBoardByLecId(lecture_id);

mv.addObject("databoardtotal", boardcount);

mv.addObject("datalist", datalist);

mv.addObject("nowpage", nowpage);

mv.setViewName("lecture/dataBoard");


return mv;

}


JSP



  <c:set var="previous" value=""></c:set>

<c:set var="next" value=""></c:set>

<c:set var="pid" value='id="previous"'></c:set>

<c:set var="nid" value='id="next"'></c:set>

<c:set var="pages" value="${databoardtotal/10}"></c:set>

<c:if test="${nowpage<=1}">

<c:set var="previous" value='class="disabled"'></c:set>

<c:set var="pid" value=""></c:set>

</c:if>

<c:if test="${pages<nowpage}">

<c:set var="next" value='class="disabled"'></c:set>

<c:set var="nid" value=""></c:set>

</c:if>

<div class="row">

<ul class="pager">

<li ${previous }><a ${pid } >Previous</a></li>

<li>${nowpage}</li>

<li ${next }><a ${nid } >Next</a></li>

</ul>

</div>

   

 

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->

<script

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

  <script type="text/javascript">

var nowpage =${nowpage};

var start_row ;

var finish_row ;

$(document).ready(function() {


$("#previous").on("click", function() {

--nowpage;

start_row = nowpage * 10 - 9;

finish_row = nowpage * 10;

loadtabpage('databoard.do?start_row='+start_row+'&finish_row='+finish_row+'&nowpage='+nowpage);

});

$("#next").on("click", function() {

++nowpage;

start_row = nowpage * 10 - 9;

finish_row = nowpage * 10;

loadtabpage('databoard.do?start_row='+start_row+'&finish_row='+finish_row+'&nowpage='+nowpage);

});


});



</script> 



'Computer > Spring Maven MyBatis' 카테고리의 다른 글

MyBatis <> 사용 & 기간검색  (0) 2015.05.30
Spring Mybatis 기본설정  (0) 2014.09.26
Spring GET방식 한글 깨짐  (0) 2014.08.18
Spring 파일 다운로드  (0) 2014.08.18
Spring 파일 업로드  (0) 2014.08.18

Server.xml line 65    


<Connector URIEncoding = "UTF-8" connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/>

'Computer > Spring Maven MyBatis' 카테고리의 다른 글

Spring Mybatis 기본설정  (0) 2014.09.26
Spring 게시판 페이지  (0) 2014.08.18
Spring 파일 다운로드  (0) 2014.08.18
Spring 파일 업로드  (0) 2014.08.18
Mybatis ResultMap con  (0) 2014.08.13


@RequestMapping(value = "databoardDownload.do", method = RequestMethod.GET)

public void databoardDownload(String file, HttpServletRequest request,

        HttpServletResponse response) throws IOException{

     response.setHeader("Content-Disposition", "attachment;filename="+file);

     String fullPath = request.getSession().getServletContext().getRealPath("/resources/upload/databoard/" + file );

      FileInputStream fi = new FileInputStream(fullPath);

      ServletOutputStream sout = response.getOutputStream();

      byte[] buf = new byte[1024];

      int size = 0;

      while((size = fi.read(buf, 0, 1024))!=-1){

         sout.write(buf, 0, size);

      }

      fi.close();

      sout.close();

  

}

'Computer > Spring Maven MyBatis' 카테고리의 다른 글

Spring Mybatis 기본설정  (0) 2014.09.26
Spring 게시판 페이지  (0) 2014.08.18
Spring GET방식 한글 깨짐  (0) 2014.08.18
Spring 파일 업로드  (0) 2014.08.18
Mybatis ResultMap con  (0) 2014.08.13

servlet-context.xml


<aop:config>

<aop:pointcut expression="within(com.kodb.web.*)" id="serviceInsertMethod" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceInsertMethod" />

</aop:config>

<beans:bean name="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<beans:property name="maxUploadSize" value="10000000" />

</beans:bean>




form.jsp


<div class="table-responsive">

<table class="table table-striped">

<thead>

<tr>

<th class="col-sm-1">번호</th>

<th>제목</th>

<th class="col-sm-2">작성자</th>

<th class="col-sm-2">작성일</th>

</tr>

</thead>

<tbody>

<c:set var="i" value="1"></c:set>

<c:forEach var="a" items="${datalist}">

<tr>

<td>${a.databoard_id }</td>

<td><a data-toggle="collapse" data-parent="#accordion"

href="#collapse${i}">${a.databoard_title }</a></td>

<td>${a.databoard_regname }</td>

<td>${a.databoard_uploaddate }</td>

</tr>




<tr>

<td colspan="4">

<div id="collapse${i}" class="panel-collapse collapse">

<div class="text-right"><a href="databoardDownload.do?file=${a.databoard_filename }" >${a.databoard_filename }</a></div>

<div class="panel-body">${a.databoard_content }</div>

</div>

</td>

</tr>


<c:set var="i" value="${i+1}"></c:set>

</c:forEach>

</tbody>

</table>

</div>




Controller

@RequestMapping(value = "databoardInsert.do", method = RequestMethod.POST)
public String dataupload(HttpServletRequest request,
DataBoardVO dataBoard) {
if (!dataBoard.getFile().isEmpty()) {
        String path = request.getSession().getServletContext().getRealPath("/resources/upload/databoard");
        Date d =  new Date();
        System.out.println(d.getTime());
        String file = d.getTime()+"_"+dataBoard.getFile().getOriginalFilename();
        String fpath = path + "\\" + file;
        System.out.println(fpath);
        FileOutputStream fo= null;
        
        System.out.println(file);
        System.out.println(fpath);
        //나중에 DB에 파일 이름 저장 하려고.
        dataBoard.setDataboard_filename(file);
        
        try {
           fo = new FileOutputStream(fpath);
           fo.write(dataBoard.getFile().getBytes());
           System.out.println("파일저장 완료");

        } catch (FileNotFoundException e) {

           e.printStackTrace();
        } catch (IOException e) {
           
           e.printStackTrace();
        } finally {
           try {
              if(fo!=null)fo.close();
           } catch (IOException e) {
              
              e.printStackTrace();
           }
        }

     }


'Computer > Spring Maven MyBatis' 카테고리의 다른 글

Spring Mybatis 기본설정  (0) 2014.09.26
Spring 게시판 페이지  (0) 2014.08.18
Spring GET방식 한글 깨짐  (0) 2014.08.18
Spring 파일 다운로드  (0) 2014.08.18
Mybatis ResultMap con  (0) 2014.08.13

 mybatis에서 테이블간의 1:N관계를 select 할때 resultMap을 통한 일종의 서브쿼리 형식으로 데이터를 가져올수 있다.

 예를들어 게시판(BOARD)라는 테이블과 댓글(COMMENT)라는 테이블이 있고, 하나의 게시글에는 여러개의 댓글이 생성될수 있음으로 게시판과 댓글의 관계는 1:N관계이다.

 이런 구조를 자바 코드로 클래스를 만들어 보면 다음과 같다.

class Board{

  private String board;

  private String title;

  private String content;

  private String writer;

  private List<Comment> comments;

  //getter, setter 생략 

}

 소스에서도 볼수 있듯이 Board라는 클래스는 comment의 List형태인 comments라는 프로퍼티를 가지고 있게된다.

 이렇게 1:N의 구조일때 Mybatis에서는 쿼리를 저장하는 xml파일(iBatis에서는 sqlmap으로 불렀으나 mybatis에서는 mapper라고 부름)에 resultMap 엘리먼트로 다음과 같이 설정할 수 있다.

<resultMap id="boradResult" type="net.krespo.mybatis.Board">

  <result property="boardid" column="BOARDID"/>

  <result property="title" column="TITLE"/>

  <result property="content" column="CONTENT"/>

  <collection property="comments" column="BOARDID" 

javaType="java.util.ArrayList" ofType="net.krespo.mybatis.Comment" select="getCommentListById"/>

 </resultMap>

 <select id="getBoardById" resultMap="boardResult">

  SELECT boardid, title, content FROM board WHERE boardid = #{boardid}

 </select>

 <select id="getCommentListById" resultType="net.krespo.mybatis.Comment">

  SELECT commentid, boardid, writer, content FROM comment WHERE boardid = #{boardid}

 </select>

 위와같이 getBoardById라는 쿼리는 게시글을 읽어올때 실행되는 쿼리이다.

 이때 getBoardById는 resultMapboardResult를 지정하고 있고 boardResult의 collection선언을 통해(select="getCommentListByBoardId" 쿼리를 실행할때 parameter는 column으로 선언된 boardid를 가지고) 하위 댓글 리스트를 가져온다. 만약 댓글을 가져올때 자기가 쓴글에 자기가 쓴 댓글을 가져오려면 어떻게 해야할까?

  그럴때는 boardid와 writer를 getCommentListById로 넘겨주어야 한다. 이처럼 여러개의 파라미터를 collection에서 넘길때는


column="{prop1=COLUMN1, prop2=COLUMN2}"


로 쓰면된다. 

<collection property="comments" column="{boardid=BOARDID,writer=WRITER}"

 javaType="java.util.ArrayList" ofType="net.krespo.mybatis.Comment" select="getMyCommentListById"/>

 <select id="getMyCommentListById" parameterType="java.util.Map" resultType="net.krespo.mybatis.Comment"> 

SELECT id, writer, content FROM comment WHERE boardid = #{boardid} AND writer = #{writer}

 </select>

로 쓰면 된다. 이때 select문에서 사용하는 파라미터명과 collection에서 선언한 column의 prop1, prop2명이 반드시 동일해야 한다.(column="{prop1prop2prop1prop2}) 그리고 또 반드시 주의 해야 할점은 파라미터가 한개만 전달할때는(맨 첫번째 예제인 게시글에 댓글을 가져올때) getCommentListById에 parameterType을 지정하지 않아도 됐었다. 그러나 위와 같이 collection으로 파라미터를 여러개 전달해야 할때는 반드시 parameterType="java.util.Map"을 지정해 줘야 한다.



'Computer > Spring Maven MyBatis' 카테고리의 다른 글

Spring Mybatis 기본설정  (0) 2014.09.26
Spring 게시판 페이지  (0) 2014.08.18
Spring GET방식 한글 깨짐  (0) 2014.08.18
Spring 파일 다운로드  (0) 2014.08.18
Spring 파일 업로드  (0) 2014.08.18

+ Recent posts