2014年暑期实习老师要求的是人力资源管理系统,组队后组长分配给的任务是报表管理。
我做的报表管理,主要的功能是用户输入查询的时间区间和查询部门,然后将数据据库返回的数据显示在浏览器上。用户可以选择是否生成excel表格(表格是保存在固定的电脑地址下《D:》)
首先列一下系统要求:截图如下(为什么不能插入图片,第一次写不知道怎么插入)。需求要求显示当前月的月首和月末。
我首先要做的就是处理这些默认值(时间默认值和部门默认值(全部)):
1、首先从系统获取当前年份与月份:
<%@ page language="java"%> <%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%> <% String day = ""; String year1 = new SimpleDateFormat("yyyy").format(Calendar.getInstance().getTime()); String month1 = new SimpleDateFormat("MM").format(Calendar.getInstance().getTime()); %>
2、从数据库获取部门信息(jsp里的代码,在servlet中一样)
部门:
<% Form2 db=new Form2(); //连接数据库的类(在下面列出来) ArrayList list3=db.getConnection();类中连接数据库和查询的函数 %> <select name="department" > <option>全部</option> <% for(int i=0;i<list3.size();i++){ javaBean.departmentBean bean=(javaBean.departmentBean)list3.get(i); %> <option value="<%=bean.getDep_name() %>"><%=bean.getDep_name()%></option> <%} %> </select>
Form2类:
public class Form2 { public ArrayList getConnection() { String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String dbURL = "jdbc:sqlserver://172.20.61.19:1433;DatabaseName=Admininstration"; String user = "sa"; String password = "1962603840"; java.sql.Connection connection=null; ArrayList list1 = new ArrayList(); try { Class.forName(driverName); connection=DriverManager.getConnection(dbURL, user, password); java.sql.Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select dep_name from department"); while(resultSet.next()) { String dep_name = resultSet.getString("dep_name"); departmentBean bean1 = new departmentBean(); bean1.setDep_name(dep_name); list1.add(bean1); } return list1; } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } finally{ try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return list1; } }
3、从数据库中获取数据并保存在excel表格中,(只能保存在主机上,找时间要探索一下如何在用户电脑上显示)(连接数据库的类中写的)
if (excel.equals("是")) {//excel是从jsp页面选择的是否要生成excel的选择,通过session传递 try { // open file. WritableWorkbook book = Workbook.createWorkbook(new File("d:/新聘职工信息.xls")); WritableSheet sheet = book.createSheet("Sheet_1", 0); jxl.write.Label label1 = new jxl.write.Label(0, 0, "序号"); sheet.addCell(label1); jxl.write.Label label2 = new jxl.write.Label(1, 0, "部门名称"); sheet.addCell(label2); jxl.write.Label label3 = new jxl.write.Label(2, 0, "岗位名称"); sheet.addCell(label3); jxl.write.Label label4 = new jxl.write.Label(3, 0, "入职日期"); sheet.addCell(label4); for (int i = 0;i < list.size();i ++){ staff_infBean bean1 = (staff_infBean)list.get(i); jxl.write.Label label01 = new jxl.write.Label(0, i+1, bean1.getStaff_id()); sheet.addCell(label01); jxl.write.Label label02 = new jxl.write.Label(1, i+1, bean1.getDepartment()); sheet.addCell(label02); jxl.write.Label label03 = new jxl.write.Label(2, i+1, bean1.getPost()); sheet.addCell(label03); jxl.write.Label label04 = new jxl.write.Label(3, i+1, bean1.getDate_entry()); sheet.addCell(label04); } book.write(); book.close(); } catch (Exception e) { e.printStackTrace(); }
4、处理乱码问题
tomcat下的conf下的server.xml中找到第二个8080处,在8080后面加上 URIEncoding="utf-8" 保存,然后在Servlet文件中加转码语句
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");//转码
PrintWriter out = response.getWriter();//不知道有没有顺序问题,有一次顺序错了,也导致了乱码。