1.主要设计思想
上学期主要在学习javaweb,只写了一个简单的登录注册,没有很好的把所学的东西都运用上去,于是这个寒假就想写一个完整的小项目总结下学习的内容,正好工作室每年招新都需要一个一个招新网站,就想起写一个招新网站,实现简单的前端和后台交互。
2.主要运用技术
这个小项目主要运用了jsp,hml,css,javascript,bookstrap框架做的前端,(由于个人审美原因@_@)页面并不那么美观,后台主要用的java语言写的,servlet转发,ajax查重,Echart处理图形。数据使用的是mysql数据库存储。
3.答辩介绍
响应式前端后台
下面是一些技术的主要代码
<script type="text/javascript">
// 路径配置
require.config({
paths : {
echarts : 'http://echarts.baidu.com/build/dist'
}
});
// 使用
require([ 'echarts', 'echarts/chart/bar' // 使用柱状图就加载bar模块,按需加载
],
drewEcharts
);
function drewEcharts(ec) {
// 初始化echarts图表
var myChart = ec.init(document.getElementById('main'));
var option = {
tooltip : {
show : true
},
legend : {
data : [ '数量' ]
},
xAxis : [ {
type : 'category',//一级分类
data :(function(){
var arr=[];
$.ajax({
type : "post",
async : false, //同步执行
url : "bar.do",
data : {},
dataType : "json", //返回数据形式为json
success : function(result) {
if (result) {
for(var i=0;i<result.length;i++){
console.log(result[i].mingcheng);
arr.push(result[i].mingcheng);
}
}
},
error : function(errorMsg) {
alert("不好意思,图表请求数据失败啦!");
myChart.hideLoading();
}
})
return arr;
})()
} ],
yAxis : [ {
type : 'value'
} ],
series : [ {
"name" : "数量",
"type" : "bar",
"data" : (function(){
var arr=[];
$.ajax({
type : "post",
async : false, //同步执行
url : "bar.do",
data : {},
dataType : "json", //返回数据形式为json
success : function(result) {
if (result) {
for(var i=0;i<result.length;i++){
console.log(result[i].number);
arr.push(result[i].number);
}
}
},
error : function(errorMsg) {
alert("柱状图表请求数据失败!");
myChart.hideLoading();
}
})
return arr;
})()
} ]
};
// 为echarts对象加载数据
myChart.setOption(option);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
updateDao updateDao1 = new updateDao();
updateDao1.updateNumber();
updateDao1.updateNumber1();
updateDao1.updateNumber2();
//创建了一个bardao的对象,barDAO主要是对数据库的连接和对数据库的操作
barDAO bardao=new barDAO();
ArrayList<Numberentiy> array = (ArrayList<Numberentiy>) bardao.listAll();
System.out.println("s"+array);
//设置返回时的编码格式
response.setContentType("text/html; charset=utf-8");
//调用JSONArray.fromObject方法把array中的对象转化为JSON格式的数组
JSONArray json=JSONArray.fromObject(array);
//返回给前端页面
PrintWriter out = response.getWriter();
out.println(json);
out.flush();
out.close();
}
public void init() throws ServletException {
}
}
Echart插件主要通过一个地址是从网站上引用它的模板有bar柱状图,pie饼状图,line折线图,我只用了最简单的bar饼状图,还有很多漂亮的形式可以查看官网引入,引用主要是要初始化数据类型,图类型,横纵坐标,然后从数据库中抓取数据显示。
导出excel表是真的写了很久,主要是先设置一个请求头,设置编码,文件类型,文件名,然后获取结果集,头单元名称,HSSFWorkbook的对象,我用了一个fillExcelData传入这三个参数,遍历每个单元格填入数据,然后运用了CellStyle中的一些方法修饰。核心代码如下:
public void fillExcelData(ResultSet rs, HSSFWorkbook wb, String[] headers)
throws Exception {
int rowIndex = 0; // 第一行
Sheet sheet = wb.createSheet(); // 创建sheet页
Row row = sheet.createRow(rowIndex++);
// 创建标题
CellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setColor((short) 0);
font.setFontHeightInPoints((short) 14);
font.setFontName("宋体");
style.setFont(font);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
for (int i = 0; i < headers.length; i++) {
row.setHeight((short)350);
row.createCell(i).setCellValue(headers[i]);
row.getCell(i).setCellStyle(style);
}
// 导出数据库中的数据
CellStyle style1 = wb.createCellStyle();
HSSFFont font1 = wb.createFont();
font1.setFontHeightInPoints((short) 14);
font1.setFontName("宋体");
style1.setFont(font1);
while (rs.next()) {
row = sheet.createRow(rowIndex++);
for (int i = 0; i < headers.length; i++) {
row.setHeight((short)350);
sheet.setColumnWidth((short)i,(short)6000);
row.createCell(i).setCellValue(rs.getObject(i + 1).toString());
row.getCell(i).setCellStyle(style1);
//rs.getObject(i + 1)得到一个对象,即数据库中一行的结果,每一列就是属性凑成一行变成对象。因为id是从1开始,所以要+1。
}
}
}
/**
* 下载excel表
*
* @param response
* @param fileName
* @throws Exception
*/
public void export(HttpServletResponse response, Workbook wb,
String fileName) throws Exception {
response.setHeader("Content-Disposition", "attachment;filename="
+ new String(fileName.getBytes("utf-8"), "iso8859-1"));// 设置头信息
response.setContentType("application/ynd.ms-excel;charset=UTF-8");
OutputStream out = response.getOutputStream();
wb.write(out);// 进行输出,下载到本地
out.flush();
out.close();
}
}
4.javaweb分层
图示表示
5.总结
1.做完这个项目还是学到了很多,对servlet和ajax理解的 更加透彻了,对java运用的更加熟练了,做答辩的确是一次很好的锻炼。
2.这个项目的不足在于前端还不够美观,后台功能也不多,只有一些基本功能,后续希望能够实现更多的功能。
3.项目分层有的还没分好,一个项目的分层的确很重要,这样可以增加你的代码复用性,更好地修改,减少许多不必要的bug,也有助于别人读懂你的代码。
4.感觉xml的配置还是有点繁琐,java代码也不够精简,jar包也有点难找,希望ssm框架之后能写出更漂亮的后台。