JAVA课程设计模块设计与编程示例Word格式.docx
《JAVA课程设计模块设计与编程示例Word格式.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计模块设计与编程示例Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
Classinfo>
getAll();
fenyeList(intpage);
intfindCount();
}
第四步.编写业务层.业务层用于业务数据的处理并完成相应的“业务层”功能。
本例中的业务层是ClassinfoServiceImp.java。
业务层编写完后以提供web层调用。
第五步.编写表示层(web层).表示层是采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据操作功能,如增加、删除、查询、修改等。
本例Web层程序是ClassinfoServlet.java。
下面是核心代码解释:
因为在修改时要解决中文乱码问题,所以先设置request的编码格式。
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("
UTF-8"
);
Stringmethod=request.getParameter("
method"
if(method.equals("
add"
)){
add(request,response);
}elseif(method.equals("
delete"
delete(request,response);
listall"
listall(request,response);
update"
update(request,response);
fenye"
fenyelistall(request,response);
}
}
在增删改查中稍有困难的是删除和修改在一块实现。
主要代码如下。
<
scripttype="
text/javascript"
>
functionCheckAll(elementsA,elementsB){
for(i=0;
i<
elementsA.length;
i++){
elementsA[i].checked=true;
if(elementsB.checked==false){
for(j=0;
j<
j++){
elementsA[j].checked=false;
}
//判断用户是否选择了要删除的记录,如果是,则提示“是否删除”;
否则提示“请选择要删除的记录”
functioncheckdel(delid,formname){
varflag=false;
delid.length;
if(delid[i].checked){
flag=true;
break;
if(!
flag){
alert("
请选择要删除的记录!
"
returnfalse;
}else{
if(confirm("
确定要删除吗?
)){
formname.submit();
/script>
formaction="
${pageContext.request.contextPath}/ClassinfoServlet?
method=delete"
method="
post"
name="
frm"
tableframe="
border"
width="
60%"
<
tr>
<
td>
班级编号<
/td>
年级编号<
班级名称<
删除<
修改<
/tr>
c:
forEachvar="
c"
items="
${Classinfos}"
${c.classID}<
${c.gradeID}<
${c.className}<
td>
inputname="
delid"
type="
checkbox"
class="
noborder"
value="
${c.classID}"
ahref="
${pageContext.request.contextPath}/ChangeServlet?
classID=${c.classID}&
kind=banji"
target="
right"
/a>
/c:
forEach>
/table>
footer>
onClick="
CheckAll(frm.delid,frm.checkbox)"
[全选/反选][<
a
style="
color:
red;
cursor:
pointer;
onClick="
checkdel(frm.delid,frm)"
]
divid="
ch"
style="
display:
none"
0"
/div>
divwidth="
98%"
align="
center"
padding-top:
10px;
${bar}
!
--层ch用于放置隐藏的checkbox控件,因为当表单中只是一个checkbox控件时,应用javascript获得其length属性值为undefine-->
/footer>
/form>
注:
一个jsp里可以有多个表单。
本例中还有一个值得学习的地方是把数据分页。
用mysql和sqlserver数据库实现的方式是不同的。
本例还有两个filter类。
CheckLoginFilter.java是用来阻止没有登录的用户进入后台管理。
后来发现一个问题,就是在登录后,然后退出,再在浏览器里访问main.jsp还是可以进入后台,然后创建一个Nocachefilter.java来阻止浏览器缓存。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
附录:
1.数据库连接对象(Dbconnection.java)
packagestu.utils;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importorg.junit.Test;
publicclassDbconnection{
protectedstaticStringdbClassName="
com.microsoft.sqlserver.jdbc.SQLServerDriver"
;
protectedstaticStringdbUrl="
jdbc:
sqlserver:
//127.0.0.1:
1433;
+"
DatabaseName=DB_Student"
protectedstaticStringdbUser="
sa"
protectedstaticStringdbPwd="
1234"
publicConnectionconnect=null;
publicStatementstmt=null;
publicResultSetrs=null;
@Test
publicConnectiongetConnection(){
Connectionconn=null;
try{
if(conn==null){
Class.forName(dbClassName).newInstance();
}catch(Exceptionee){
//System.exit(0);
conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
if(conn==null)
System.out.println("
数据库名称错误"
Statementst=conn.createStatement();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
System.out.println("
数据库连接错误"
returnconn;
publicResultSetexecuteQuery(Stringsql){
connect=getConnection();
stmt=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
System.err.println(e.getMessage());
returnrs;
//执行添加
publicintexecuteUpdate(Stringsql){
intresult=0;
try{
connect=getConnection();
stmt=connect.createStatement();
result=stmt.executeUpdate(sql);
//System.out.print("
添加成功"
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
//e.printStackTrace();
result=0;
stmt.close();
e.printStackTrace();
returnresult;
publicvoidclose(){
if(rs!
=null)
rs.close();
if(stmt!
stmt.close();
if(connect!
connect.close();
2.数据实体JavaBean(Classinfo.java)
packagestu.domain;
publicclassClassinfo{
publicstaticfinalintPAGE_SIZE=2;
privateStringclassID;
privateStringgradeID;
privateStringclassName;
publicStringgetClassID(){
returnclassID;
publicvoidsetClassID(StringclassID){
this.classID=classID;
publicStringgetGradeID(){
returngradeID;
publicvoidsetGradeID(StringgradeID){
this.gradeID=gradeID;
publicStringgetClassName(){
returnclassName;
publicvoidsetClassName(StringclassName){
this.className=className;
3.抽象数据接口(ClassinfoDao.java)
packagestu.dao;
importjava.util.List;
importstu.domain.Classinfo;
4.数据访问层(Classinfoimp.java):
实现了ClassinfoDao接口
packagestu.dao.imp;
importjava.sql.PreparedStatement;
importjava.util.ArrayList;
importstu.dao.ClassinfoDao;
importstu.domain.User;
importstu.utils.Dbconnection;
publicclassClassinfoimpimplementsClassinfoDao{
publicvoidadd(Classinfoclassinfo){
Dbconnectionconn=newDbconnection();
Stringsql="
Insertinto[tb_classinfo]values('
+classinfo.getClassID()+"
'
'
+classinfo.getGradeID()+"
+classinfo.getClassName()+"
)"
conn.executeUpdate(sql);
conn.close();
publicvoiddelete(StringclassID){
deletetb_classinfowhereclassID='
+classID+"
publicvoiduptate(StringclassID,StringgradeID,StringclassName){
updatetb_classinfosetgradeID='
+gradeID+"
className='
+className+"
whereclassID='
publicClassinfofind(StringclassID){
Classinfocl=newClassinfo();
select*fromtb_classinfowhereclassID='
ResultSetrs=conn.executeQuery(sql);
while(rs.next()){
cl.setClassID(rs.getString
(1));
cl.setGradeID(rs.getString
(2));
cl.setClassName(rs.getString(3));
cl.setClassID(classID);
returncl;
publicList<
getAll(){
select*fromtb_classinfo"
List<
list=newArrayList<
();
Classinfocl=newClassinfo();
list.add(cl);
returnlist;
//SELECTTOP30*