JSP + JAVABEAN + XML을 이용한 개발 예
저자:Eve Cole
업데이트 시간:2009-07-02 17:12:18
이 예는 일부 웹 사이트의 XML에 대한 JSP 작업에 대한 관련 문서를 참조하고 일부 개인적인 경험을 결합합니다. 예제에는 기업 내부 주문 시스템의 백엔드 관리를 위한 코드 일부 개발이 포함됩니다. 이 기능은 주로 레스토랑에 대한 기본 정보 관리에 중점을 둡니다.
예제 자체는 예전 회사 동료들과 했던 농담의 일부로 개발되었습니다. 함께 일했던 친구들에 대한 그리움도 전하고 싶습니다.
예제 자체는 TOMCAT4.01 플랫폼에서 실행되는 B/S 구조 프로그램입니다. 여기서는 TOMCAT의 구성을 설명하지 않습니다. 관련 파일과 폴더의 디렉터리 구조만 설명하면 됩니다.
디렉토리 구조 설명:
/tomcat/webapps/canyin/ -----홈 디렉토리
/tomcat/webapps/canyin/jsp/ -----JSP 파일 디렉터리
/tomcat/webapps/canyin/jsp/admin/ -----백그라운드 관리를 구현하는 JSP 파일의 저장 디렉터리
/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------Javabean 파일의 저장 디렉터리
/tomcat/webapps/canyin/data/ -----xml 파일 저장 디렉터리
/tomcat/webapps/ROOT/ -----Tomcat 시작 파일 저장 폴더, index.html 파일만 저장됨
파일에 대한 간략한 설명:
/tomcat/webapps/canyin/data/users.xml -----사용자 정보 기록
/tomcat/webapps/canyin/data/restaurants.xml -----음식점의 기본 정보를 기록합니다.
/tomcat/webapps/ROOT/index.html -----홈 페이지, 페이지에 입력 상자가 나타나 사용자가 사용자 이름과 비밀번호를 입력해야 합니다.
/tomcat/webapps/canyin/jsp/loginjudge.jsp -----사용자 신원 판단 페이지는 사용자 이름과 비밀번호를 기반으로 해당 페이지를 백그라운드 관리 터미널로 전송할지 프런트엔드 클라이언트로 전송할지 결정합니다. . 이 예에서는 사용자의 신원이 관리 권한이 있는 것으로 확인되면 백엔드 관리 터미널에 들어가 레스토랑의 기본 정보 관리 페이지로 바로 이동할 수 있으므로 설명 과정이 단순화됩니다.
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----기본 음식점 정보 관리 페이지, 음식점의 이름, 전화번호, 주소 및 기타 정보를 관리합니다.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- 백그라운드 관리 터미널은 사용자의 신원을 나타내는 세션 값을 감지합니다. 관리자가 아닌 경우 해당 터미널로 점프합니다. 로그인 페이지.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----xml 파일 연결
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----xml 파일 쓰기
파일에 대한 자세한 소개 및 그에 따른 코드 설명입니다.
/tomcat/webapps/canyin/data/users.xml
암호:
<?xml version="1.0" 인코딩="UTF-8" ?>
- <사용자>
<사용자 이름="joard" 비밀번호="joard" 역할="관리자" />
<사용자 이름="joard01" 비밀번호="joard01" 역할="사용자" />
<사용자 이름="joard02" 비밀번호="joard02" 역할="사용자" />
</사용자>
설명: 필드의 의미는 사용자 이름, 비밀번호 및 사용자 ID입니다.
/tomcat/webapps/canyin/data/restaurants.xml
암호:
<?xml version="1.0" 인코딩="UTF-8" ?>
- <레스토랑 번호="10">
- <레스토랑 ID="1">
<name>상하이 팅 패스트푸드점</name>
<phone>021-76546726</phone>
<address>브로드웨이 플라자 타워 B</address>
</레스토랑>
- <레스토랑 ID="8">
<name>샹그릴라 호텔</name>
<phone>021-2312134</phone>
<address>No. 1023, Nanjing Road</address>
</레스토랑>
</레스토랑>
참고: <num> 속성은 레스토랑.xml 파일에 있는 총 레코드 수를 기록합니다. 새 레코드가 추가될 때마다 나중에 삭제 여부에 관계없이 값이 1씩 증가합니다. 데이터베이스 항목에서 자동으로 1씩 증가합니다. 새로 추가된 <레스토랑>의 <id> 속성에 고유한 값을 할당하는 데 사용됩니다. 다른 필드의 의미가 더 명확해집니다.
/tomcat/webapps/ROOT/index.html(순수 HTML 코드)
암호:
<html>
<머리>
<title>oddWorld 케이터링 시스템</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body onload="javascript:dataform.username.focus()">
<div 정렬="중앙">
<table width="100%" border="0" cellpacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> 케이터링 시스템 로그인 </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</table>
<br>
<br>
<table width="300" border="0" cellpacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p 정렬="중앙">
<table width="100%" border="0" cellpacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#efefef">케이터링 시스템 로그인</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" cellpacing="0" cellpadding="0">
<form name=dataform method=post action=''canyin/jsp/loginjudge.jsp''>
<tr>
<td width="100"><b>로그인 이름:</b></td>
<TD>
<입력 최대 길이=16
name="사용자 이름" 클래스=stedit 값="joard">
</td>
</tr>
<tr>
<td width="100"><b>비밀번호:</b></td>
<TD>
<입력 클래스=stedit 최대 길이=16
이름="userpass" 유형=비밀번호 값="oddworld">
</td>
</tr>
</form>
</table>
<br>
<테이블 테두리=0 셀 패딩=0 셀 간격=0>
<본체>
<tr>
<TD>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="로그인">
</td>
<td> </td>
<TD>
<input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="비밀번호 변경">
</td>
<td> </td>
</tr>
</tbody>
</table>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
<SCRIPT 언어=자바스크립트>
<!--
함수 체크폼()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform.username.value))
{
Alert("로그인 이름은 비워둘 수 없습니다!");
거짓을 반환;
}
if (Checkblank.test(dataform.userpass.value))
{
Alert("비밀번호는 비워둘 수 없습니다!");
거짓을 반환;
}
window.dataform.submit();
}
-->
</SCRIPT>
지침: 사용자 이름과 사용자 비밀번호를 /tomcat/webapps/canyin/jsp/loginjudge.jsp에 제출하세요.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (코드는 해당 java 파일입니다)
패키지 캐인;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
공개 클래스 checkSessionBean {
개인 부울 bolCheckPass=false;
개인 HttpServletRequest 요청 = null;
공개 부울 checkSessionBean(HttpServletRequest 요청, 문자열 strSessionName, 문자열 strCheckValue){
공개 부울 checkSessionBean(HttpServletRequest 요청){
HttpSession 세션 = request.getSession(false);
return(bolCheckPass);
if (strSessionName==null || strCheckValue==null){
return(bolCheckPass);
}또 다른{
if (session!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
}
return(bolCheckPass);
}
}
}
설명: 파라미터로 전달된 세션 이름의 값과 파라미터로 전달된 필드의 값이 동일한지 확인합니다.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
암호:
패키지 캐인;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
org.w3c.dom.* 가져오기;
공개 클래스 connXmlBean {
개인 DocumentBuilderFactory 공장=null;
개인 DocumentBuilder 빌더=null;
개인 문서 doc=null;
공개 connXmlBean(){}
공개 문자열 connXml(문자열 xmlFileName){
문자열 strExc="";
노력하다{
공장 = DocumentBuilderFactory.newInstance();
builder=factory.newDocumentBuilder();
doc=builder.parse(xmlFileName);
doc.normalize();
}catch(예외 e){
strExc=e.toString();
}
return(strExc);
}
공개 문서 getXmlDoc(){
반환(문서);
}
}
설명: 지정된 xml 파일을 엽니다.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
암호:
패키지 캐인;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
java.io.파일 가져오기;
org.w3c.dom.* 가져오기;
공개 클래스 writeXmlBean {
공개 writeXmlBean(){}
공개 문자열 writeXml(문서 문서, 문자열 xmlFileName){
문자열 strExc="";
노력하다{
TransformerFactory tfactory = TransformerFactory.newInstance();
변환기 변환기 = tfactory.newTransformer();
DOMSource 소스 = 새로운 DOMSource(doc);
StreamResult 결과 = new StreamResult(new File(xmlFileName));
Transformer.transform(소스,결과);
}catch(예외 e){
strExc=e.toString();
}
return(strExc);
}
}
설명: dom의 내용을 지정된 xml 파일에 씁니다.
/tomcat/webapps/canyin/jsp/loginjudge.jsp
암호:
<%--oddWorld 케이터링 관리 시스템(중국어 간체 버전) 2002년 12월 1일
joard ast로 바로 복사하세요
loginjudge.jsp 함수: /data/user.xml 파일에 표시된 사용자의 다양한 신원을 기반으로 사용자 신원 확인
백엔드 관리 페이지 또는 고객 주문 페이지로 이동하기로 결정합니다.
--%>
<%@ 페이지 contentType="text/html;charset=gb2312" %>
<%@ 페이지 언어="java" import="javax.xml.parsers.*" %>
<%@ 페이지 import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" 범위="페이지" />
<%
session.setMaxInactiveInterval(1800);
문서 문서;
NodeList 사용자;
문자열 strExc="";
문자열 strUsername,strPassword;
strUsername=(String)request.getParameter("사용자 이름");
strPassword=(String)request.getParameter("userpass");
//데이터가 비어 있는지 확인
if (strUsername=="" || strPassword=="" ){
out.println("<script 언어=''javascript''>");
out.println("alert(''사용자 이름 또는 비밀번호에 null 값이 있습니다!'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
반품;
}
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
노력하다{
users =doc.getElementsByTagName("사용자");
for (int i=0;i<users.getLength();i++){
요소 user=(요소) users.item(i);
String strAtrNameValue=user.getAttributeNode("name").getNodeValue();
String strAtrPassWordValue=user.getAttributeNode("password").getNodeValue();
String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue();
if (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strPassword)){
if (strAtrRoleValue.equals("관리자")){
out.println("<script 언어=''javascript''>");
out.println("alert(''관리자가 시스템에 로그인하신 것을 환영합니다!'');");
out.println("</script>");
//사용자 ID를 나타내는 세션(sesUserRole)을 설정하며, 관리자 ID는 admin입니다.
session.setAttribute("sesUserRole","admin");
//관리페이지로 이동
response.sendRedirect("admin/admin_rest.jsp");
반품;
}또 다른{
//사용자의 신원을 나타내는 세션(sesUserRole)을 설정하며, 관리자의 신원은 user입니다.
session.setAttribute("sesUserRole","사용자");
//일반 사용자 페이지로 이동
response.sendRedirect("index.jsp");
반품;
}
}또 다른{
out.println("<script 언어=''javascript''>");
out.println("alert(''사용자 이름이나 비밀번호가 틀렸습니다!'');");
out.println("history.go(-1);");
out.println("</script>");
반품;
}
}
}catch(예외 e){
strExc=e.toString();
}
%>
설명하다:.......
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
암호:
<%--oddWorld 케이터링 관리 시스템(중국어 간체 버전) 2002년 12월 1일
joard ast로 바로 복사하세요
admin_rest.jsp 기능: 백엔드 관리 페이지, 레스토랑 관리 페이지.
--%>
<%@ 페이지 contentType="text/html;charset=gb2312" %>
<%@ 페이지 언어="java" import="javax.xml.parsers.*" %>
<%@ 페이지 import="javax.xml.transform.*" %>
<%@ 페이지 import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<%@ 포함 파일="../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" 범위="페이지" />
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" 범위="페이지" />
<jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" 범위="페이지" />
<%//사용자의 신원을 확인하여 관리자인지 확인합니다.
if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){
out.print(showDialog("관리자 권한이 없습니다!","/index.html"));
반품;
}
//레스토랑 정보 파일인 Rest.xml에서 관련 데이터를 가져옵니다.
문서 문서;
NodeList 레스토랑;
문자열 strAct;
int intId=0;
문자열 strOperation="표시";
//전달된 외부 매개변수를 승인합니다.
strAct=(String)request.getParameter("act");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
레스토랑 =doc.getElementsByTagName("레스토랑");
//전달된 외부 매개변수를 기반으로 레스토랑.xml 파일의 작동을 결정합니다.
if (strAct!=null){
if(strAct.equals("addnewDo")){
문자열 문자열이름;
문자열 strPhone;
문자열 strAddress;
텍스트 텍스트세그;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("address").trim();
//데이터 검증
if(strName==null){
out.print(showDialog("레스토랑 이름은 비워둘 수 없습니다!"));
반품;
}
if(strPhone==null){
out.print(showDialog("식당 전화번호는 비워둘 수 없습니다!"));
반품;
}
/*if(strAddress==null){
out.print(showDialog("식당 주소는 비워둘 수 없습니다!"));
반품;
}*/
//데이터의 고유성 확인
for(int i=0;i<restaurants.getLength();i++){
요소 레스토랑=(요소) 레스토랑.항목(i);
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){
out.print(showDialog("식당 이름이 중복되었습니다!"));
반품;
}또 다른{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
out.print(showDialog("식당 전화번호를 반복하세요!"));
반품;
}
}
}
//기존 레코드 수를 가져오고 새 레스토랑 레코드에 대한 고유한 증분 ID 속성을 설정합니다.
int intNum=0;
요소 나머지Num=(요소)doc.getElementsByTagName("레스토랑").item(0);
intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
intNum+=1;
//레스토랑 속성 num의 값에 1을 더합니다.
RestNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
//노드 추가
요소 newRestaurant=doc.createElement("레스토랑");
Attr newArrId=doc.createAttribute("id");
//속성 newArrId = new Attribute("id",String.valueOf(intNum));
textseg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode(newArrId);
요소 newName=doc.createElement("이름");
textseg=doc.createTextNode(strName);
newName.appendChild(textseg);
newRestaurant.appendChild(새이름);
요소 newPhone=doc.createElement("전화");
textseg=doc.createTextNode(strPhone);
newPhone.appendChild(textseg);
newRestaurant.appendChild(newPhone);
요소 newAddress=doc.createElement("주소");
textseg=doc.createTextNode(strAddress);
newAddress.appendChild(textseg);
newRestaurant.appendChild(newAddress);
doc.getDocumentElement().appendChild(newRestaurant);
//해당 XML 파일을 작성하기 위해 Bean을 호출합니다.
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
반품;
}
if(strAct.equals("modiDo")){
문자열 문자열이름;
문자열 strPhone;
문자열 strAddress;
텍스트 텍스트세그;
int modId;
//수정할 레코드가 어떤 항목(i)인지 기록합니다.
int intI=0;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("address").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
//데이터 검증
if(strName==null){
out.print(showDialog("레스토랑 이름은 비워둘 수 없습니다!"));
반품;
}
if(strPhone==null){
out.print(showDialog("식당 전화번호는 비워둘 수 없습니다!"));
반품;
}
if(modiId==0){
out.print(showDialog("수정하려는 레스토랑의 기록이 존재하지 않습니다!"));
반품;
}
/*if(strAddress==null){
out.print(showDialog("식당 주소는 비워둘 수 없습니다!"));
반품;
}*/
// 플래그는 레코드가 존재함을 나타냅니다.
부울 레코드Exist=false;
//데이터의 고유성 확인
for(int i=0;i<restaurants.getLength();i++){
요소 레스토랑=(요소) 레스토랑.항목(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
기록존재=true;
intI=i;
}
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("식당 이름이 중복되었습니다!"));
반품;
}또 다른{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("식당 전화번호를 반복하세요!"));
반품;
}
}
}
if(!recordExist){
out.print(showDialog("수정하려는 레스토랑의 기록이 존재하지 않습니다!"));
반품;
}또 다른{
//레코드 변경 수행
노력하다{
요소 modiRestaurant=(요소) 레스토랑.item(intI);
modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName);
modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone);
modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress);
//해당 XML 파일을 작성하기 위해 Bean을 호출합니다.
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
반품;
}catch(예외 e){}
}
}
//삭제 작업 수행
if(strAct.equals("del")){
int delId;
//수정할 레코드가 어떤 항목(i)인지 기록합니다.
int intI=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
if(delId==0){
out.print(showDialog("수정하려는 레스토랑의 기록이 존재하지 않습니다!"));
반품;
}
file:// 플래그는 레코드가 존재함을 나타냅니다.
부울 레코드Exist=false;
//데이터의 고유성 확인
for(int i=0;i<restaurants.getLength();i++){
요소 레스토랑=(요소) 레스토랑.항목(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
기록존재=true;
intI=i;
}
}
if(!recordExist){
out.print(showDialog("삭제하려는 음식점의 기록이 존재하지 않습니다!"));
반품;
}또 다른{
//레코드 삭제 작업 수행
노력하다{
노드 delNode=(Node)restaurants.item(intI);
doc.getElementsByTagName("레스토랑").item(0).removeChild(delNode);
//해당 XML 파일을 작성하기 위해 Bean을 호출합니다.
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
반품;
}catch(예외 e){}
}
}
}
//페이지의 해당 처리 상태는 외부 매개변수에 의해 결정됩니다.
if (strAct==null){
strOperation="표시";
}또 다른{
if (strAct.equals("modi")){
strOperation="modi";
intId=Integer.parseInt(request.getParameter("recordId"));
}또 다른{
if(strAct.equals("새로 추가")){
strOperation="새로 추가";
}또 다른{
strOperation="표시";
}
}
}
//레코드가 비어 있으면 페이지 상태를 "New"로 변경합니다.
if (restaurants.getLength()==0){
strOperation="새로 추가";
}
%>
<html>
<머리>
<title>oddWorld 케이터링 시스템</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="만료" content="0">
<link rel="stylesheet" href="../../include/itsp.css" type="text/css">
</head>
<본문>
<div 정렬="중앙">
<table width="100%" border="0" cellpacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="../../images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> 케이터링 시스템 관리--레스토랑 관리</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[시스템 종료]</a></td>
</tr>
</table>
<br>
<br>
<table bgcolor="#999999" 정렬=가운데 테두리=0 셀 패딩=1 셀 간격=1
너비="90%">
<본체>
<tr bgcolor="#efefef" align="center" valign="중간">
<td 클래스=tt테이블 높이=30 너비="20"> </td>
<td class=ttTable height=30 width="0">식당 이름</td>
<td class=ttTable height=30 width="0">식당 전화번호</td>
<td 클래스=tt테이블 높이=30 너비="0">
<div align="center">식당 주소</div>
</td>
<td 클래스=tt테이블 높이=30 너비="30">
<div align="center">수정</div>
</td>
<td 클래스=tt테이블 높이=30 너비="30">
<div align="center">삭제</div>
</td>
</tr>
<%
for(int i=0;i<restaurants.getLength();i++)
{
요소 레스토랑=(요소) 레스토랑.항목(i);
if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
<%//수정된 형식 표시%>
<tr align="center" bgcolor="#ffffff" valign="중간">
<form name=dataform action="<%=request.getRequestURI()%>?act=modiDo" method="post" onSubmit=''return checkform(this);'' >
<td 클래스=td작은 높이=25 너비="20">
<input type="hidden" name="recordId" value="<%=restaurant.getAttributeNode("id").getNodeValue()%>">
<%=(i+1)%></td>
<td 클래스=td작은 높이=25>
<입력 이름="이름" 클래스=stedit
style="높이: 22px; 너비: 150px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
" 최대 길이="40" >
</td>
<td 클래스=td작은 높이=25>
<입력 이름="전화" 클래스=stedit
style="높이: 22px; 너비: 100px" value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%>" 최대 길이="20" >
</td>
<td 클래스=td작은 높이=25>
<입력 이름="주소" 클래스=stedit
스타일="높이: 22px; 너비: 200px" 값="<%
if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
}%>" 최대 길이="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
높이=15 src="../../images/editok.gif" 너비=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% }그밖에{
//일반 형식 표시 %>
<tr align="center" bgcolor="#ffffff" valign="중간">
<td class=tdsmall height=25 width="20"><%=(i+1)%></td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%></td>
<td 클래스=tdsmall 높이=25 너비="0">
<%
if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img 테두리=0
높이=15 src="../../images/edit.gif" 너비=15></a></td>
<td class=tdsmall height=25 width="30"><img border=0
높이=15
onClick="javascript:if(confirm(''이 레코드를 삭제하시겠습니까? 삭제하면 해당 레코드를 사용할 수 없게 됩니까?'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"
src="../../images/delete.gif" style="CURSOR: 손" width=15> </td>
</tr>
<%}
}%>
<% if (strOperation=="새 추가"){
//새 형식 표시%>
<tr align="center" bgcolor="#ffffff" valign="중간">
<form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo" method="post" onSubmit=''return checkform2(this);'' >
<td class=tdsmall height=25 width="20"></td>
<td 클래스=td작은 높이=25>
<입력 이름="이름" 클래스=stedit
스타일="높이: 22px; 너비: 150px" value="" maxlength="40" >
</td>
<td 클래스=td작은 높이=25>
<입력 이름="전화" 클래스=stedit
스타일="높이: 22px; 너비: 100px" value="" maxlength="20" >
</td>
<td 클래스=td작은 높이=25>
<입력 이름="주소" 클래스=stedit
스타일="높이: 22px; 너비: 200px" value="" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
높이=15 src="../../images/editok.gif" 너비=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% } %>
</tbody>
</table>
<br>
<테이블 정렬=가운데 테두리=0 cellpadding=0 셀 간격=2 너비="95%">
<본체>
<tr valign=중심>
<td 정렬=중간> <br>
<테이블 테두리=0 셀 패딩=0 셀 간격=0>
<tr>
<TD>
<% if (strOperation=="새 추가"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=버튼 값="기록 업데이트">
<% }그밖에{
if(strOperation=="modi"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=버튼 값="기록 업데이트">
<%
}또 다른{
%>
<input class=stbtm type="button" name="Button" value="New" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew'' ; "><%
}
} %>
</td>
<TD>
<input class=stbtm type="button" name="Button" value="Return" onClick="javascript:window.location.href=''index.jsp'';">
</td>
</tr>
</table>
</td>
</tr>
</table>
<p> </p>
</div>
</body>
</html>
<스크립트 언어=자바스크립트>
<!--
함수 checkform2()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform2.name.value))
{
Alert("레스토랑 이름은 비워둘 수 없습니다!");
dataform2.name.focus();
거짓을 반환;
}
if(Checkblank.test(dataform2.phone.value))
{
Alert("식당 전화번호는 비워둘 수 없습니다!");
dataform2.phone.focus();
거짓을 반환;
}
window.dataform2.submit();
}
함수 체크폼()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform.name.value))
{
Alert("레스토랑 이름은 비워둘 수 없습니다!");
dataform.name.focus();
거짓을 반환;
}
if(Checkblank.test(dataform.phone.value))
{
Alert("식당 전화번호는 비워둘 수 없습니다!");
dataform.phone.focus();
거짓을 반환;
}
window.dataform.submit();
}
-->
</SCRIPT>
참고: 프로그램 개발 과정에서 프로그램을 지나치게 간결하게 작성하면 나중에 유지 관리하는 데 어려움을 겪는 경우가 많기 때문에 이 문서를 여러 곳에서 간결하게 작성하지 않았습니다.
개발 경험:
doc.getElementsByTagName("restaurants").item(int i)의 반환 값은 노드 유형입니다. 해당 속성 값을 호출하지 않으려면 요소 유형으로 캐스팅할 필요가 없습니다. 직접 조작이 가능합니다. 개발 참고 자료의 오류로 인해 본 시스템은 강제 변환을 사용합니다. 향후 개발에서 노드를 사용하여 직접 작동하는 것을 고려할 수 있습니다.
Trim() 및 Interger.parseInt() 함수는 모두 null 값을 허용하지 않습니다.
tomcat 아래의 왼쪽, 오른쪽 파일은 TOMCAT에서 시작하는 디렉터리입니다. 자세한 내용은 webappscanyinjspuserjudge.jsp를 참고하여 xml 경로를 작성하시기 바랍니다.
원본 코드에 관심이 있는 친구들은 다음 이메일 주소 [email protected]으로 연락해주세요.