一坠陈、需求:
- 提供登錄頁面,登錄成功后跳轉到echarts展示頁面碧注,登錄失敗回到登錄頁面
- 使用攔截器過濾請求嘶窄,必須登錄后才能夠訪問echarts展示頁面
- echarts頁面讀取后臺傳遞過來的json數據,在前臺正確顯示
- 設置session過期時間為5分鐘
- 登錄帳號和密碼為:admin/123456(項目代碼路徑在最后)
二脊僚、簡易架構圖
三相叁、代碼結構
四、代碼
1. 后臺代碼
1.1 CheckAccountServlet.java
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.beans.AccountBean;
public class CheckAccountServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
AccountBean account = new AccountBean();
String username = req.getParameter("username");
String pwd = req.getParameter("password");
account.setPassword(pwd);
account.setUsername(username);
if ((username != null) && (username.trim().equals("admin"))) {
if ((pwd != null) && (pwd.trim().equals("123456"))) {
System.out.println("success");
session.setAttribute("account", account);
String login_suc = "print.html";
resp.sendRedirect(login_suc);
return;
}
}
String login_fail = "index.html";
System.out.println("failed");
resp.sendRedirect(login_fail);
return ;
}
}
1.2 EchartsServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
/**
*
* @author Administrator
*
*/
//@WebServlet("/EchartsServlet")
public class EchartsServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@SuppressWarnings("unused")
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//設置response響應頭格式
//解決中文亂碼問題
response.setContentType("application/json-rpc;charset=utf-8");
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Expires", "0");
// response.setHeader("Pragma", "No-cache");
// response.setHeader("Access-Control-Allow-Origin", "*");
// response.setHeader("Access-Control-Allow-Credentials","true");
// response.setHeader("Access-Control-Allow-Headers",
// "*, X-Requested-With, Content-Type");
response.setHeader("Access-Control-Allow-Methods",
"GET, OPTIONS, POST, DELETE, PUT");
response.setHeader("Content-Type: text/html", "charset=UTF-8");
String[] categories = { "襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子" };
Integer[] values = { 5, 20, 36, 10, 10, 20 };
String[] categories2 = { "襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子" };
Integer[] values2 = { 30, 60, 32, 30, 10,50 };
//使用json將數據進行封裝
JSONObject json = new JSONObject();
try {
json.put("categories", categories);
json.put("values", values);
json.put("categories2", categories2);
json.put("values2", values2);
} catch (JSONException e) {
e.printStackTrace();
}
if (json != null) {
PrintWriter writer = response.getWriter();
writer.write(json.toString());
writer.flush();
writer.close();
} else {
response.getWriter().print(1);
}
}
}
1.3 AccountBean.java
package com.beans;
public class AccountBean {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
1.4 LoginFilter.java
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.beans.AccountBean;
/**
* 登錄頁面攔截器
* @author Administrator
*
*/
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 在過濾器中檢查是否已經登錄
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
AccountBean account = (AccountBean) req.getSession().getAttribute("account");
//如果請求AccountBean為空即未登錄或并且請求url不是以index.html結尾并且不是以CheckAccount
//(注:servlet)結尾,將請求跳轉到index.html頁面
//即未登錄如果訪問其他頁面則自動跳轉到登錄頁面辽幌,必須登錄后才能進行訪問
if (account == null && !req.getRequestURI().endsWith("index.html")
&& !req.getRequestURI().endsWith("CheckAccount")) {
resp.sendRedirect("index.html");
// req.getRequestDispatcher("index.html").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
1.5 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>CheckAccountServlet</servlet-name>
<servlet-class>com.servlet.CheckAccountServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckAccountServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>EchartsServlet</servlet-name>
<servlet-class> com.servlet.EchartsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EchartsServlet</servlet-name>
<url-pattern>/EchartsServlet</url-pattern>
</servlet-mapping>
<!-- 攔截器 -->
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/print.html</url-pattern>
</filter-mapping>
<!-- session過期時間 (分鐘) -->
<session-config>
<session-timeout>5</session-timeout>
</session-config>
</web-app>
1.6 第三方jar包

jar包都在最后的項目代碼當中增淹,在WEB-INF下的lib包下,引用類的情況大致如下:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
2. 前臺代碼
注:前臺登錄頁面采用的是網上下載的模版乌企,鏈接為http://www.cssmoban.com/cssthemes/4908.shtml
2.1 index.html
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>FJJF screen Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- CSS -->
<link rel='stylesheet' >
<link rel="stylesheet" href="assets/css/reset.css">
<link rel="stylesheet" href="assets/css/supersized.css">
<link rel="stylesheet" href="assets/css/style.css">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div class="page-container">
<h1>Login</h1>
<form action="login" method="post">
<input type="text" name="username" class="username" placeholder="Username">
<input type="password" name="password" class="password" placeholder="password">
<button type="submit">Sign me in</button>
<div class="error"><span>+</span></div>
</form>
<div class="connect">
<p>Or connect with:</p>
<p>
<a class="facebook" ></a>
<a class="twitter" ></a>
</p>
</div>
</div>
<!-- Javascript -->
<script src="assets/js/jquery-1.8.2.min.js"></script>
<script src="assets/js/supersized.3.2.7.min.js"></script>
<script src="assets/js/supersized-init.js"></script>
<script src="assets/js/scripts.js"></script>
</body>
</html>
2.2 print.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
<!-- 引入 echarts.js -->
<script src="./js/echarts.common.min.js"></script>
<script type="text/javascript" src="./js/jquery-1.7.1.js"></script>
<!--設置div不換行-->
<style type="text/css">
div{
float:left;
}
</style>
</head>
<body style="background-image: url("./assets/img/backgrounds/2.jpg"); background-repeat:no-repeat;">
<!-- 為ECharts準備一個具備大新侨蟆(寬高)的Dom -->
<div id="main" style="width: 600px;height:420px;color: #411F2D;border: 1px solid gray;"></div>
<script type="text/javascript" src="./js/echartsFigure/barTest.js"> </script>
<div id="chart"
style="width: 600px; height: 420px; margin: 0 auto; border: 1px solid gray;"></div>
<script type="text/javascript" src="./js/echartsFigure/barTest2.js"> </script>
</body>
</html>
2.3 barTest.js
// 基于準備好的dom,初始化echarts實例
var myChart = echarts.init(document.getElementById('main'));
var categories = [];
var values = [];
// 同步執(zhí)行
$.ajaxSettings.async = false;
// 加載數據
$.getJSON('EchartsServlet', function (json) {
categories = json.categories;
values = json.values;
});
// 指定圖表的配置項和數據
var option = {
title: {
text: 'ECharts 入門示例'
},
tooltip: {},
legend: {
data:['銷量']
},
xAxis: {
data: categories
},
yAxis: {},
series: [{
name: '銷量',
type: 'bar',
data: values
}]
};
// 使用剛指定的配置項和數據顯示圖表加酵。
myChart.setOption(option);
2.4 barTest2.js
// 基于準備好的dom拳喻,初始化echarts實例
var myChart = echarts.init(document.getElementById('chart'));
var categories = [];
var values = [];
// 同步執(zhí)行
$.ajaxSettings.async = false;
// 加載數據
$.getJSON('EchartsServlet', function (json) {
categories = json.categories2;
values = json.values2;
});
// 指定圖表的配置項和數據
var option = {
title : {
text: '銷量分析',
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['銷量']
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : true,
xAxis : [
{
type : 'category',
data : categories
}
],
yAxis : [
{
type : 'value',
axisLabel : {
formatter: '{value} 元'
}
}
],
series : [
{
name:'銷量',
type:'bar',
itemStyle:{
normal:{
color:'#2EC7C9',
barBorderRadius: 10,
}
},
data:values,
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
],
itemStyle:{
normal:{
label:{
show:true,
textStyle:{
color:'#090909'
}
}
}
},
}
}
]
};
// 使用剛指定的配置項和數據顯示圖表。
myChart.setOption(option);
效果圖
整個項目代碼鏈接:http://pan.baidu.com/s/1hsbyF44 密碼: fg3j
由于對web開發(fā)不太熟猪腕,剛開始只能用最基本的東西來展現了冗澈,后面考慮用spring+springMVC+MyBatis來完善后臺,前臺用echarts做圖表展示陋葡,后臺數據處理考慮用hadoop+spark+es或hbase做數據計算亚亲、存儲和索引處理,樓主菜鳥一枚腐缤,各位看客老爺們見諒捌归,勿噴!