Servlet程序设计.docx
《Servlet程序设计.docx》由会员分享,可在线阅读,更多相关《Servlet程序设计.docx(46页珍藏版)》请在冰点文库上搜索。
Servlet程序设计
*********大学信息工程与自动化学院学生实验报告
(2012—2013学年第一学期)
课程名称:
JAVAEE技术开课实验室:
信自楼4442012年11月29日
年级、专业、班
学号
姓名
成绩
实验项目名称
实验二Servlet程序设计
指导教师
教师评语
教师签名:
年月日
一、实验目的
通过上机,熟练掌握servlet编程、过滤器、监听器的编程。
二、内容及要求
1、上机内容:
●编写index.jsp,里面包含注册、显示数据清单、写入图片、显示图片的连接。
●当用户选择注册时,首先进行客户端ip地址是否是黑名单的检测,如果不是则转到注册页面;
●在显示所有的数据清单的页面中增加一个链接,仿照例题编写输出为EXCEL的servlet,点击时链接时执行它。
●实现给数据表中的photo列写入图片,图片文件直接放在服务器上。
●实现按输入的编号显示对应的图片。
●实现登录,在登录界面中生成验证码(验证码不出现数字4)。
●登录成功则转到main.jsp,显示网站的在线用户人数、当前用户、点击率、在线用户列表。
●通过过滤器实现登录过滤检查,不允许用户直接请求main等其他页面;通过=过滤器给所有的页面底部加上“昆明理工大学计算机系”+班级+学号+姓名
●用监听器实现网站所有网页的访问次数累计,在线用户数统计、在现用户列表更新。
三、步骤及具体实施
1、简要描述程序的开发流程、文件部署截图、及各种配置:
这一程序是相当于学校后台管理的内容,当一个管理者登录她的信息后,可以在整个系统里面增加学生信息,如学号、姓名、出生日期、照片、个人介绍等,也可以查看某一学生的全部信息等。
开发项目的文件部署如下:
1.创建一新项目为:
Learning所有的文件如下图:
2.在Learning中每个serlvet、jsp和页面的功能如下:
check.java是当管理者点查看学生信息时,用来显示学生信息的,即用来定义输出格式的。
CheckCodeGet.java是用来生成验证码的。
checkphoto.java当管理者查看学生信息时,用来检验学生图片。
LoginAction.java用来验证当用户登录时,输入的用户名和密码。
zhuce.java用来取得用户输入的信息,并插入到数据库中的servlet。
login.jsp:
可以让用户输入登录的信息。
retire.jsp:
可以让用户选择退出。
search.jsp:
让管理都选择查看某一学生的信息。
STUMAN.jsp:
管理都登录成功后,可以选择的操作。
success.jsp:
注册成功后,可选择的操作。
zhuce.jsp:
可以让用户注册学生信息的页面。
3.除以上外,本次项目离不开数据库,本次项目用SQLserver2008来存储和管理用户所有的信息。
建三个表students和EMP。
创建好的数据库如下图:
用户EMP表如下:
学生注册表students如下:
2、程序代码
1.check.java:
packagezonghe;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
//importcom.jspsmart.upload.SmartUpload;
@SuppressWarnings("serial")
publicclasscheckextendsHttpServlet
{
privateConnectioncn=null;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
Stringstuid=request.getParameter("stuid");
System.out.println(stuid);
Stringsql="select*fromSTUDENTSwherestuid=?
";
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
PrintWriterout=response.getWriter();
out.println("");
out.println("
学生信息");
out.println("
");
try
{
PreparedStatementps=cn.prepareStatement(sql);
ps.setString(1,stuid);
ResultSetrs=ps.executeQuery();
out.println("
");out.println("
学生信息列表
");out.println(""+"返回首页"+""+" "+"退出"+""+" "+"继续查看"+"");
out.println("");
out.println("
");out.println("
姓名 | 性别 | 学号 | 出生日期 | 地址 | 简介 | 照片 | ");out.println("
");while(rs.next())
{
out.print("
");out.println("
"+rs.getString("name")+" | ");out.println("
"+rs.getString("sex")+" | ");out.println("
"+rs.getString("stuid")+" | ");out.println("
"+rs.getString("date")+" | ");out.println("
"+rs.getString("address")+" | ");out.println("
"+rs.getString("introduce")+" | ");request.getSession().setAttribute("stuid",stuid);
//out.println("
//localhost: 8080/zonghe/images'> | ");//out.println("
"+rs.getString("images")+" | ");//out.println(mySmartUpload.getRequest().getParameter("photo")+" ");
out.println("
| ");out.print("
");}
rs.close();
ps.close();
out.println("");
out.println("
");
}
catch(Exceptione)
{
System.out.println("遍历记录错误:
"+e.getMessage());
}
out.println("");
out.println("");
out.flush();
out.close();
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
publicvoidinit()throwsServletException{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");cn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=cityoa","sa","123456");
}
catch(Exceptione)
{
System.out.println("取得数据库连接错误:
"+e.getMessage());
}
}
publicvoiddestroy()
{
super.destroy();
try
{
cn.close();
}
catch(Exceptione)
{
System.out.println("关闭数据库连接错误:
"+e.getMessage());
}
}
}
2.CheckCodeGet.java:
packagezonghe;
importjava.io.IOException;
//importjava.io.PrintWriter;
importjava.awt.*;
importjava.awt.image.*;
importjava.util.*;
//importjavax.imageio.*;
importjavax.servlet.ServletConfig;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
//生成验证码
publicclassCheckCodeGetextendsHttpServlet
{
privatestaticfinallongserialVersionUID=1L;
privatefinalintTYPE_NUMBER=0;
privatefinalintTYPE_LETTER=1;
privatefinalintTYPE_MULTIPLE=2;
privateintwidth;
privateintheight;
privateintcount;
//private
inttype;
privateStringvalidate_code;
privateRandomrandom;
privateFontfont;
privateintline;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
response.setContentType("image/jpeg");
StringreqCount=request.getParameter("count");
StringreqWidth=request.getParameter("width");
StringreqHeight=request.getParameter("height");
StringreqType=request.getParameter("type");
if(reqCount!
=null&&reqCount!
="")this.count=Integer.parseInt(reqCount);
if(reqWidth!
=null&&reqWidth!
="")this.width=Integer.parseInt(reqWidth);
if(reqHeight!
=null&&reqHeight!
="")this.height=Integer.parseInt(reqHeight);
if(reqType!
=null&&reqType!
="")this.type=Integer.parseInt(reqType);
font=newFont("CourierNew",Font.BOLD,width/count);
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsg=image.getGraphics();
g.setColor(getRandColor(200,250));
g.fillRect(0,0,width,height);
g.setColor(getRandColor(160,200));
for(inti=0;i{
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(12);
intyl=random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
g.setFont(font);
validate_code=getValidateCode(count,1);
request.getSession().setAttribute("validate_code",validate_code);
for(inti=0;i{
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
intx=(int)(width/count)*i;
inty=(int)((height+font.getSize())/2)-5;
g.drawString(String.valueOf(validate_code.charAt(i)),x,y);
}
g.dispose();
//ImageIO.write(image,"JPEG",response.getOutputStream());
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(response.getOutputStream());
encoder.encode(image);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
doGet(request,response);
}
publicvoidinit(ServletConfigconfig)throwsServletException
{
super.init(config);
width=150;
height=50;
count=4;
type=TYPE_NUMBER;
random=newRandom();
line=200;
}
//
privateColorgetRandColor(intfrom,intto)
{
Randomrandom=newRandom();
if(to>255)from=255;
if(to>255)to=255;
intrang=Math.abs(to-from);
intr=from+random.nextInt(rang);
intg=from+random.nextInt(rang);
intb=from+random.nextInt(rang);
returnnewColor(r,g,b);
}
//取得验证码字符串
privateStringgetValidateCode(intsize,inttype)
{
StringBuffervalidate_code=newStringBuffer();
for(inti=0;i{
validate_code.append(getOneChar(type));
}
returnvalidate_code.toString();
}
//根据验证码类型取得实际验证字符
privateStringgetOneChar(inttype)
{
Stringresult=null;
switch(type)
{
caseTYPE_NUMBER:
result=String.valueOf(random.nextInt(10));
break;
caseTYPE_LETTER:
result=String.valueOf((char)(random.nextInt(26)+65));
break;
caseTYPE_MULTIPLE:
if(random.nextBoolean())
{
result=String.valueOf(random.nextInt(10));
}
else
{
result=String.valueOf((char)(random.nextInt(26)+65));
}
break;
default:
result=null;
break;
}
if(result==null)
{
thrownewNullPointerException("获取验证码出错");
}
returnresult;
}
}
3.checkphoto.java:
packagezonghe;
importjava.io.IOException;
//importjava.io.InputStream;
//importjava.io.OutputStream;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
//importjavax.servlet.http.HttpSession;
@SuppressWarnings("serial")
publicclasscheckphotoextendsHttpServlet
{
privateConnectioncn=null;
//初始化方法
publicvoidinit()throwsServletException
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
cn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=cityoa","sa","123456");
}
catch(Exceptione)
{
System.out.println("取得数据库连接错误:
"+e.getMessage());
}
}
//GET处理
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
//Ht