java servlet中的一些基本内容的操作

LZ最近在学习Java WEB的servlet,其中也碰到过一些问题,非常典型而且又实用,当然也是一些非常简单的问题,我想在这里拿来分享一些,也当做前一阶段学习servlet的总结。

我以一个简单的信息查询系统为例,来描述。

要实现的功能就是从数据库中调用数据,然后在前台根据用户输入的ID号,从后台服务器中调用数据库中对应的ID号,然后根据这个号码从数据库中调出相应的用户打卡信息。

这个设计我根据MVC模式,来搞:即为:module、view、control三权分立。

首先一个是connDB类,这个类实现的是连接数据库,也就是module模块,分立开来。

具体的代码如下:

import java.sql.Connection;
import java.sql.DriverManager;


//从数据库中得到连接
public class ConnDB 
{
private Connection ct = null;
public Connection getConn()
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=spdb","sa","123456");
}
catch(Exception e)
{
e.printStackTrace();
}
return ct;
}
}

//以后每次调用数据库,直接先调用这段代码

第二部分是数据库中的数据表示形式代码,即Userbean类。

此类表示的是数据库中的数据的表示形式:

//这是一个userBean,和user表映射
//它的一个对象对应user表的一条记录
import java.sql.*;


public class Userbean 
{
private int USERID;
private String CHECKTIME;
private String CHECKTYPE;
int getUserId()
{
return this.USERID;
}
void setUserId(int userid)
{
this.USERID = userid;
}
String getChecktime()
{
return this.CHECKTIME;
}
void setChecktime(String Checktime)
{
this.CHECKTIME = Checktime;
}
String getChecktype()
{
return this.CHECKTYPE;
}
void setChecktype(String Checktype)
{
this.CHECKTYPE = Checktype;
}
public String toString()             //重写toString方法,才能正确显示
{
return (this.USERID + " " + this.CHECKTIME + " " + this.CHECKTYPE );        //注意这里的toString方法需要重写,因为不写,那么再调用这个类的方法时候,会出现显示的是哈希值
}
}

接下来是首页,也就是登录界面部分:

这一部分就是典型地在servlet中嵌套html代码,但是这正是servlet中尴尬的部分,显示界面不方便

public class Search extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try
{
//中文乱码
res.setContentType("text/html;charset=gbk");
PrintWriter pw = res.getWriter();
pw.println("<html>");
pw.println("<body>");
pw.println("<body bgcolor=#CED3FF>");
pw.println("<hr><center>");
pw.println("<h1>查找用户的考勤情况</h1>");
pw.println("<form action=SearchCL method=post>");        //这里是重点,这个是一个表单,也就是需要提交的表单,用post方式,而且按下submit按钮之后是返回到SearchCL页面
pw.println("用户的ID号:<input type=text name=userid><br>");                 //注意这里的name千万别写错,这里的name是用来表示某个属性
pw.println("<input type=submit value=go><br>");
pw.println("</form>");
//pw.println("<center><hr><img src = images>");              //这里是放置照片的,注意:放照片的表示方式
pw.println("</body>");
pw.println("</html>");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}

然后是一个跳转页面,中间这个跳转页面其实我们看不到,因为是在后台帮我们用来处理的,也就是用来处理我们输入的内容后,需要重定向的页面,注意这里可以设置session和cookie,而且这两样东西都特别重要,可以帮助我们能够不用再次登录即可访问其他页面。

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class SearchCL extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
try
{
String u = req.getParameter("userid");
HttpSession hs = req.getSession(true);     //创建session
       //hs.setMaxInactiveInterval(20);                      //更改session的时间,以秒为单位
       //hs.setAttribute("pass", "ok");  
       hs.setAttribute("Userid", u);                       //这里的session其实一种表格的形式

   res.sendRedirect("wel");                           //跳转的页面,在后面的wel页面中可以读取到这个session,然后就可以再次登录其他页面
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}


这里有一个UserbeanCL的类,这个类的作用是用来将Userbean这个类来处理

public class UserbeanCL extends HttpServlet
{
private Connection ct = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private int pageCount = 0;
public ArrayList getResultByPage(int pageNow,int pageSize,int id)
{
int rowCount = 0;   //共有几条记录
ArrayList al = new ArrayList();
try
{
ConnDB conndb = new ConnDB();        //连接数据库
   ct = conndb.getConn();   //封装
   //创建statement
   ps = ct.prepareStatement("select * from CHECKINOUT where USERID = '" + id + "'");   //执行在数据库中一共有几条记录
   
   rs = ps.executeQuery(); 
   //System.out.println(rs);
   while(rs.next())
   {
   //rowCount = rs.getInt("USERID");        
   rowCount = rowCount + 1;                       //得到在这个数据库中是某个id号的用户的个数
   }
   //System.out.println(rowCount);
   if(rowCount % pageSize == 0)                       //这是用来分页用的,这里的pageSize表示的是一页想要有多少页面
   pageCount = rowCount / pageSize;
   else
   pageCount = (rowCount / pageSize) + 1;           //若不能取整数,则加1
   //System.out.println(pageCount);
   ps = ct.prepareStatement("select top " + pageSize + " * from  CHECKINOUT where USERID =  " + id + "and CHECKTIME not in (select top " + pageSize*(pageNow - 1) + " CHECKTIME from CHECKINOUT where USERID = " + id + ""+ ")");       //这个sql语句的作用是用来从数据库中读取出相关的内容

   rs = ps.executeQuery();
   int i = 0;
   while(rs.next())             //这里是关键,这儿的用前面的数据库表格的形式定义一个Userbean类来放置取到的数据
   {
    //i = i + 1;
    //System.out.println(i);
   //将rs中的每一条记录封装到ArrayList中
   Userbean ub = new Userbean();
   ub.setUserId(rs.getInt(1));                          //调用Userbean中的方法,然后就能够得到相关的数据
   ub.setChecktime(rs.getString(2));
   ub.setChecktype(rs.getString(3));
   //ub.setEmail(rs.getString(4));
   //ub.setGrade(rs.getInt(5));
   
   al.add(ub);  //将ub放入到ArrayList中                 //这里用一个ArrayList来存储刚刚得到的一个Userbean类,注意这里的ArrayList中放置的是Userbean类。
   
   }
   /*Iterator it = al.iterator();
   while(it.hasNext())
   {
    System.out.println(it.next().toString());
   }*/

}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
rs.close();
ps.close();
ct.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
return al;
}

public int getPageCount()
{
return this.pageCount;
}
}


