160616: 65회차
Programming
2016. 6. 16. 17:46
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
[03][spring] 댓글 처리 구현
1. 댓글 처리 구현
- spring_blog Project의 bbs내용보기에서 댓글 구현을 추가합니다.
- 댓글은 답변하고 다르게 새로운 테이블을 생성합니다.
- 댓글입력시 로그인 인증후 댓글 쓰기와 수정, 삭제가 가능합니다.
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
1) 댓글 테이블 설정
>>>> WEB-INF/sql/reply.sql
create table reply(
2) MyBatis 설정
- classpath 경로에 mybatis/reply.xml 추가
3) model 추가
>>>> ReplyDTO.java
>>>> ReplyDAO.java
>>>> ReplyTest.java
>>>> blog.xml (클래스패스상에 존재)
4) BbsController.java 에 추가
@RequestMapping("/bbs/read")
5) Utility.java 에 paging 메소드추가(댓글목록 페이징)
/**
7) views/bbs/read.jsp 수정
>>>> WEB-INF/views/bbs/read.jsp
- 댓글 관련 style 추가
</style>
- javascript 부분에 아래 추가
8) MemberController에서 로그인 처리 내용 변경
@RequestMapping(value="/member/login",method=RequestMethod.POST)
- spring_blog Project의 bbs내용보기에서 댓글 구현을 추가합니다.
- 댓글은 답변하고 다르게 새로운 테이블을 생성합니다.
- 댓글입력시 로그인 인증후 댓글 쓰기와 수정, 삭제가 가능합니다.
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
1) 댓글 테이블 설정
>>>> WEB-INF/sql/reply.sql
create table reply(
rnum number not null,
content varchar(500) not null,
regdate date not null,
id varchar(10) not null,
bbsno number(7) not null,
primary key(rnum),
foreign key(bbsno) references bbs(bbsno)
)
--create(댓글등록)
select * from MEMBER;
select * from bbs;
select nvl(max(rnum),0)+1 from reply;
insert into reply(rnum, content, regdate, id, bbsno)
values((select nvl(max(rnum),0)+1 from reply),
'의견입니다.',sysdate,'user1',1
)
--read(댓글 내용)
select * from reply
--update(댓글 수정)
update reply
set content = '새로운 의견을 올립니다.'
where rnum = 1
--delete(댓글 삭제)
delete from REPLY
where rnum = 1
--list(목록)
select rnum, content, to_char(regdate,'yyyy-mm-dd') regdate, id, bbsno, r
FROM(
select rnum, content, regdate, id, bbsno, rownum r
FROM(
select rnum, content, regdate, id, bbsno
from REPLY
order by rnum DESC
)
)WHERE r >= 1 and r <= 5
--total(목록)
select count(*) from reply
2) MyBatis 설정
- classpath 경로에 mybatis/reply.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="reply">
<insert id="create" parameterType="replyDTO">
<selectKey keyProperty="rnum" resultType="int" order="BEFORE">
select nvl(max(rnum),0)+1 from reply
</selectKey>
insert into reply(rnum, content, regdate, id, bbsno)
values(#{rnum}, #{content}, sysdate, #{id}, #{bbsno})
</insert>
<select id="read" parameterType="int" resultType="replyDTO">
select * from reply
where rnum = #{rnum}
</select>
<update id="update" parameterType="replyDTO">
update reply
set content = #{content}
where rnum = #{rnum}
</update>
<delete id="delete" parameterType="int">
delete from REPLY
where rnum = #{rnum}
</delete>
<delete id="bdelete" parameterType="int">
delete from REPLY
where bbsno = #{bbsno}
</delete>
<select id="list" parameterType="Map" resultType="replyDTO">
select rnum, content, to_char(regdate,'yyyy-mm-dd') regdate, id, bbsno, r
FROM(
select rnum, content, regdate, id, bbsno, rownum r
FROM(
select rnum, content, regdate, id, bbsno
from REPLY
where bbsno = #{bbsno}
order by rnum DESC
)
<![CDATA[
)WHERE r >= #{sno} and r <= #{eno}
]]>
</select>
<select id="total" resultType="int" parameterType="int">
select count(*) from reply
where bbsno=#{bbsno}
</select>
</mapper>
3) model 추가
>>>> ReplyDTO.java
package spring.model.bbs;
public class ReplyDTO {
private int rnum;
private String content;
private String regdate;
private String id;
private int bbsno;
public int getRnum() {
return rnum;
}
public void setRnum(int rnum) {
this.rnum = rnum;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getBbsno() {
return bbsno;
}
public void setBbsno(int bbsno) {
this.bbsno = bbsno;
}
}
>>>> ReplyDAO.java
package spring.model.bbs;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class ReplyDAO {
@Autowired
private SqlSessionTemplate sqlSessionTemplate ;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
this.sqlSessionTemplate = sqlSessionTemplate;
}
public boolean create(ReplyDTO dto){
boolean flag = false;
int cnt = (Integer)sqlSessionTemplate.insert("reply.create", dto);
if(cnt>0) flag = true;
return flag;
}
public ReplyDTO read(int rnum){
return(ReplyDTO)sqlSessionTemplate.selectOne("reply.read", rnum);
}
public boolean update(ReplyDTO dto){
boolean flag = false;
int cnt = sqlSessionTemplate.update("reply.update", dto);
if(cnt>0)flag = true;
return flag;
}
public List<ReplyDTO> list(Map map){
return sqlSessionTemplate.selectList("reply.list", map);
}
public int total(int bbsno){
return (Integer)sqlSessionTemplate.selectOne("reply.total",bbsno);
}
public boolean delete(int rnum){
boolean flag = false;
int cnt = sqlSessionTemplate.delete("reply.delete", rnum);
if(cnt>0) flag = true;
return flag;
}
/** 하나의 글의 여러댓글들 삭제 */
/** 하나의 글의 여러댓글들 삭제 */
public int bdelete(int bbsno) throws Exception{
return sqlSessionTemplate.delete("reply.bdelete", bbsno);
}
}
>>>> ReplyTest.java
package spring.model.bbs;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class ReplyTest {
public static void main(String[] args) {
Resource resource = new ClassPathResource("blog.xml");
BeanFactory beans = new XmlBeanFactory(resource);
ReplyDAO dao = (ReplyDAO)beans.getBean("rdao");
//create(dao);
//read(dao);
//update(dao);
//list(dao);
delete(dao);
//total(dao);
}
private static void total(ReplyDAO dao) {
int bbsno = 8;
int total = dao.total(bbsno);
p("total:"+ total);
}
private static void delete(ReplyDAO dao) {
if(dao.delete(1)){
p("성공");
}else{
p("실패");
}
}
private static void list(ReplyDAO dao) {
int sno = 1;
int eno = 5;
Map map = new HashMap();
map.put("sno", sno);
map.put("eno", eno);
map.put("bbsno", 8);
List<ReplyDTO> list = dao.list(map);
for(int i=0; i<list.size(); i++){
ReplyDTO dto = list.get(i);
p(dto);
p("-------------------");
}
}
private static void update(ReplyDAO dao) {
ReplyDTO dto = dao.read(1);
dto.setContent("댓글 내용을 변경합니다.");
if(dao.update(dto)){
p("성공");
dto = dao.read(1);
p(dto);
}else{
p("실패");
}
}
private static void read(ReplyDAO dao) {
ReplyDTO dto = dao.read(1);
p(dto);
}
private static void p(ReplyDTO dto) {
p("번호:"+dto.getRnum());
p("내용:"+dto.getContent());
p("아이디:"+dto.getId());
p("글번호:"+dto.getBbsno());
p("등록날짜:"+dto.getRegdate());
}
private static void create(ReplyDAO dao) {
ReplyDTO dto = new ReplyDTO();
dto.setId("user6");//member table에서 id가져오기
dto.setContent("댓글 쓰기 예제");
dto.setBbsno(8);//bbs table에서 존재하는 글번호 가져오기
if(dao.create(dto)){
p("성공");
}else{
p("실패");
}
}
private static void p(String string) {
System.out.println(string);
}
}
>>>> blog.xml (클래스패스상에 존재)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 데이터베이스 접속 설정 -->
<bean id="dataSource1"
destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="oracle.jdbc.driver.OracleDriver"
p:url="jdbc:oracle:thin:@localhost:1521:XE"
p:username="soldesk"
p:password="1234"
/>
<!-- MyBatis SQL 실행 클래스 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
<!-- 아래부분은 매핑할 xml파일이 있는 패키지경로를 설정한다. -->
<property name="typeAliasesPackage" value="spring.model" />
<property name="mapperLocations" value="classpath:mybatis/*.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- ReplyDAO 객체 생성 -->
<bean id="rdao"
class="spring.model.bbs.ReplyDAO"
p:sqlSessionTemplate-ref="sqlSession"/>
</beans>
4) BbsController.java 에 추가
package spring.sts.blog;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import spring.model.bbs.BbsDAO_Mybatis;
import spring.model.bbs.BbsDTO;
import spring.model.bbs.ReplyDAO;
import spring.model.bbs.ReplyDTO;
import spring.utility.blog.Paging;
import spring.utility.blog.Utility;
@Controller
public class BbsController {
@Autowired
private BbsDAO_Mybatis mdao ;
@Autowired
private ReplyDAO rdao;
@RequestMapping("/bbs/rdelete")
public String rdelete(int rnum,int bbsno, int nowPage,int nPage, String col, String word,Model model){
int total = rdao.total(bbsno);//댓글전체레코드값을 가져와서
int totalPage = (int)(Math.ceil((double)total/3)); // 전체 페이지
if(rdao.rdelete(rnum)){
if(nPage!=1&&nPage==totalPage&&total%3==1){//마지막페이지의 마지막레코드이면(3은 한페이지당보여줄 레코드 갯수)
nPage=nPage-1; //현재의 페이지값에서 1을 빼자
}
model.addAttribute("bbsno", bbsno);
model.addAttribute("nowPage", nowPage);
model.addAttribute("nPage", nPage);
model.addAttribute("col", col);
model.addAttribute("word", word);
}else{
return "error/error";
}
return "redirect:./read";
}
@RequestMapping("/bbs/rupdate")
public String rupdate(ReplyDTO dto,int nowPage,int nPage, String col, String word,Model model){
if(rdao.update(dto)){
model.addAttribute("bbsno", dto.getBbsno());
model.addAttribute("nowPage", nowPage);
model.addAttribute("nPage", nPage);
model.addAttribute("col", col);
model.addAttribute("word", word);
}else{
return "error/error";
}
return "redirect:./read";
}
@RequestMapping("/bbs/rcreate")
public String rcreate(ReplyDTO dto,int nowPage,String col, String word,Model model){
if(rdao.create(dto)){
model.addAttribute("bbsno", dto.getBbsno());
model.addAttribute("nowPage", nowPage);
model.addAttribute("col", col);
model.addAttribute("word", word);
}else{
return "error/error";
}
return "redirect:./read";
}
public String read(int nowPage, String col, String word,
int bbsno, Model model, HttpServletRequest request){
dao.increaseViewcnt(bbsno);//조회수 증가
BbsDTO dto = dao.read(bbsno);
model.addAttribute("dto", dto);
/* 댓글 관련 시작 */
String url = "read";
int nPage= 1; //시작 페이지 번호는 1부터
if (request.getParameter("nPage") != null) {
nPage= Integer.parseInt(request.getParameter("nPage"));
}
int recordPerPage = 3; // 한페이지당 출력할 레코드 갯수
int sno = ((nPage-1) * recordPerPage) + 1; //
int eno = nPage * recordPerPage;
Map map = new HashMap();
map.put("sno", sno);
map.put("eno", eno);
map.put("bbsno", bbsno);
List<ReplyDTO> list = rdao.list(map);
int total = rdao.total(bbsno);
String paging = Utility.paging(total, nPage, recordPerPage, url,bbsno,nowPage, col,word);
model.addAttribute("rlist",list);
model.addAttribute("paging",paging);
model.addAttribute("nPage",nPage);
/* 댓글 관련 끝 */
return "/bbs/read";
}
5) Utility.java 에 paging 메소드추가(댓글목록 페이징)
/**
* 댓글용 페이징 메소드
* @param totalRecord 전체 레코드수
* @param nowPage 현재 페이지
* @param recordPerPage 페이지당 레코드 수
* @param url 이동할 페이지
* @param bbsno 상위글번호
* @return 페이징 생성 문자열
*/
public static String paging(int totalRecord, int nPage, int recordPerPage,String url,int bbsno,int nowPage, String col, String word){
int pagePerBlock = 10; // 블럭당 페이지 수
int totalPage = (int)(Math.ceil((double)totalRecord/recordPerPage)); // 전체 페이지
int totalGrp = (int)(Math.ceil((double)totalPage/pagePerBlock));// 전체 그룹
int nowGrp = (int)(Math.ceil((double)nPage/pagePerBlock)); // 현재 그룹
int startPage = ((nowGrp - 1) * pagePerBlock) + 1; // 특정 그룹의 페이지 목록 시작
int endPage = (nowGrp * pagePerBlock); // 특정 그룹의 페이지 목록 종료
StringBuffer str = new StringBuffer();
str.append("<style type='text/css'>");
str.append(" #paging {text-align: center; margin-top: 5px; font-size: 1em;}");
str.append(" #paging A:link {text-decoration:none; color:black; font-size: 1em;}");
str.append(" #paging A:hover{text-decoration:none; background-color: #CCCCCC; color:black; font-size: 1em;}");
str.append(" #paging A:visited {text-decoration:none;color:black; font-size: 1em;}");
str.append(" .span_box_1{");
str.append(" text-align: center;");
str.append(" font-size: 1em;");
str.append(" border: 1px;");
str.append(" border-style: solid;");
str.append(" border-color: #cccccc;");
str.append(" padding:1px 6px 1px 6px; /*위, 오른쪽, 아래, 왼쪽*/");
str.append(" margin:1px 2px 1px 2px; /*위, 오른쪽, 아래, 왼쪽*/");
str.append(" }");
str.append(" .span_box_2{");
str.append(" text-align: center;");
str.append(" background-color: #668db4;");
str.append(" color: #FFFFFF;");
str.append(" font-size: 1em;");
str.append(" border: 1px;");
str.append(" border-style: solid;");
str.append(" border-color: #cccccc;");
str.append(" padding:1px 6px 1px 6px; /*위, 오른쪽, 아래, 왼쪽*/");
str.append(" margin:1px 2px 1px 2px; /*위, 오른쪽, 아래, 왼쪽*/");
str.append(" }");
str.append("</style>");
str.append("<DIV id='paging'>");
// str.append("현재 페이지: " + nowPage + " / " + totalPage + " ");
int _nowPage = (nowGrp-1) * pagePerBlock; // 10개 이전 페이지로 이동
if (nowGrp >= 2){
str.append("<span class='span_box_1'><A href='./"+url+"?nowPage="+nowPage+"&col="+col+"&word="+word+"&bbsno="+bbsno+"&nPage="+_nowPage+"'>이전</A></span>");
}
for(int i=startPage; i<=endPage; i++){
if (i > totalPage){
break;
}
if (nPage == i){
str.append("<span class='span_box_2'>"+i+"</span>");
}else{
str.append("<span class='span_box_1'><A href='./"+url+"?nowPage="+nowPage+"&col="+col+"&word="+word+"&bbsno="+bbsno+"&nPage="+i+"'>"+i+"</A></span>");
}
}
_nowPage = (nowGrp * pagePerBlock)+1; // 10개 다음 페이지로 이동
if (nowGrp < totalGrp){
str.append("<span class='span_box_1'><A href='./"+url+"?nowPage="+nowPage+"&col="+col+"&word="+word+"&bbsno="+bbsno+"&nPage="+_nowPage+"'>다음</A></span>");
}
str.append("</DIV>");
return str.toString();
}
7) views/bbs/read.jsp 수정
>>>> WEB-INF/views/bbs/read.jsp
- 댓글 관련 style 추가
<style type="text/css">
.rcreate{
font-size: 20px;
font-weight:bold;
text-align: left;
border-style: solid; /* 실선 */
border-width: 1px; /* 선 두께 */
border-color: #AAAAAA; /* 선 색깔 */
color: #000000; /* 글자 색깔 */
width: 35%; /* 화면의 30% */
padding: 10px; /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */
/* padding: 50px 10px; 50px: 위 아래, 10px: 좌우 */
/* padding-top: 30px; 상단만 간격을 30px 지정 */
margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/
}
.rlist{
line-height:1.2em;
font-size: 15px;
font-weight:bold;
text-align: left;
border-style: solid; /* 실선 */
border-width: 1px; /* 선 두께 */
border-color: #AAAAAA; /* 선 색깔 */
color: #000000; /* 글자 색깔 */
width: 35%; /* 화면의 30% */
padding: 10px; /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */
/* padding: 50px 10px; 50px: 위 아래, 10px: 좌우 */
/* padding-top: 30px; 상단만 간격을 30px 지정 */
margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/
}
hr{
text-align: center;
border-style: solid; /* 실선 */
border-width: 1px; /* 선 두께 */
border-color: #AAAAAA; /* 선 색깔 */
width: 45%; /* 화면의 30% */
}
- javascript 부분에 아래 추가
function rcheck(tarea){
if('${sessionScope.id}'==""){
if(confirm("로그인후 댓글를 쓰세요")){
var url = "../member/login";
url = url + "?bbsno=${dto.bbsno}";
url = url + "&nowPage=${param.nowPage}";
url = url + "&nPage=${nPage}";
url = url + "&col=${param.col}";
url = url + "&word=${param.word}";
url = url + "&flag=../bbs/read";
location.href=url;
}else{
tarea.blur();
}
}
}
function input(f){
if('${sessionScope.id}'==""){
if(confirm("로그인후 댓글를 쓰세요")){
var url = "../member/login";
url = url + "?bbsno=${dto.bbsno}";
url = url + "&nowPage=${param.nowPage}";
url = url + "&nPage=${nPage}";
url = url + "&col=${param.col}";
url = url + "&word=${param.word}";
url = url + "&flag=../bbs/read";
location.href=url;
return false;
}else{
return false;
}
}else if(f.content.value==""){
alert("댓글 내용을 입력하세요.");
f.content.focus();
return false;
}
}
function rupdate(rnum,rcontent){
var f = document.rform;
f.content.value = rcontent;
f.rnum.value = rnum;
f.rsubmit.value="수정";
f.action="./rupdate"
}
function rdelete(rnum){
if(confirm("정말삭제 하겠습니까?")){
var url = "./rdelete";
url = url + "?rnum="+rnum;
url = url + "&bbsno=${dto.bbsno}";
url = url + "&nowPage=${param.nowPage}";
url = url + "&nPage=${nPage}";
url = url + "&col=${param.col}";
url = url + "&word=${param.word}";
location.href=url;
}
}
- body 태그 끝나기 직전에 댓글 관련 태그 추가
- body 태그 끝나기 직전에 댓글 관련 태그 추가
<hr>
<c:forEach var="rdto" items="${rlist}">
<div class="rlist">
${rdto.id}<br/>
<p>${rdto.content}</p>
${rdto.regdate}
<c:if test="${sessionScope.id==rdto.id }">
<span style="float: right;">
<a href="javascript:rupdate('${rdto.rnum}','${rdto.content }')">
수정</a>|<a href="javascript:rdelete('${rdto.rnum}')">삭제</a>
</span>
</c:if>
</div>
</c:forEach>
<div class="rcreate">
<form name="rform" action="./rcreate" method="post" onsubmit="return input(this)">
<textarea rows="3" cols="28" name="content" onclick="rcheck(this)"></textarea>
<input type="submit" name="rsubmit" value="등록">
<input type="hidden" name="bbsno" value="${dto.bbsno}">
<input type="hidden" name="id" value="${sessionScope.id}">
<input type="hidden" name="nowPage" value="${param.nowPage}">
<input type="hidden" name="nPage" value="${nPage}">
<input type="hidden" name="col" value="${param.col}">
<input type="hidden" name="word" value="${param.word}">
<input type="hidden" name="rnum" value="0">
</form>
</div>
<div class="bottom">
${paging}
</div>
8) MemberController에서 로그인 처리 내용 변경
@RequestMapping(value="/member/login",method=RequestMethod.POST)
public String login(String id, String passwd, String c_id,
int bbsno,
int nowPage,
int nPage,
String col,
String word,
String flag,
HttpServletResponse response, HttpSession session, Model model){
int cnt = dao.loginCheck(id, passwd);
String grade = null;
if(cnt==1){
grade = dao.getGrade(id);
//쿠키에 id저장
if(c_id!=null){
Cookie cookie = new Cookie("c_id","Y");
cookie.setMaxAge(120);
response.addCookie(cookie);
cookie = new Cookie("c_id_val",id);
cookie.setMaxAge(120);
response.addCookie(cookie);
}else{
Cookie cookie = new Cookie("c_id","");
cookie.setMaxAge(0);
response.addCookie(cookie);
cookie = new Cookie("c_id_val","");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
session.setAttribute("id", id);
session.setAttribute("grade", grade);
}
String url = "./error/passwdError";
if(cnt==1){
url = "redirect:/";
if(flag!=""){
model.addAttribute("bbsno", bbsno);
model.addAttribute("nowPage", nowPage);
model.addAttribute("nPage", nPage);
model.addAttribute("col", col);
model.addAttribute("word", word);
url = "redirect:"+flag;
}
}
return url;
}
@RequestMapping(value="/member/login",method=RequestMethod.GET)
public String login(HttpServletRequest request,
@RequestParam(value="bbsno",defaultValue="0")int bbsno,
@RequestParam(value="nowPage",defaultValue="0")int nowPage,
@RequestParam(value="nPage",defaultValue="0")int nPage
){
String c_id="";//id저장여부
String c_id_val="";//id저장변수
Cookie[] cookies = request.getCookies();
Cookie cookie = null;
if(cookies!=null){
for(int i=0; i<cookies.length; i++){
cookie = cookies[i];
if(cookie.getName().equals("c_id")){
c_id = cookie.getValue();
}else if(cookie.getName().equals("c_id_val")){
c_id_val = cookie.getValue();
}
}
}
request.setAttribute("c_id", c_id);
request.setAttribute("c_id_val", c_id_val);
request.setAttribute("nowPage", nowPage);
request.setAttribute("nPage", nPage);
request.setAttribute("bbsno", bbsno);
return "/login";
}
9) views: member/loginForm.jsp 내용 추가
9) views: member/loginForm.jsp 내용 추가
<DIV class='bottom'>
<input type='submit' value='로그인'>
<input type='button' value='회원가입' onclick="location.href='./agree'">
</DIV>
<input type="hidden" name="flag" value="${param.flag}">
<input type="hidden" name="bbsno" value="${bbsno}">
<input type="hidden" name="nowPage" value="${nowPage}">
<input type="hidden" name="nPage" value="${nPage}">
<input type="hidden" name="col" value="${param.col}">
<input type="hidden" name="word" value="${param.word}">
5. 수업
진도:
hw:
6. 할것
짐ㅁ싸야지!
'Programming' 카테고리의 다른 글
160620: 67회차 (0) | 2016.06.20 |
---|---|
160617: 66회차 (0) | 2016.06.17 |
160615: 64회차 (0) | 2016.06.15 |
160614: 63회차 (0) | 2016.06.14 |
160613: 62회차 (0) | 2016.06.13 |