都说放假的前一天是黎明前的黑暗,我觉得能实实在在的学到点东西才是最重要的,今天就对这个小后台用到得东西,学到的东西进行一下总结:
1.
简单的一个js跳转,实现一个友好的页面跳转
2. 把相应的页面里面的信息传入到js里面,然后在现实出来: 写入的代码:name是一个传值的参数,count是要得到的参数: 在js里面接收jsp里面传来的值:
3.
用js控制div,创建一个form表单:
4.
在信息处理里面加上回收站功能:在数据库里面新添加一个recycle的字段,让他初始值为0,然后放入回收站的时候update为1,在回收站放回来的时候update为0:
放入回收站:sql = "update information set recycle = '1' where id ="+id+"";
还原回列表:sql = "update information set recycle = '0' where id ="+id+"";
5.
简单的用了html的一个frame框架:
----------------------------frame.jsp---------------------------------------
-----------------------------left.jsp---------------------------------------
<li><ahref="search.jsp"target="main">校友查询</a></li>main是让他在main页面里面翻页
-----------------------------main.jsp---------------------------------------
main页面里面对应的信息内容
-----------------------------buttom.jsp-------------------------------------
页面底部的信息,这样可以实现在一个框架,在框架里面实现页面的跳转
6.
实现js弹框退出系统:
js:
---------------------------------logout.jsp--------------------------------------
</script>//注销session并且跳转到登陆页面
7.
用jsp实现验证码:
-----------------------------------Random.jsp-----------------------------------------
8.
在模糊查找的接受处理页面一些问题,要实现的功能就是在预先写好的表单里面对于任意为空的情况都可以做出处理,然后把表单部位空的数据,作为数据库sql语句的查询标准,:
在递交表单过来以后,首先进行两步分析,如果全部为空,就直接返回,打印请输入要查询的信息;如果有其中的任何几个不为空,那么执行sql语句的拼接:假设就有四个字段,id,name,password,sex,先把sql语句赋值为下:
9.
实现简单的分页显示:
10.
在输出表格的时候,表格里面有数据或是没有没有数据的颜色的样式是不一样的,不知道具体是哪里的属性处理错误,这样以后再每一个表格数据一个 这样以后无论他的表格里面有没有数据,他表格的颜色和样式都按照有数据输出的样式处理了。
11.
jxl实现excel导入数据库:
首先是把excel文档上传到服务器,在通过jxl吧文档里的数据读取出来,加以处理,然后导入数据库,最难的是处理excel文档内,对excel的格式要求是必须一定的,不然导入的数据和字段会出现诡异的情况: (3)用PreparedStatement把数据读到数据库里。
<scriptlanguage="javascript">
alert("添加新用户成功");
this.location='addAdministrator.jsp';
</script>
<%
out.write("<scriptlanguage="+"'"+"javascript"+"'"+">varname="+"'"+count+"'"+";</script>");
%>
<script language="javascript">
alert("一共操作了"+name+"条数据");
this.location='*.jsp';
</script>
这样就简单的把jsp里面的数据打印到js的弹出框里面了 <form name="main">
<input type="button" onClick="cd();" name="upload"id="upload">
</form>
<!--通过点击button按钮激活js,实现对div的操作:-->
<script type="text/javascript">
function cd(){
document.getElementByIdx_x_x_x_x_x("inneralert").innerHTML="<span>正在上传,请稍等<br><br><imgsrc='location.jsp'/></span>";//在html里面是""但是在js提交里面是是'因为外面是""了。
document.getElementByIdx_x_x_x_x_x("upload").disabled="true";//控制重复提交
document.main.submit();
}
</script>
<!--在div相应的属性里面写上inneralert,这样在点击button的时候,就会把原有的div替换为上面的<span>-->
<div id="inneralert">
</div>
这样原来div里面的东西就全部替换为上面的里面的属性了 <frameset rows="16%,79%,*"cols="*" frameborder="1"bordercolor="#0099CC">
<frame src="head.jsp" noresize="noresize"scrolling="no">
<frameset rows="*" cols="12%,88%">
<frame src="left.jsp"noresize="noresize" scrolling="no">
<frame src="main.jsp"name="main">
</frameset>
<frame src="bottom.jsp" noresize="noresize"scrolling="no" >
</frameset>
<a href="#"onclick="exit();"><font size="-1"color="#FFFFFF">安全退出</font></a>
<script language="javascipt">
function exit(){
varbool=confirm("您确认要退出系统吗?");
if(bool){
window.location.href="logout.jsp";
}
else{
returnfalse;
}
}
</script>
<%@pagecontentType="text/html;charset=gb2312"%>
<%
session.invalidate() ;
%>
<scriptlanguage="javascript">
top.location='login.jsp';
<%@ page contentType="image/jpeg;charset=gbk"%>
<%@ page import="java.awt.*,java.awt.image.*"%>
<%@ page import="java.util.*,javax.imageio.*"%>
<%!
//产生随机颜色函数getRandColor
ColorgetRandColor(int fc,int bc){
Random r =new Random();
if(fc>255) fc = 255;
if(bc>255) bc = 255;
int red = fc+ r.nextInt(bc-fc); //红
int green =fc + r.nextInt(bc-fc); //绿
int blue =fc + r.nextInt(bc-fc); //蓝
return newColor(red,green,blue);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Exprires",0);
//创建随机数
Random r = new Random();
//在内存中创建图像,宽度为width,高度为height
int width=60, height=19;
BufferedImage pic = newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文环境
Graphics gc = pic.getGraphics();
//设定背景色并进行填充
gc.setColor(getRandColor(200,250));
gc.fillRect(0, 0, width, height);
//设定图形上下位环境字体
gc.setFont(new Font("Times new Roman",Font.PLAIN,18));
//随机产生200条干扰直线,使图像中的认证码不易被其他分析程序探测到
gc.setColor(getRandColor(160,200));
for(int i=0;i<200;i++){
intx1=r.nextInt(width);
inty1=r.nextInt(height);
intx2=r.nextInt(15);
inty2=r.nextInt(15);
gc.drawLine(x1,y1,x1+x2,y1+y2);
}
//随机产生100条干扰点,使图像中的验证码不易被其他分析程序探测到
gc.setColor(getRandColor(120,240));
for(int i=0;i<100;i++){
intx=r.nextInt(width);
inty=r.nextInt(height);
gc.drawLine(x,y,0,0);
}
//随机产生4位数字的验证码
String RS="";
String rn="";
for(int i=0;i<4;i++){
//产生10以内的随机数
rn = String.valueOf(r.nextInt(10));
RS+=rn;
//将认证码用drawString函数显示到图像里
gc.setColor(newColor(20+r.nextInt(20),20+r.nextInt(110),20+r.nextInt(110)));
gc.drawString(rn,13*i+6,16);
}
//释放图形上下文环境
gc.dispose();
//将认证码RS存入SESSION中共享
session.setAttribute("random",RS);
//输出生成后的验证码图像到页面
ImageIO.write(pic, "JPEG",response.getOutputStream());
out.clear();
out =pageContext.pushBody();
%>
sql= "select id,name,password,sex from information where";
然后对接受的参数进行判断并且拼接:
if (name.length()> 0) {
sql = Excesql + " name = '" + name + "'and";
}
if (password.length()> 0) {
sql = sql + " password = '"+ password + "'and";
}
if (sex.length()> 0) {
sql = sql + " sex = '" + sex + "'";
}
这样之后可以把不为空的语气拼接到sql语句上去,但是有两种情况:第一种是sex为空,这样就导致了sql语句最后打印出来多了一个and,第二种是sex不为空,这样就没有了最后一个and,可以正常的执行。所以要对有and的sql语句进行处理:
if(sql.lastIndexOf( " and")==sql.length()-4)
sql=sql.substring(0,sql.lastIndexOf("and")) ;
if(sql.lastIndexOf( " where")==sql.length()-6)
sql=sql.substring(0,sql.lastIndexOf("where")) ;
这样处理以后如果后面是and就直接把and去掉了,如果不是不会造成影响<%@ page contentType="text/html; charset=gb2312"%>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%
//驱动程序名,比较旧了,如果你用mysql5,自己改。
String driverName="com.mysql.jdbc.Driver";
String userName="root";//数据库用户名
String userPasswd="java";//密码
String dbName="alumni_record";//数据库名
String tableName="information"; //表名
//连接字符串
Stringurl="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName(driverName).newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
//每页显示记录数
int PageSize = 15;
int StartRow = 0; //开始显示记录的编号
int PageNo=0;//需要显示的页数
int CounterStart=0;//每页页码的初始值
int CounterEnd=0;//显示页码的最大值
int RecordCount=0;//总记录数;
int MaxPage=0;//总页数
int PrevStart=0;//前一页
int NextPage=0;//下一页
int LastRec=0;
int LastStartRecord=0;//最后一页开始显示记录的编号
//获取需要显示的页数,由用户提交
if(request.getParameter("PageNo")==null){ //如果为空,则表示第1页
if(StartRow == 0){
PageNo = StartRow + 1; //设定为1
}
}else{
PageNo =Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数
StartRow = (PageNo - 1) * PageSize;//获得开始显示的记录编号
}
//因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示
//一定数量的页面链接
//设置显示页码的初始值!!
if(PageNo % PageSize == 0){
CounterStart = PageNo -(PageSize - 1);
}else{
CounterStart = PageNo -(PageNo % PageSize) + 1;
}
CounterEnd = CounterStart + (PageSize - 1);
%>
<%
//获取总记录数
ResultSet rs = statement.executeQuery("select count(*) frominformation where ......);//这两个sql语句必须是两个分开的语句不然会报错,不能把他们一起,同时要保证他们的where的限定条件是一致的。
rs.next();
RecordCount = rs.getInt(1);
rs = statement.executeQuery("select ...... FROM information where....... ORDER BY id DESC LIMIT "
+StartRow+", "+PageSize);
//获取总页数
MaxPage = RecordCount % PageSize;
if(RecordCount % PageSize == 0){
MaxPage = RecordCount / PageSize;
}else{
MaxPage =RecordCount/PageSize+1;
}
%>
<table>
<tbody>
<tr>
<td class="addcolor" style="width:200px;">管理操作</td>
<td class="addcolor" style="width:200px;">姓名</td>
</tr>
<%
int i = 1;
while (rs.next()) {
int bil = i + (PageNo-1)*PageSize;
id = rs.getInt(1) ;
%>
<tr>
<td>
<IMG alt=信息还原 src="../css/admin_data/retry.png"><ahref="informationReturn.jsp?id=<%=id%>">信息还原</a>┆
<IMG alt=彻底删除 src="../css/admin_data/Com_delete.gif"><ahref="informationDelete.jsp?id=<%=id%>">彻底删除</a>
</td>
<td class="NormalFieldTwo"> <%=rs.getString(1)%></td>
</tr>
<%
i++;
}%>
</tbody>
</table>
<br>
<table width="100%" border="0"class="InternalHeader">
<tr>
<td>
<divalign="center">
<%
out.print("<font size=4>");
//显示第一页或者前一页的链接
//如果当前页不是第1页,则显示第一页和前一页的链接
if(PageNo != 1){
PrevStart =PageNo - 1;
out.print("<ahref=recycle.jsp?PageNo=1>第一页</a>: ");
out.print("<ahref=recycle.jsp?PageNo="+PrevStart+">前一页</a>");
}
out.print("[");
//打印需要显示的页码
for(intc=CounterStart;c<=CounterEnd;c++){
if(c<MaxPage){
if(c == PageNo){
if(c %PageSize == 0){
out.print(c);
}else{
out.print(c+" ,");
}
}else if(c % PageSize == 0){
out.print("<ahref=recycle.jsp?PageNo="+c+">"+c+"</a>");
}else{
out.print("<ahref=recycle.jsp?PageNo="+c+">"+c+"</a>,");
}
}else{
if(PageNo == MaxPage){
out.print(c);
break;
}else{
out.print("<ahref=recycle.jsp?PageNo="+c+">"+c+"</a>");
break;
}
}
}
out.print("]");;
if(PageNo < MaxPage){ //如果当前页不是最后一页,则显示下一页链接
NextPage =PageNo + 1;
out.print("<ahref=recycle.jsp?PageNo="+NextPage+">下一页</a>");
}
//同时如果当前页不是最后一页,要显示最后一页的链接
if(PageNo < MaxPage){
LastRec = RecordCount %PageSize;
if(LastRec == 0){
LastStartRecord = RecordCount - PageSize;
}
else{
LastStartRecord = RecordCount - LastRec;
}
out.print(":");
out.print("<ahref=recycle.jsp?PageNo="+MaxPage+">最后一页</a>");
}
out.print("</font>");
%>
</div>
</td>
</tr>
</table>
<%
rs.close();
statement.close();
connection.close();
}
%>
</center>
首先是把excel文档上传到服务器,在通过jxl吧文档里的数据读取出来,加以处理,然后导入数据库,最难的是处理excel文档内,对excel的格式要求是必须一定的,不然导入的数据和字段会出现诡异的情况:
InputStream is = new FileInputStream(savepath+filename);
Workbook wb = null;
wb = Workbook.getWorkbook(is);
Sheet sh = wb.getSheet(0);
Vector v = new Vector();//存储excel文档内数据,
....................
for (int k = 0; k < sh.getRows(); k++)//逐行读取数据
{ //一共8列,每列根据需要进行了调整,并放如Vector里,
v.add(ca.toLowerCase());
v.add(sh.getCell(pr-1, k).getContents());//
v.add(sh.getCell(ra-1, k).getContents());
v.add(ccode);
v.add(cname.toUpperCase());
v.add(sh.getCell(ci-1, k).getContents().toUpperCase());
v.add(ed+"000000");
v.add(net.toUpperCase());
}
String sql="insert into tablename values(?,?,?,?,?,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
for (int j = 0; j < v.size(); j=j+8){
int index = 1;
for (int i = 0; i < 8; i++){
String strc=v.get(i+j).toString().trim();
pstmt.setString(index++,strc);
}
//out.println("<br>");
pstmt.executeUpdate();
}