后面就是一个wel的界面,这个是用来显示进入的页面

public class wel extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
res.setContentType("text/html;charset=gbk");
res.setCharacterEncoding("GBK");

Connection ct = null;
PreparedStatement ps = null;
ResultSet rs = null;

HttpSession hs = req.getSession(true);               //设置session
String str = (String)hs.getAttribute("Userid");      //从session中取出名字,这个就是用来得到session的值,可以让用户下次不用输入密码等信息就可以直接调转到相应的界面


//String str = req.getParameter("Userid");
int id = Integer.parseInt(str);
try
{

int j = id;
PrintWriter pw = res.getWriter();
int pageSize = 10;//一页显示几条记录
int pageNow = 1;//希望显示第几页

String sPageNow = req.getParameter("pageNowok");
       if(sPageNow != null)
       {
        pageNow = Integer.parseInt(sPageNow);
       }
   
       //调用userbean处理
       UserbeanCL ubc = new UserbeanCL();
       ArrayList all = ubc.getResultByPage(pageNow, pageSize,j);
       pw.println("<body bgcolor=#CED3FF>");
pw.println("<hr><center>");
pw.println("<table border = 1>");
pw.println("<tr bgcolor=pink><th>userid</th><th>checktime</th><th>checktype</th></tr>");
String[] mycol = {"pink","silver"};
       
for(int i = 0; i < all.size(); i++)
{
//使得表中的行能够交替变化颜色,定义一个数组来表示
Userbean ub1 = (Userbean)all.get(i);
pw.println("<tr bgcolor=" + mycol[i%2] + ">");  //利用模运算在数组的下标中来实现
pw.println("<td>"+ ub1.getUserId()+"</td>");
pw.println("<td>"+ ub1.getChecktime()+"</td>");
pw.println("<td>"+ ub1.getChecktype()+"</td>");
//pw.println("<td><a href = Update?userId=" + ub.getUserId() + "&username=" + ub.getUsername() + "&passwd=" + ub.getPasswd() + "&email=" + ub.getEmail() + "&grade=" + ub.getGrade() + ">修改用户</td>");
//pw.println("<td><a href = DelUserCL?userId=" + ub.getUserId() + " οnclick=\"return window.confirm('确认删除')\">删除用户</a></td>");
//上面的onclick与之前的+有空格,注意:这个onclick是一个出发点击的事件
pw.println("</tr>");
}
/*while(rs.next())
{
Userbean ub = new Userbean();                    //从Userbean中取出相应的内容

//pw.println("<tr bgcolor=" + mycol[i%2] + ">");  //利用模运算在数组的下标中来实现
pw.println("<td>"+ rs.getInt(1)+"</td>");
pw.println("<td>"+ rs.getString(2)+"</td>");
pw.println("<td>"+ rs.getString(3)+"</td>");
//pw.println("<td>"+ ub.getEmail()+"</td>");
//pw.println("<td>"+ ub.getGrade()+"</td>");
pw.println("</tr>");
}*/
pw.println("</table>");

int pageCount = ubc.getPageCount();

    if(pageNow != 1)
    {
    pw.println("<a href=wel?pageNowok=1>首页</a>");
    pw.println("<a href=wel?pageNowok=" + (pageNow - 1) + ">上一页</a>");
    }
   
    for(int i = pageNow; i <= pageNow + 4; i++)          //用来分页用的
{
    pw.println("<a href=wel?pageNowok=" + i + ">" + i + "</a>");
if(i == pageCount)
break;
}
   
   
    if(pageNow != pageCount)
    {
    int page = pageCount - 1;
    pw.println("<a href=wel?pageNowok=" + (pageNow + 1) + ">下一页</a>");
    pw.println("<a href=wel?pageNowok=" + page + ">尾页</a>");
    }
   
    pw.println("<br>");
   
    pw.println("<form action=wel method=get>");   //这里表示表单的提交方式,得注意表单的提交方式
    pw.println("<input type=txt name=pageNowok>");
    pw.println("<input type=submit value=go>");
    pw.println("</form>");

   
   
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req, res);
}
}


基本这就是用servlet写的一个简单的用户查询系统,但是还需要改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值