BbsDAO.java
public BbsDTO read(int bbsno) {
BbsDTO dto=null;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" select bbsno, wname, subject, content, readcnt, regdt, ip, grpno, indent, ansnum ");
sql.append(" from tb_bbs ");
sql.append(" where bbsno=? ");
pstmt=con.prepareStatement(sql.toString());
pstmt.setInt(1, bbsno);
rs=pstmt.executeQuery();
if(rs.next()){
dto=new BbsDTO();
dto.setBbsno(rs.getInt("bbsno"));;
dto.setWname(rs.getString("wname"));
dto.setSubject(rs.getString("subject"));
dto.setContent(rs.getString("content"));
dto.setReadcnt(rs.getInt("readcnt"));
dto.setRegdt(rs.getString("regdt"));
dto.setIp(rs.getString("ip"));
dto.setGrpno(rs.getInt("grpno"));
dto.setIndent(rs.getInt("indent"));
dto.setAnsnum(rs.getInt("ansnum"));
}
}catch (Exception e) {
System.out.println("상세보기 실패"+e);
}finally {
DBClose.close(con,pstmt,rs);
}
return dto;
}
public void increment(int bbsno) {
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" update tb_bbs ");
sql.append(" set readcnt=readcnt+1 ");
sql.append(" where bbsno=? ");
pstmt=con.prepareStatement(sql.toString());
pstmt.setInt(1, bbsno);
rs=pstmt.executeQuery();
}catch (Exception e) {
System.out.println("조회수 증가 실패"+e);
}finally {
DBClose.close(con,pstmt);
}
}
public int delete(BbsDTO dto) {
int cnt=0;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" delete from tb_bbs ");
sql.append(" where bbsno=? and passwd=? ");
pstmt=con.prepareStatement(sql.toString());
pstmt.setInt(1, dto.getBbsno());
pstmt.setString(2,dto.getPasswd() );
cnt=pstmt.executeUpdate();
}catch (Exception e) {
System.out.println("삭제 실패"+e);
}finally {
DBClose.close(con,pstmt);
}
return cnt;
}
public int updatepro(BbsDTO dto) {
int cnt=0;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" update tb_bbs ");
sql.append(" set wname=?,subject=?,content=?,ip=? ");
sql.append(" where bbsno=? and passwd=? ");
pstmt= con.prepareStatement(sql.toString());
pstmt.setString(1,dto.getWname());
pstmt.setString(2, dto.getSubject());
pstmt.setString(3, dto.getContent());
pstmt.setString(4, dto.getIp());
pstmt.setInt(5, dto.getBbsno());
pstmt.setString(6, dto.getPasswd());
cnt=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("업데이트 실패"+e);
}finally {
DBClose.close(con,pstmt);
}
return cnt;
}
utility.java
사용하는 함수를 정의해놓는다.
package net.utility;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import javax.swing.ImageIcon;
public class Utility {
// 서비스시에는 도메인으로 변경됨.
private static final String root = "/myweb";
public static synchronized String getRoot() {
return root;
}
/**
* 2048 -> 2가 리턴됨
*
* @param filesize
* @return
*/
public static synchronized long toUnit(long filesize) {
long size = 0;
if (filesize > 1024) {
size = filesize / 1024; // KB
} else {
size = filesize / (1024 * 1024); // MB
}
return size;
}
/**
* 2048 -> 2 KB가 리턴됨
*
* @param filesize
* @return
*/
public static synchronized String toUnitStr(long filesize) {
String size = "";
if (filesize > 1024) {
size = filesize / 1024 + " KB"; // KB
} else {
size = filesize / (1024 * 1024) + " MB"; // MB
}
return size;
}
/**
* 오늘 날짜를 문자열로 리턴합니다.
*
* @return
*/
public static synchronized String getCalendarDay() {
String str = "";
Calendar cal = Calendar.getInstance();
str = "" + cal.get(Calendar.DATE); // 날짜
return str;
}
/**
* 2010-12-14 형식의 날짜를 리턴합니다.
*
* @return 2008-01-30 형식의 문자열 리턴
*/
public static synchronized String getDate() {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
String date = sd.format(new Date());
// System.out.println(date);
return date;
}
/**
* 20101214 형식의 날짜를 리턴합니다.
*
* @return 20101214 형식의 문자열 리턴
*/
public static synchronized String getDate2() {
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
String date = sd.format(new Date());
// System.out.println(date);
return date;
}
/**
* 20101214 형식의 날짜를 리턴합니다.
*
* @param _date
* @return
*/
public static synchronized String getDate3(Date _date) {
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
String date = sd.format(_date);
// System.out.println(date);
return date;
}
/**
* 2010년 12월 14일 형식의 날짜를 리턴합니다.
*
* @return
*/
public static synchronized String getDate4() {
SimpleDateFormat sd = new SimpleDateFormat("yyyy년 MM월 dd일");
String date = sd.format(new Date());
// System.out.println(date);
return date;
}
/**
* 20101214일 형식의 날짜를 리턴합니다.
*
* @param _date
* @return
*/
public static synchronized String getDate5(Date _date) {
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
String date = sd.format(_date);
// System.out.println(date);
return date;
}
/**
* 2010-12-14 형식의 날짜를 리턴합니다.
*
* @return 2008-01-30 형식의 문자열 리턴
*/
public static synchronized String getDate6(int year, int month, int day) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
new Date();
String date = sd.format(new Date(year - 1900, month, day));
// System.out.println(date);
return date;
}
/**
* 내용중에 특수문자 표현을 위해 HTML 특수문자로 변환합니다.
* 예) 테이블 태그
* <TABLE> -> <TABLE>
*/
public static synchronized String convertChar(String str) {
str = str.replaceAll(" ", " ");
str = str.replaceAll("<", "<");
str = str.replaceAll(">", ">");
str = str.replaceAll("'", "'"); // '
str = str.replaceAll("\"", """); // "
str = str.replaceAll("\r\n", "<BR>"); // 라인 변경
return str;
}
public static synchronized String convertCharTA(String str) {
str = str.replaceAll("<", "<");
str = str.replaceAll(">", ">");
str = str.replaceAll("'", "'"); // '
str = str.replaceAll("\"", """); // "
return str;
}
public static synchronized String getString(HttpServletRequest request, String variable) {
String value = "";
variable = request.getParameter(variable);
if (variable != null) {
variable = variable.trim();
if (variable.length() > 0) {
value = variable;
}
} else {
value = variable;
}
return value;
}
public static synchronized int getInt(HttpServletRequest request, String variable) {
int value = 0;
variable = request.getParameter(variable);
if (variable != null) {
variable = variable.trim();
if (variable.length() > 0) {
value = Integer.parseInt(variable);
}
} else {
value = 0;
}
return value;
}
// 줄 바꾸기
public static synchronized String getConvertCharTextArea(String str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '&') {
str = str.substring(0, i) + "&" + str.substring(i + 1, str.length());
}
}
return str;
}
public static synchronized String convertToDBMSforTextArea(String str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '<') {
str = str.substring(0, i) + "<" + str.substring(i + 1, str.length());
} else if (str.charAt(i) == '>') {
str = str.substring(0, i) + ">" + str.substring(i + 1, str.length());
}
}
return str;
}
public static synchronized String convertToHTMLforTextArea(String str) {
str.replaceAll("<", "<");
str.replaceAll(">", ">");
return str;
}
/**
* 로그인한 관리자 인지 검사
*
* @param session
* @return
*/
public static synchronized boolean isAdmin(HttpServletRequest request) {
boolean sw = false;
HttpSession session = request.getSession();
String s_id = Utility.checkNull((String) session.getAttribute("s_id"));
// System.out.println("현재 로그인 관리자 s_id: " + s_id);
if (s_id.equals("") == true) { // 로그인하지 않은 경우
sw = false;
} else {
sw = true;
}
return sw;
}
/**
* 로그인한 사용자인지 검사
*
* @param request
* @return
*/
public static synchronized boolean isMember(HttpServletRequest request) {
boolean sw = false;
HttpSession session = request.getSession();
String s_member_id = Utility.checkNull((String) session
.getAttribute("s_member_id"));
// System.out.println("현재 로그인 사용자 s_member_id: " + s_member_id);
if (s_member_id.equals("") == true) { // 로그인하지 않은 경우
sw = false;
} else {
sw = true;
}
return sw;
}
/**
* 로그인한 사용자 인지 검사
*
* @param session
* @return
*/
public static synchronized boolean isUser(HttpServletRequest request) {
boolean sw = false;
HttpSession session = request.getSession();
String s_member_id = Utility.checkNull((String) session
.getAttribute("s_member_id"));
if (s_member_id.length() > 1) { // 로그인하지 않은 경우
sw = true;
} else {
sw = false;
}
return sw;
}
public static synchronized boolean checkImageFile(String filename) {
boolean sw = false;
if (filename != null) {
sw = filename.endsWith(".jpg") || filename.endsWith(".jpeg")
|| filename.endsWith(".gif") || filename.endsWith(".png")
|| filename.endsWith(".bmp");
}
return sw;
}
public static synchronized String getBrowser(HttpServletRequest request) {
String header = request.getHeader("User-Agent");
if (header.indexOf("MSIE") > -1) {
return "MSIE";
} else if (header.indexOf("Chrome") > -1) {
return "Chrome";
} else if (header.indexOf("Opera") > -1) {
return "Opera";
}
return "Firefox";
}
public static synchronized String getDisposition(String filename, String browser) {
String dispositionPrefix = "attachment;filename=";
String encodedFilename = null;
try {
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll(
"\\+", "%20");
} else if (browser.equals("Firefox")) {
encodedFilename =
"\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Opera")) {
encodedFilename =
"\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";
} else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename.length(); i++) {
char c = filename.charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
} else {
System.out.println("Not supported browser");
}
} catch (Exception e) {
}
return dispositionPrefix + encodedFilename;
}
/**
* 임의의 정수를 리턴합니다.
*
* @param range
* 정수범위 0 ~ 범위-1
* @return 난수 리턴
*/
public static synchronized int random(int range) {
// 0 ~ range-1까지 산출됨.
int rnd = 0;
Random random = new Random();
rnd = random.nextInt(range);
return rnd;
}
public static synchronized Date getDate(String date) {
Date currentTime = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
currentTime = sd.parse(date);
} catch (Exception e) {
}
// System.out.println(date);
return currentTime;
}
public static synchronized String progress(String enddate) {
java.util.Date nowtime = new java.util.Date();
java.util.Date endtime = getDate(enddate);
// System.out.println("nowtime: " + nowtime.toLocaleString());
// System.out.println("endtime: " + nowtime.toLocaleString());
String progress = null;
if (nowtime.after(endtime) == true) {
progress = "종료";
} else {
progress = "진행";
}
return progress;
}
/**
* 천단위마다 컴마를 출력합니다.
*
* @param price
* 금액
* @return 컴마가 포함된 문자열
*/
public static synchronized String comma(int price) {
DecimalFormat comma = new DecimalFormat("###,##0");
String cs = comma.format(price);
return cs;
}
public static synchronized String comma(long price) {
DecimalFormat comma = new DecimalFormat("###,##0");
String cs = comma.format(price);
return cs;
}
/**
* null 문자를 공백 문자로 변경합니다.
*
* @param str
* 검사할 문자열
* @return null 값을 가지고 있는 객체는 공백 문자열로 리턴됨
*/
public static synchronized String checkNull(String str) {
if (str == null) {
return ""; // null 이면 빈공백으로 리턴
} else {
return str; // 원래의 문자열 리턴
}
}
/**
* request 객체에서 문자열을 추출합니다.
*
* @param request
* @param str
* 추출할 변수
* @return 변환된 문자열
*/
public static synchronized String checkNull(HttpServletRequest request, String str) {
String rstr = "";
if (request.getParameter(str) != null) {
rstr = request.getParameter(str);
} else {
rstr = "";
}
return rstr;
}
/**
* 문자열이 Object 타입으로 전송된 것을 null 처리
*
* @param str
* @return
*/
public static String checkNull(Object str) {
if ((String) str == null) {
return "";
} else {
return (String) str;
}
}
/**
* FileUpload 1.2 한글 변환
*
* @param str
* @return
*/
public static synchronized String getEncodFileUpload12(String str) {
String corean = null;
try {
corean = new String(str.getBytes("ISO-8859-1"), "UTF-8");
// corean= new String(str.getBytes("ISO-8859-1"), "KSC5601");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* MVC, Tomcat 7.0기반 JSP 페이지 한글 변환
*
* @param str
* @return
*/
public static synchronized String getEncodeMVC(String str) {
String corean = null;
try {
corean = new String(str.getBytes("ISO-8859-1"), "UTF-8");
// corean= new String(str.getBytes("ISO-8859-1"), "KSC5601");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* fileupload 1.2.2 한글 처리
*
* @param ko
* @return
*/
public static synchronized String fileupload122Enc(String ko) {
String corean = null;
try {
// corean= new String(ko.getBytes("8859_1"), "euc-kr");
corean = new String(ko.getBytes("ISO-8859-1"), "utf-8");
// corean= new String(ko.getBytes("8859_1"), "iso-8859-1");
// corean= new String(ko.getBytes("utf-8"), "8859_1");
// corean= new String(ko.getBytes("8859_1"), "KSC5601");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* fileupload 1.2.2 한글 처리
*
* @param ko
* @return
*/
public static synchronized String fileupload122DownEnc(String ko) {
// charsetTest(ko);
String corean = null;
try {
// corean= new String(ko.getBytes("iso-8859-1"), "euc-kr");
// corean= new String(ko.getBytes("iso-8859-1"), "utf-8");
// corean= new String(ko.getBytes("8859_1"), "iso-8859-1");
// corean= new String(ko.getBytes("utf-8"), "8859_1");
// corean= new String(ko.getBytes("iso-8859-1"), "KSC5601");
corean = new String(ko.getBytes("KSC5601"), "EUC-KR");
} catch (Exception e) {
return corean;
}
return corean;
}
public static synchronized String getType(String fileUrl) {
String type = "";
fileUrl = "file:" + fileUrl;
try {
URL u = new URL(fileUrl);
URLConnection uc = u.openConnection();
type = uc.getContentType();
} catch (Exception e) {
System.out.println(e.toString());
}
return type;
}
/**
* 주어진 문자셋의 문자코드를 변환합니다.
*
* @param ko
* @return
*/
public static synchronized String ko(String ko) {
String str = null;
try {
// corean= new String(ko.getBytes("8859_1"), "euc-kr");
// corean= new String(ko.getBytes("8859_1"), "utf-8");
// corean= new String(ko.getBytes("8859_1"), "iso-8859-1");
// corean= new String(ko.getBytes("8859_1"), "utf-8");
str = new String(ko.getBytes("8859_1"), "KSC5601");
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
str = str.substring(0, i) + "%20"
+ str.substring(i + 1, str.length());
i = i + 3;
}
}
} catch (Exception e) {
}
return str;
}
/**
* 내용중에 특수문자 표현을 위해 HTML 특수문자로 변환합니다.
*/
public static synchronized String getConvertBR(String str) {
return str.replace("\n", "<BR>");
}
/**
* 파일 Download시 한글 파일 인코딩
*
* @param str
* @return
*/
public static synchronized String getEncod(String str) {
try {
// resin UTF-8 로 지정
// str = java.net.URLEncoder.encode(str, "EUC-KR");
// str = java.net.URLEncoder.encode(str, "UTF-8");
str = java.net.URLEncoder.encode(str, "KSC5601");
} catch (Exception e) {
}
// System.out.println(str);
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '+') {
str = str.substring(0, i) + "%20" + str.substring(i + 1, str.length());
i = i + 3;
}
}
// System.out.println("최종변환 형태: "+str);
return str;
}
/**
* Struts2 GET방식 한글 문자셋 인코딩
*
* @param str
* @return
*/
public static synchronized String getEncodGet(String str) {
try {
str = java.net.URLEncoder.encode(str, "EUC-KR");
// str = java.net.URLEncoder.encode(str, "UTF-8");
// str = java.net.URLEncoder.encode(str, "KSC5601");
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '+') {
str = str.substring(0, i) + "%20"
+ str.substring(i + 1, str.length());
i = i + 3;
}
}
} catch (Exception e) {
}
return str;
}
/**
* 스트럿츠 자료실 한글 출력 메소드
*
* @param str
* @return
*/
public static synchronized String encodStruts2(String str) {
try {
// str = java.net.URLEncoder.encode(str, "EUC-KR");
// str = java.net.URLEncoder.encode(str, "UTF-8");
str = java.net.URLEncoder.encode(str, "KSC5601");
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '+') {
str = str.substring(0, i) + "%20"
+ str.substring(i + 1, str.length());
i = i + 3;
}
}
} catch (Exception e) {
}
return str;
}
/**
* FCKEditor 2.6.8 한글 변환
*
* @param str
* @return
*/
public static synchronized String encodFCK268(String str) {
String corean = null;
try {
corean = new String(str.getBytes("ISO-8859-1"), "UTF-8");
// corean= new String(str.getBytes("ISO-8859-1"), "KSC5601");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* 파일을 삭제합니다.
*
* @param folder
* 파일이 저장된 폴더
* @param filename
* 삭제할 파일명
* @return true-삭제 성공, false-삭제 실패
*/
public static synchronized boolean deleteFile(String folder, String filename) {
boolean ret = false;
try {
if (filename != null) { // 기존에 파일이 존재하는 경우 삭제
File file = new File(folder + "/" + filename);
// 파일이 존재하는지 확인 후 삭제
if (file.exists()) {
ret = file.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
/**
* application이름을 입력받아 절대 경로를 산출합니다. 예) getRealPath(request, "WEB-INF/config")
*
* @param request
* @param dir
* application 이름
* @return 절대 경로 리턴
* @throws IOException
*/
/*
public static synchronized String getRealPath(HttpServletRequest request, String dir) {
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
String path = "";
try{
path = request.getRealPath(dir) + "/";
System.out.println("Upload path: " + path);
}catch(Exception e){
System.out.println(e.toString());
}
return path;
}
*/
/**
* 한글 변환 코드를 찾는 기능을 지원
*
* @param s
*/
public static synchronized void charsetTest(String s) {
try {
String[] charset = { "EUC-KR", "KSC5601", "ISO-8859-1", "8859_1",
"ASCII", "UTF-8" };
for (int i = 0; i < charset.length; i++) {
for (int j = 0; j < charset.length; j++) {
if (i == j)
continue;
System.out.print(charset[i] + " -> " + charset[j] + " : ");
System.out.println(new String(s.getBytes(charset[i]), charset[j]));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* null 문자를 숫자 0으로 변경합니다.
*
* @param request
* request 객체
* @param str
* 검사할 문자열
* @return 숫자를 리턴
*/
public static synchronized int checkInt(HttpServletRequest request, String str) {
int su = 0;
if (request.getParameter(str) != null) {
su = Integer.parseInt(request.getParameter(str));
}
return su;
}
public static int checkInt(String str) {
int su = 0;
if (str != null) {
su = Integer.parseInt(str);
}
return su;
}
/**
* null 문자를 숫자 0으로 변경합니다.
*
* @param request
* request 객체
* @param str
* 검사할 문자열
* @return 숫자를 리턴
*/
public static synchronized int checkAttrInt(HttpServletRequest request, String str) {
int su = 0;
if (request.getAttribute(str) != null) {
Integer itg = (Integer) (request.getAttribute(str));
su = itg.intValue();
}
return su;
}
/**
* Ajax 한글 변환
*
* @param ko
* @return
*/
public static synchronized String koAjax(String ko) {
String corean = null;
try {
// corean= new String(ko.getBytes("ISO-8859-1"), "UTF-8");
corean = new String(ko.getBytes("KSC5601"), "EUC-KR");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* 자바스크립트 특수문자, 줄바꿈 문자 변환
*
* @param str
* @return
*/
public static synchronized String toJS(String str) {
if (str != null) {
return str.replace("\\", "\\\\").replace("\'", "\\\'")
.replace("\"", "\\\"").replace("\r\n", "\\n").replace("\n", "\\n");
} else {
return "";
}
}
/**
* Ajax 한글 변환
*
* @param ko
* @return
*/
public static synchronized String koAndroid(String ko) {
String corean = null;
try {
// corean= new String(ko.getBytes("UTF-8"), "EUC-KR");
// corean= new String(ko.getBytes("ISO-8859-1"), "UTF-8");
// corean= new String(ko.getBytes("KSC5601"), "EUC-KR");
corean = new String(ko.getBytes("8859_1"), "UTF-8");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* 문자열 경로를 받아 모든 파일 목록을 리턴
*
* @param dir
* @return
*/
public static synchronized String[] fileNameList(String dir) {
File sdDir = null;
String[] str = null;
try {
// Check SD Card mount.
sdDir = new File("."); // /sdcard
// 존재/쓰기 여부 확인
if (sdDir.exists() && sdDir.canWrite()) {
File _dir = new File(dir);
if (_dir.exists() && _dir.canRead()) {
str = _dir.list();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 파일 객체를 받아 파일 목록을 리턴
*
* @param dir
* @return
*/
public static synchronized String[] fileNameList(File dir) {
String[] str = null;
try {
str = dir.list();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 파일 목록에서 확장자를 제거함
*
* @param str
* @return
*/
public static synchronized ArrayList convertFilenameNotExtend(String[] str) {
ArrayList retVal = new ArrayList();
;
for (int i = 0; i < str.length; i++) {
int point = str[i].indexOf(".");
retVal.add(str[i].substring(0, point));
}
return retVal;
}
/**
* 파일에서 확장자를 제거함. 예) data.txt --> data
*
* @param str
* @return
*/
public static synchronized String convertFilenameNotExtend(String str) {
String noExt = "";
int point = str.indexOf(".");
noExt = str.substring(0, point);
return noExt;
}
// 폴더를 생성
public static synchronized void makeFolder(String _dir) {
File sdDir = null; // 폴더명
File dir = null;
sdDir = new File(".");
dir = new File(sdDir.toString() + "/" + _dir);
if (sdDir.exists() && sdDir.canWrite()) {
if (dir.exists() == false) {
dir.mkdir();
}
}
}
public static synchronized String onlyFilename(String _str) {
// /sdcard/smartalbum/20101201_090101.jpg
int ps = _str.lastIndexOf("/");
// System.out.println("ps: " + ps);
String str = _str.substring(ps + 1); // 20101201_090101.jpg
int pd = str.lastIndexOf(".");
System.out.println("pd: " + pd);
str = str.substring(0, pd);
return str;
}
public static synchronized String convertFilename(String str) {
// 20101201_090101
// 012345678901234
// 2010년 12월 1일 09시 01분 01초
String year = str.substring(0, 4);
String month = str.substring(4, 6);
String day = str.substring(6, 8);
String hour = str.substring(9, 11);
String minute = str.substring(11, 13);
String second = str.substring(13);
String _str = year + "년 " + month + "월 " + day + "일 " + hour + "시 "
+ minute + "분 " + second + "초 ";
return _str;
}
/**
* 파일 삭제
* @param fname
* @return
*/
public static synchronized boolean deleteFile(String fname) {
File file = new File(fname);
boolean ret = false;
if (file.exists()){
ret = file.delete();
}
return ret;
}
/**
* 바이트배열로 되어 있는 문자열을 받아 원래의 문자열로 변환
*
* @param str
* @return
*/
public static synchronized String byteToString(String str) {
String retVal = "";
try {
StringTokenizer st = new StringTokenizer(str, ",");
byte[] _str = new byte[st.countTokens()];
int i = -1;
while (st.hasMoreTokens()) {
i++;
_str[i] = Byte.parseByte(st.nextToken());
}
retVal = new String(_str, 0, _str.length, "UTF-8");
} catch (Exception e) {
}
return retVal;
}
/**
* 문자열을 바이트 배열 문자열로 변환
*
* @param str
* @return
*/
public static synchronized String stringToByte(String str) {
String deli = ","; // 구분자
String retVal = "";
try {
byte[] bstr = str.getBytes("UTF-8");
for (int i = 0; i < bstr.length; i++) {
retVal = retVal + deli + bstr[i];
}
} catch (Exception e) {
}
return retVal;
}
/**
* 현재 시간을 1970년 1월 1일부터 수치형식으로 리턴
*
* @return
*/
public static synchronized long getTimeNumber() {
long time = System.currentTimeMillis();
return time;
}
/**
* 주어진 시간을 1970년 1월 1일부터 수치형식으로 리턴
*
* @return
*/
public static synchronized long getTimeNumber(String date) {
Date _date = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
_date = sd.parse(date);
} catch (Exception e) {
}
// System.out.println(date);
long time = _date.getTime();
return time;
}
/**
* 주어진 날짜와 기간을 계산하여 새글 여부 판단 현재 날짜가 2013-02-04 글을 등록날짜 2013-02-02
* getTimeNew("2013-02-04", 2) : 새글 처리, true getTimeNew("2013-02-04", 3) : 새글
* 처리, false
*
* @param date
* 문자열로 된 날짜
* @param period
* 새글로 지정할 기간
* @return
*/
public static synchronized boolean getTimeNew(String date, int period) {
boolean sw = false;
Date _date = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
_date = sd.parse(date);
} catch (Exception e) {
}
// System.out.println(date);
// 1970년1월1일부터 시간을 1000을 1초로하여 계산하여 리턴
long time = _date.getTime(); // 글을 작성한 시간
// 현재 시간을 1970년 1월 1일부터 수치형식으로 리턴
long currentTime = System.currentTimeMillis();
// 현재 시간과 글 등록시간의 차이를 계산
long diff = currentTime - time;
// 1일 86,400,000: 1초를 1000으로 하루를 계산
// 0.0001 --> 1: 오늘 날짜
// 1.00002 --> 2: 어제 날짜
int day = (int) Math.ceil(((double) diff / 86400000));
if (day <= period) {
sw = true; // 최신글 처리
}
return sw;
}
/**
* 이미지 사이즈를 변경하여 새로운 이미지를 생성합니다. 원본 이미지는 축소후 삭제합니다.
*
* @param dir
* 기준 폴더
* @param _src
* 원본 이미지
* @param width
* 생성될 이미지 너비
* @param height
* 생성될 이미지 높이, ImageUtil.RATIO는 자동 비례 비율
* @throws IOException
*/
public static synchronized String imgResize(String dir, String filename, int width,
int height) throws IOException {
File src = new File(dir + "/" + filename);
File dest = new File(dir + "/" + Utility.convertFilenameNotExtend(filename)
+ "_s.jpg");
int RATIO = 0;
int SAME = -1;
Image srcImg = null;
// 파일의 확장자 추출
String suffix = src.getName().substring(src.getName().lastIndexOf('.') + 1)
.toLowerCase();
// 이미지의 확장자를 검색하여 이미지 파일인지 검사
if (suffix.equals("jpg") || suffix.equals("bmp") || suffix.equals("png")
|| suffix.equals("gif")) {
srcImg = ImageIO.read(src); // 메모리에 이미지 생성
} else {
srcImg = new ImageIcon(src.getAbsolutePath()).getImage();
}
int srcWidth = srcImg.getWidth(null); // 원본 이미지 너비 추출
int srcHeight = srcImg.getHeight(null); // 원본 이미지 높이 추출
int destWidth = -1, destHeight = -1; // 대상 이미지 크기 초기화
if (width == SAME) { // 너비가 같은 경우
destWidth = srcWidth;
} else if (width > 0) {
destWidth = width;
}
if (height == SAME) { // 높이가 같은 경우
destHeight = srcHeight;
} else if (height > 0) {
destHeight = height;
}
// 비율에 따른 크기 계산
if (width == RATIO && height == RATIO) {
destWidth = srcWidth;
destHeight = srcHeight;
} else if (width == RATIO) {
double ratio = ((double) destHeight) / ((double) srcHeight);
destWidth = (int) ((double) srcWidth * ratio);
} else if (height == RATIO) {
double ratio = ((double) destWidth) / ((double) srcWidth);
destHeight = (int) ((double) srcHeight * ratio);
}
// 메모리에 대상 이미지 생성
Image imgTarget = srcImg.getScaledInstance(destWidth, destHeight,
Image.SCALE_SMOOTH);
int pixels[] = new int[destWidth * destHeight];
PixelGrabber pg = new PixelGrabber(imgTarget, 0, 0, destWidth, destHeight,
pixels, 0, destWidth);
try {
pg.grabPixels();
} catch (InterruptedException e) {
throw new IOException(e.getMessage());
}
BufferedImage destImg = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
destImg.setRGB(0, 0, destWidth, destHeight, pixels, 0, destWidth);
// 파일에 기록
ImageIO.write(destImg, "jpg", dest);
System.out.println(dest.getName() + " 이미지를 생성했습니다.");
// 원본 파일 삭제
boolean ret = Utility.deleteFile(dir + "/" + filename);
if (ret == true) {
System.out.println("파일을 삭제 했습니다.: " + filename);
}
return dest.getName();
}
/**
* 이미지 사이즈를 변경하여 새로운 이미지를 생성합니다.
*
* @param src
* 원본 이미지
* @param dest
* 생성되는 이미지
* @param width
* 생성될 이미지 너비
* @param height
* 생성될 이미지 높이, ImageUtil.RATIO는 자동 비례 비율
* @throws IOException
*/
public static synchronized String imgResize(File src, File dest, int width, int height)
throws IOException {
int RATIO = 0;
int SAME = -1;
Image srcImg = null;
// 파일의 확장자 추출
String suffix = src.getName().substring(src.getName().lastIndexOf('.') + 1)
.toLowerCase();
// 이미지의 확장자를 검색하여 이미지 파일인지 검사
if (suffix.equals("jpg") || suffix.equals("bmp") || suffix.equals("png")
|| suffix.equals("gif")) {
srcImg = ImageIO.read(src); // 메모리에 이미지 생성
} else {
srcImg = new ImageIcon(src.getAbsolutePath()).getImage();
}
int srcWidth = srcImg.getWidth(null); // 원본 이미지 너비 추출
int srcHeight = srcImg.getHeight(null); // 원본 이미지 높이 추출
int destWidth = -1, destHeight = -1; // 대상 이미지 크기 초기화
if (width == SAME) { // 너비가 같은 경우
destWidth = srcWidth;
} else if (width > 0) {
destWidth = width;
}
if (height == SAME) { // 높이가 같은 경우
destHeight = srcHeight;
} else if (height > 0) {
destHeight = height;
}
// 비율에 따른 크기 계산
if (width == RATIO && height == RATIO) {
destWidth = srcWidth;
destHeight = srcHeight;
} else if (width == RATIO) {
double ratio = ((double) destHeight) / ((double) srcHeight);
destWidth = (int) ((double) srcWidth * ratio);
} else if (height == RATIO) {
double ratio = ((double) destWidth) / ((double) srcWidth);
destHeight = (int) ((double) srcHeight * ratio);
}
// 메모리에 대상 이미지 생성
Image imgTarget = srcImg.getScaledInstance(destWidth, destHeight,
Image.SCALE_SMOOTH);
int pixels[] = new int[destWidth * destHeight];
PixelGrabber pg = new PixelGrabber(imgTarget, 0, 0, destWidth, destHeight,
pixels, 0, destWidth);
try {
pg.grabPixels();
} catch (InterruptedException e) {
throw new IOException(e.getMessage());
}
BufferedImage destImg = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
destImg.setRGB(0, 0, destWidth, destHeight, pixels, 0, destWidth);
// 파일에 기록
ImageIO.write(destImg, "jpg", dest);
System.out.println(dest.getName() + " 이미지를 생성했습니다.");
return dest.getName();
}
/**
* FileUpload 1.2 한글 변환
*
* @param str
* @return
*/
public static synchronized String encodFileUpload12(String str) {
String corean = null;
try {
corean = new String(str.getBytes("ISO-8859-1"), "UTF-8");
// corean= new String(str.getBytes("ISO-8859-1"), "KSC5601");
} catch (Exception e) {
return corean;
}
return corean;
}
/**
* 이미지인지 검사
* @param filename
* @return
*/
public static synchronized boolean isImage(String filename) {
boolean sw = false;
if (filename != null) {
filename = filename.toLowerCase();
sw = filename.endsWith(".jpg") || filename.endsWith(".jpeg")
|| filename.endsWith(".gif") || filename.endsWith(".png")
|| filename.endsWith(".bmp");
}
return sw;
}
public static synchronized String trim(String str, int length) {
String _str = "";
if (str.length() > length) {
_str = str.substring(0, length);
} else {
_str = str;
}
return _str;
}
}//class end
목록(list)에 조회수 자동으로 증가 함수 처리
hot 이미지 첨부하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<h3>글목록</h3>
<p><a href="bbsForm.jsp">글쓰러 가기</a></p>
<table class="table table-hover" border="1">
<thead>
<tr class="info" >
<th>제목</th>
<th>조회수</th>
<th>작성자</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<%
ArrayList<BbsDTO> list = dao.list();
if(list==null){
out.println(" <tr>");
out.println(" <td colspan='5'>" );
out.println(" <strong> 작성 글없음 <strong>" );
out.println(" </td>" );
out.println(" <tr>");
}else{
//오늘 날짜를 문자열로 2023-04-14
String today=Utility.getDate();
for(int i=0;i<list.size();i++){
dto=list.get(i);
%>
<tr>
<td style="text-align:left"><a href="bbsRead.jsp?bbsno=<%=dto.getBbsno()%>"><%=dto.getSubject()%></a>
<%
//오늘 작성한 글 제목 뒤에 new 이미지 출력
//작성일(regdt)에서 년월일 자르기
String regdt=dto.getRegdt().substring(0,10);
if(regdt.equals(today)){
out.println("<img src='../images/new.gif'>");
}
//조회수 10이상 hot 이미지 출력
if(dto.getReadcnt()>=10){
out.println("<img src='../images/hot.gif'>");
}
%>
</td>
<td><%=dto.getReadcnt() %></td>
<td><%=dto.getWname() %></td>
<td><%=dto.getRegdt().substring(0,10) %></td>
</tr>
<%
}
int totalRecord=dao.count();
out.println("<tr>");
out.println("<td colspan='4' style='text-align:center;'>");
out.println(" 글갯수:<strong>" +totalRecord +"</strong>");
out.println("</td>");
out.println("</tr>");
}
%>
</tbody>
</table>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
상세보기
bbsread.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<h3>게시판 상세보기</h3>
<p>
<a href="bbsForm.jsp">글쓰기</a>
<a href="bbsList.jsp">글목록</a>
</p>
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
dto=dao.read(bbsno);
if(dto==null){
out.println("해당 글 없음");
}else{
//조회수 증가
dao.increment(bbsno);
%>
<table class="table">
<tr>
<th class="danger">일련번호</th>
<td><%=dto.getBbsno() %></td>
</tr>
<tr>
<th class="danger">작성자</th>
<td><%=dto.getWname()%></td>
</tr>
<tr>
<th class="danger">제목</th>
<td><%=dto.getSubject() %></td>
</tr>
<tr>
<th class="danger">내용</th>
<td>
<%
//특수문자 및 엔터를 br태그로 치환
String content=Utility.convertChar(dto.getContent());
out.print(content);
%>
</td>
</tr>
<tr>
<th class="danger">조회수</th>
<td>
<%=dto.getReadcnt() %></td>
</tr>
<tr>
<th class="danger">작성일</th>
<td><%=dto.getRegdt() %></td>
</tr>
<tr>
<th class="danger">아이피 주소</th>
<td><%=dto.getIp() %></td>
</tr>
</table>
<br>
<input type="button" value="답변쓰기" class="btn btn-primary" onclick="location.href='bbsReply.jsp'">
<input type="button" value="수정" class="btn btn-warning" onclick="location.href='bbsUpdate.jsp?bbsno=<%=bbsno%>'">
<input type="button" value="삭제" class="btn btn-secondary" onclick="location.href='bbsDel.jsp?bbsno=<%=bbsno%>'">
<%
}
%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
글삭제
bbsDelete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 글번호와 비밀번호가 일치하면 삭제 -->
<h3>글 삭제</h3>
<p>
<a href="bbsList.jsp">글목록</a>
</p>
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
%>
<form method="post" action="bbsDelProc.jsp" onsubmit="return pwCheck()">
<input type="hidden" name="bbsno" value="<%=bbsno%>">
<table class="table">
<tr>
<th class="info">비밀번호</th>
<td><input type="password" name="passwd" id="passwd" required>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="삭제" class="btn btn-danger" >
</td>
</tr>
</table>
</form>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
비밀번호 확인 myscript.js
자바스크립트로 작성
function pwCheck(){
let passwd= document.getElementById("passwd").value;
passwd=passwd.trim();
if (passwd.length<4 || isNaN(passwd)) {
alert("비밀번호는 4글자 이상 숫자로 입력하세요");
document.getElementById("passwd").focus();
return false;
}
let message="진행된 내용은 복구되지 않습니다\n 계속 진행할까요?"
if(confirm(message)){
//확인 true 취소 false
return true;
}else{
return false;
}
글삭제
bbsDeleteProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
String passwd=request.getParameter("passwd").trim();
dto.setBbsno(bbsno);
dto.setPasswd(passwd);
int cnt=dao.delete(dto);
if (cnt == 0) {
out.println("<p>비밀번호가 틀립니다</p>");
out.println("<p><a href='javascript:history.back()'>재시도</a></p>");
} else {
out.println("<script>");
out.println(" alert('삭제 성공');");
out.println(" location.href='bbsList.jsp';"); //목록페이지 이동
out.println("</script>");
}
%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
수정하기
bbsUpdate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<h3>글 수정하기</h3>
<p>
<a href="bbsForm.jsp">글쓰기</a>
<a href="bbsList.jsp">글목록</a>
</p>
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
dto = dao.read(bbsno);
if(dto==null){
out.println("해당 글 없음");
}else{
%>
<form action="bbsUpdateProc.jsp" method="post" name="bbsUpdatefrm" id="bbsUpdatefrm" onsubmit="return bbsCheck()">
<!-- <input type="hidden" name="sno" value="<%=bbsno%>"> -->
<input type="hidden" name="bbsno" value="<%=bbsno%>">
<table class="table">
<tr>
<th class="success">작성자</th>
<td><input type="text" name="wname" id="wname" class="form-control" maxlength="20" value="<%=dto.getWname()%>" required>
</td>
</tr>
<tr>
<th class="success">제목</th>
<td><input type="text" name="subject" id="subject" class="form-control" maxlength="100" value="<%=dto.getSubject()%>" required>
</td>
</tr>
<tr>
<th class="success">내용</th>
<td><textarea rows="5" class="form-control" name="content" id="content"><%=dto.getContent()%></textarea></td>
</tr>
<tr>
<th class="success">비밀번호</th>
<td><input type="password" name="passwd" id="passwd" class="form-control" maxlength="20" required></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="수정" class="btn btn-primary" >
<input type="reset" value="취소" class="btn btn-secondary" >
</td>
</tr>
</table>
</form>
<%
}
%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>
bbsUpdateProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>
<!-- 본문 시작 -->
<!-- 폼에서 모든 값을 받아오기 -->
<%
int bbsno=Integer.parseInt(request.getParameter("bbsno"));
String subject=request.getParameter("subject").trim();
String wname=request.getParameter("wname").trim();
String content=request.getParameter("content").trim();
String passwd=request.getParameter("passwd").trim();
String ip=request.getRemoteAddr();
dto.setBbsno(bbsno);
dto.setWname(wname);
dto.setSubject(subject);
dto.setContent(content);
dto.setPasswd(passwd);
dto.setIp(ip);
int cnt=dao.updatepro(dto);
if (cnt == 0) {
out.println("<p>글수정 실패 비밀번호가 다릅니다</p>");
out.println("<p><a href='javascript:history.back()'>재시도</a></p>");
} else {
out.println("<script>");
out.println(" alert('글수정 성공');");
out.println(" location.href='bbsList.jsp';"); //목록페이지 이동
out.println("</script>");
}
%>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp" %>