소개:
비교를 위해 두 개의 대형 웹사이트를 예로 들어보겠습니다.
51job 및 Zhaopin Recruitment (우선 광고를 하는 것이 아니며 기술적 비교를 위한 예시로만 사용하고 있음을 먼저 말씀드립니다)
51job은 상대적으로 "진보된" PHP 기술을 사용하는 반면, Zhaopin은 상대적으로 뒤떨어진 ASP를 사용합니다. 그러나 우리는 분명히 Zhaopin에 비해 51job의 응답 속도가 너무 느리다고 느낄 수 있습니다. 주의 깊은 사람은 그것을 알아차릴 수도 있습니다. Zhilian은 ASP를 사용하지만 또 다른 더 영리한 기술인 ASP 정적 페이지 생성 기술을 사용합니다. 모든 동적 페이지는 기본적으로 데이터베이스에 접근하지 않고 HTML 정적 페이지로 변환됩니다. 물론 응답도 빠릅니다.
jsp를 html로 변환하는 방법에 대해 논의해 볼까요??
먼저 템플릿을 만드세요. 접미사에는 제한이 없으나 일반적으로 *.template을 예시로 사용한다.
<html>
<머리>
<제목>#제목#</제목>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>
<본문>
<P 정렬="가운데">
#제목#<BR><BR><BR>
작성자: #author#<BR><BR>
<BR>
#콘텐츠#<BR><BR><BR><BR>
</P>
</body>
</html>
템플릿을 처리하는 클래스나 jsp 파일을 만듭니다. (문제를 설명하기 위해 간단한 jsp 파일을 예로 들어 보겠습니다.)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(파일 경로);
문자열 templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//모듈 파일 읽기
int 길이 = fileinputstream.available();
바이트 바이트[] = 새 바이트[길이];
fileinputstream.read(바이트);
fileinputstream.close();
templateContent = new String(bytes);
out.print("다음은 템플릿 내용입니다.<br>"+templateContent+"<br> 다음은 교체 후 html 내용입니다<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);//모듈에서 해당 위치를 교체합니다.
templateContent=templateContent.replaceAll("#content#",content);
// 시간을 기준으로 파일 이름을 가져옵니다.
달력 달력 = Calendar.getInstance();
문자열 파일 이름 = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//생성된 html 파일 저장 경로
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//파일 출력 스트림 생성
바이트 tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
뭐, 핵심 기술은 이렇습니다. 더 높은 성능이 필요하다면 대신 FreeMarker를 템플릿으로 사용해도 됩니다.
몇 번의 디버깅 끝에 성공했습니다. . 첨부된 내용은
소스코드입니다. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + MYSQL 5.0
데이터베이스 TEST, 테이블 이름 뉴스
필드: id int 자동 증가, Title varchar(20), Content varchar(200), Author varchar(10)
makeFile.jsp
<%
연결 연결 = DBconn.getConnection();
명령문 stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("뉴스에서 * 선택");
System.out.println("성공")
%>
<%
String filePath = request.getRealPath("/")+"template.htm";
System.out.println(filePath);
문자열 templateContent;
FileInputStream fileinputstream = new FileInputStream(filePath);
int length = fileinputstream.available(); //available() 차단하지 않고 이 파일 입력 스트림에서 읽을 수 있는 바이트 수를 반환합니다.
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes); //read(byte[] b) 이 입력 스트림에서 최대 b.length 바이트의 데이터를 바이트 배열로 읽습니다.
fileinputstream.close();
//templateContent = new String(bytes);
문자열 제목;
문자열 내용;
문자열 작성자;
동안(Rs.next())
{
templateContent = new String(bytes);//이 문장을 사용하지 않으면 한 번 바꾸면 templateContent에 #**# 표시가 없어집니다. 그래서 재생성하려면
title = Rs.getString("제목");
content = Rs.getString("콘텐츠");
작성자 = Rs.getString("저자");
out.println(title+"********"+content+"****"+저자);
out.print("다음은 템플릿 내용입니다.<br>"+templateContent+"<br> 다음은 교체 후 html 내용입니다<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);//모듈에서 해당 위치를 교체합니다.
templateContent=templateContent.replaceAll("#content#",content)
// 시간을 기준으로 파일 이름 가져오기
달력 달력 = Calendar.getInstance();
문자열 파일 이름 = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//생성된 html 파일 저장 경로
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//파일 출력 스트림 생성
바이트 tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close()
}
if(conn!=null)
{
conn.close();
}
if(stmt!=null)
{
stmt.close();
}
%>
//데이터베이스 연결 파일
가져오기 java.sql.*;
공개 클래스 DBconn {
공공DBconn() {
// TODO 자동 생성 생성자 스텁
}
공개 정적 연결 getConnection()
{
연결 연결 = null;
노력하다 {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" +
"?useUnicode=true&characterEncoding=GB2312","루트","111111");
}
잡기(예외e)
{
e.printStackTrace();
}
반환 연결;
}
/*public static void main(String[] args)에서 예외 발생
{
연결 con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//템플릿 파일
template.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<제목>#제목#</제목>
</head>
<본문>
<table width="380" height="107" border="0" cellpadding="0" cellpacing="1" bgcolor="#FFCC99">
<tr>
<td height="16" bgcolor="#FFCC99"><div align="center">#title#</div></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">#콘텐츠#</td>
</tr>
<tr>
<td height="13" align="right" bgcolor="#FFFFFF">#저자#</td>
</tr>
</table>
</body>
</html>