一.JSP技术简介
Java语言因为具备着不依赖于平台、面向对象、安全等优良特性而在众多程序设计语言中备受青睐。目前,许多与Java有关的技术得到了广泛的应用和认可,由SUN公司开发的JSP(Java Server Page)技术就是其中之一。JSP是基于Java语言的一种动态网站开发技术。JSP具有嵌入式的特性,它可以和传统的HTML代码结合,将JAVA代码嵌入到其中进行扩展,在实现动态页面与静态页面分离的基础上为应用程序的扩展与维护带来极大便利。JSP具有跨平台的特性,它能够脱离硬件平台的束缚在多种操作平台上执行。
二.JSP运行原理
通常,用户在需要获取信息时会使用浏览器向某个服务器发出请求,服务器在接收到用户发出的请求后会进行相应处理接着把用户所需要的信息发送到客户端,这样的模式是网络通信中最常见的B/S模式。Web服务器可以识别并解释经过JSP技术扩展后的HTML标记。当用户向服务器发出请求时,JSP就会转换被请求的文件为Servlet代码,由于用户提出请求后代码才会执行,所以在第一次调用代码时加载时间会比较长,而经过第一次的编译和执行后,代码就可以在后台独立运行,让程序的运行始终保持高效率。
三.Tag文件与Tag标记
对于软件设计来说,代码复用是一个很重要的方面,作为一个重要指标衡量软件可维护性。在很多情况下,一个Web应用中的许多JSP页面需要使用很多相同的信息,如果能够将这些相同的信息形成一种特殊文件以提供给每个JSP页面调用,那么这样的特殊文件就是可复用的代码。在JSP技术中,实现这一功能的特殊文件就是Tag文件。Tag文件的结构与JSP文件的结构非常相似,一个Tag文件中也可以有Java程序片、Java表达式、成员变量和方法、HTML标记、指令标记。但不同的是,用户不能通过浏览器直接访问一个Tag文件,相应的Tag文件只能通过在一个JSP页面使用Tag标记来调用。
四.JSP+Javabean+Servlet的MVC模式
JavaBean是用Java语言遵循一定标准编写的一个类,它具有代码复用、易编写、易维护的特点。Java Servlet技术是在服务器端创建一个框架扩展服务器以响应用户请求对象的技术,这个对象通常被称之为一个Servlet对象。
MVC模式是一种有效组合了基于JSP的“视图”、基于JavaBean的“模型”、基于Servlet的“控制器”的先进设计模式。从面向对象的角度,MVC模式的结构使得应用程序更加具有对象化的特性,也更加容易维护。在进行程序设计时,可以将某个对象看做“模型”,然后为“模型”提供恰当的“视图”。在MVC模式中,“视图”、“模型”、“控制器”之间是松耦合结构的,便于系统的维护以及扩展。
五.影片中心开发示例
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta charset="UTF-8">
<%@ taglib tagdir="/WEB-INF/tags" prefix="showBookByPage"%>
<title>电影俱乐部影评系统</title>
<link rel="stylesheet" media="screen" href="../css/basic.css"/>
</head>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String logname=(String)session.getAttribute("logname");
if (logname!=null) {
int m=logname.indexOf(",");
logname=logname.substring(0,m);
} else {
response.sendRedirect("Login.jsp");
}
%>
<body>
<header>
<img src="C:/Users/admin/eclipse-workspace/tushuguan/images/2.jpg"/>
<nav>
<ul>
<li><a href="index.jsp">网站主页</a></li>
<li><a href="template.jsp">影片中心</a></li>
<li><a href="LookArticle.jsp">影讯中心</a></li>
<li>
<% String logname1=(String)session.getAttribute("logname");
if (logname1==null) {
out.print("<a href=\"Login.jsp\">登录</a>");
} else {
out.print("<a href=\"ExitLogin.jsp\">退出登录</a>");
}
%>
</li>
<li><a href="Center.jsp">个人中心</a></li>
</ul>
</nav>
</header>
<article>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String number=request.getParameter("page");
if(number==null) {
number="1";
}
%>
<div id="biao">
每页最多显示6部电影。
<showBookByPage:ShowBookByPage dataSource="bookshop"
tableName="bookForm" bookAmountlnPage="6" zuduanAmount="10"
page="<%=number %>" logname="<%=logname %>"/>共有<%=pageAllCount %>页,当前显示第<%=showPage %>页。
<br><br>
<form action="FindBook.jsp" name=form method="post">
<input type=submit class="button" value="查找影片">
</form>
<link rel="stylesheet" media="screen" href="../css/board.css"/>
<%=giveResult %>
<link rel="stylesheet" media="screen" href="../css/table.css"/>
<%
int m=showPage.intValue();
%>
<a href="template.jsp?page=<%=m-1 %>">上一页</a>
<a href="template.jsp?page=<%=m+1 %>">下一页</a>
<form action="">
输入页码:<input type=text name="page">
<input type=submit value="提交">
</form>
</center>
</article>
</div>
</body>
</html>
<%@ tag import="java.sql.*"%>
<%@ tag import="javax.sql.rowset.*" %>
<%@ tag language="java" pageEncoding="utf-8"%>
<% request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");%>
<%@ attribute name="dataSource" required="true" %>
<%@ attribute name="tableName" required="true" %>
<%@ attribute name="bookAmountlnPage" required="true" %>
<%@ attribute name="page" required="true" %>
<%@ attribute name="logname" required="true" %>
<%@ attribute name="zuduanAmount" required="true" %>
<%@ variable name-given="showPage" variable-class="java.lang.Integer" scope="AT_END" %>
<%@ variable name-given="pageAllCount" variable-class="java.lang.Integer" scope="AT_END" %>
<%@ variable name-given="giveResult" variable-class="java.lang.StringBuffer" scope="AT_END" %>
<%
try {Class.forName("com.mysql.jdbc.Driver");}
catch (ClassNotFoundException e) {
out.print(e);
}
Connection con;
Statement sql,sqla,sqlb,sqlc,sqld;
ResultSet rs,rd,rb;
int pageSize=Integer.parseInt(bookAmountlnPage);
int allPages=0;
int show=Integer.parseInt(page);
StringBuffer presentPageResult;
CachedRowSet rowSet=RowSetProvider.newFactory().createCachedRowSet();
presentPageResult=new StringBuffer();
String uri="jdbc:mysql://localhost:3306/"+dataSource;
String uname = "root";
String upassword = "movie199738M";
try {
con=DriverManager.getConnection(uri,uname,upassword);
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
String s="select * from "+tableName;
rs=sql.executeQuery(s);
rowSet.populate(rs);
rowSet.last();
int m=rowSet.getRow();
int n=pageSize;
allPages=((m%n)==0)?(m/n):(m/n+1);
int p=Integer.parseInt(page);
if(p>allPages) {
p=1;
}
if(p<=0) {
p=allPages;
}
jspContext.setAttribute("showPage",new Integer(p));
jspContext.setAttribute("pageAllCount",new Integer(allPages));
presentPageResult.append("<table border=1>");
presentPageResult.append("<tr>");
presentPageResult.append("<th>电影封面</td>");
presentPageResult.append("<th>电影名称</td>");
presentPageResult.append("<th>演员</td>");
presentPageResult.append("<th>制片地区</td>");
presentPageResult.append("<th>导演</td>");
presentPageResult.append("</tr>");
rowSet.absolute((p-1)*pageSize+1);
int ziduangeshu=10;
ziduangeshu=Integer.parseInt(zuduanAmount);
for (int i=1; i<=pageSize;i++) {
presentPageResult.append("<tr>");
String bookISBN="";
String author="";
String publish="";
String director="";
String bookPic="";
String bookName="";
String bookNameLink="";
for(int k=1;k<=ziduangeshu;k++) {
if(k==1) {
bookPic="<image src="+rowSet.getString(k)+" width=70 height=100/>";
} else if(k==2) {
bookISBN=rowSet.getString(k);
} else if(k==3) {
bookName=rowSet.getString(k);
bookNameLink="<a href=\"LookBookAbstract.jsp?bookISBN="+bookISBN+"\">"+bookName+"</a>";
} else if(k==4) {
author=rowSet.getString(k);
} else if(k==6) {
publish=rowSet.getString(k);
} else if(k==8) {
director=rowSet.getString(k);
}
}
String sqlStatemente="use bookshop";
String sqlStatementf="select * from blackform where bookISBN = '"+bookISBN+"'";
sqld=con.createStatement();
sqld.executeUpdate(sqlStatemente);
sqlc=con.createStatement();
rb=sqlc.executeQuery(sqlStatementf);
if(!rb.next()) {
presentPageResult.append("<td>"+bookPic+"</td>");
presentPageResult.append("<td>"+bookNameLink+"</td>");
presentPageResult.append("<td>"+author+"</td>");
presentPageResult.append("<td>"+publish+"</td>");
presentPageResult.append("<td>"+director+"</td>");
String sa="use userisbn";
String sb="select * from "+logname+"isbn where ISBN = '"+bookISBN+"'";
sqla=con.createStatement();
sqla.executeUpdate(sa);
sqlb=con.createStatement();
rd=sqlb.executeQuery(sb);
if (rd.next()) {
presentPageResult.append("<td>已收藏</td>");
} else {
String buy="<a href=\"LookPurchase.jsp?buyISBN="+bookISBN+"\">收藏</a>";
presentPageResult.append("<td>"+buy+"</td>");
}
presentPageResult.append("</tr>");
}
boolean boo=rowSet.next();
if(boo==false) break;
}
presentPageResult.append("</table>");
jspContext.setAttribute("giveResult",presentPageResult);
con.close();
}
catch(SQLException exp) {
jspContext.setAttribute("showPage",new Integer(1));
jspContext.setAttribute("pageAllCount",new Integer(1));
jspContext.setAttribute("giveResult",new StringBuffer(""+exp));
}
%>