1、 之前一直做得後端數據採集基本完事了。現在考慮做前臺展現。 專門做前端的同事 做了一套界面demo php做的,但是後臺有不會做。
討論得到三種方案
1 把php轉成jsp頁面用springmvc查詢數據供jsp展現。
2 我學會php去做數據庫的數據請求的處理 (php完全可以搞定前後所有的數據處理)。
3 php還是php,我做一個簡單的jsp服務器,做前端的同事通過php訪問我的jsp,我處理請求返回json串。
因爲暫時沒研究php,所以決定先採用第三種。 jsp接受請求查詢mysql 將返回的數據 組織成json,寫給前臺。
這樣相對簡單,且這個系統對性能安全性暫時要求不高。跟同事討論了下暫時先用這個方案來做吧。
2、在服務器上面測試了一下。
百度資料
1.在tomcat上運行php http://blog.csdn.net/ymjring/article/details/7481363
2.redhat下安裝apache-tomcat-7.0.47.tar.gz http://www.2cto.com/os/201401/272581.html
3.在陌生Linux環境查看Tomcat服務的方法 http://www.cnblogs.com/xiandedanteng/archive/2013/08/27/3284728.html
4.eclipse中的WEB項目打包部署到tomcat http://blog.sina.com.cn/s/blog_ab72d1b701014v8f.html
3、首先在本地建了個webApp,tomcat跑起來。然後部署到linux,訪問一切正常。理論上來說是可行的 ,ok 那就先這麼辦吧。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
你好 , 世界 !
</body>
</html>
<%@page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%
response.getWriter().write("{\"name\":\"uspcat.com\"}");
%>
4.Jsp 與 mySQL
Jsp mySQl 糾結了半天的錯誤。一直沒解決? (有時間貼出來)
index.jsp (代碼網上的 拿來改了下沒報錯)
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
<html>
<head>
</head>
<body>
<form action="mysql_insert.jsp" method="post">
ID :<input type="text" name="id" value="0" /> 姓名 :<input type="text"
name="name" value="aaa" />
<!-- 性別 :<input type="text" name="sex"
value="female" /> 年齡 :<input type="text" name="age" value="20" /> -->
</br> <input type="submit" value="提交" />
</form>
</body>
</html>
<%@ page language="java" import="java.util.*,java.sql.*"
pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
<html>
<head>
<title>add message into table</TITLE>
</head>
<body>
<%
String id = request.getParameter("id"); //從表單獲得
String name = request.getParameter("name"); //從表單獲得
java.util.Date date = new java.util.Date();
String datetime = new Timestamp(date.getTime()).toString();
try {
/** 連接數據庫參數 **/
String driverName = "com.mysql.jdbc.Driver"; //驅動名稱
String DBUser = "root"; //mysql用戶名
String DBPasswd = "tiger"; //mysql密碼
String DBName = "test"; //數據庫名
String connUrl = "jdbc:mysql://localhost:3306/" + DBName
+ "?user=" + DBUser + "&password=" + DBPasswd;
Class.forName(driverName).newInstance();
Connection conn = DriverManager.getConnection(connUrl);
Statement stmt = conn.createStatement();
stmt.executeQuery("SET NAMES UTF8");
String insert_sql = "insert into biao values('" + id + "','"
+ name + "')";
String query_sql = "select * from biao";
ResultSet rs;
try {
stmt.execute(insert_sql);
} catch (Exception e) {
e.printStackTrace();
}
try {
ResultSet rs = stmt.executeQuery(query_sql);
while (rs.next()) {
%>
ID:<%=rs.getString("id")%>
</br> 姓名:<%=rs.getString("name")%>
</br>
</br>
<%
}
} catch (Exception e) {
e.printStackTrace();
}
//rs.close(); //此句註釋去掉會報錯 -_-! org.apache.jasper.JasperException: Unable to compile class for JSP
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
以上代碼可正常運行!
-----------------------------------------------------------------------------------------------------------------------
5. 20150323第一版:湊合用了 (後期想把連接池加上)
uv_province_yestoday.jsp
<%@ page language="java" import="java.util.*,java.sql.*"
import="com.cntv.bk.util.XJPDateUtil" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
<%
//ajax垮域請求 ,jsonp
String name = request.getParameter("jsoncallback");
String queryDate = (String)request.getParameter("queryDate");
String dateStr =null;
try {
/** 連接數據庫參數 **/
String driverName = "com.mysql.jdbc.Driver"; //驅動名稱
String DBUser = "hive"; //mysql用戶名
String DBPasswd = "123456"; //mysql密碼
String DBName = "vdnaccesslog"; //數據庫名
String connUrl = "jdbc:mysql://10.240.8.20:3306/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;
Class.forName(driverName).newInstance();
Connection conn = DriverManager.getConnection(connUrl);
PreparedStatement ps;
//查詢1天的數據(即昨天的數據)
if(queryDate.equals("1")){
String sql = "select ipp.province,uvinfo.uv from uv_info_province uvinfo ,ip_location_province_code ipp where uvinfo.accessprovince = ipp.province_code and uvinfo.accessymd = ?;";
ps = conn.prepareStatement(sql);
ps.setString(1,XJPDateUtil.getDateYesterday(new java.util.Date(),-1));//ps.setString(1,"20150322");
}else{
//查詢7||30天的
String sql = "select ipprovince.province as province,sum(uv.uv) as uv from uv_info_province uv,ip_location_province_code ipprovince where uv.accessymd between ? and ? and ipprovince.province_code= uv.accessprovince GROUP BY uv.accessprovince";
ps = conn.prepareStatement(sql);
if(queryDate.equals("7")){
dateStr = XJPDateUtil.getDateYesterday(new java.util.Date(),-7);
}else if(queryDate.equals("30")){
dateStr = XJPDateUtil.getDateYesterday(new java.util.Date(),-30);
}
ps.setString(1,dateStr);//ps.setString(1,"20150322");
ps.setString(2,XJPDateUtil.getDateYesterday(new java.util.Date(),-1));//ps.setString(1,"20150322");
}
StringBuilder sb = new StringBuilder();
sb.append("[");
String sbStr = null;
ResultSet rs;
try {
rs = ps.executeQuery();
while (rs.next()) {
String proname = rs.getString("province");
int uvnum = rs.getInt("uv");
sb.append("{").append("\"name\":").append("\""+proname+"\"")
.append(",").append("\"value\":").append(uvnum)
.append("},");
}
} catch (Exception e) {
e.printStackTrace();
}
sbStr = sb.toString();
if(sbStr.endsWith(",")){
sbStr = sbStr.substring(0,sbStr.length()-1);
}
sbStr = sbStr+"]";
if(sbStr.endsWith("[]")){
response.getWriter().write(name+"("+"{\"name\":\"errorOccurred\",\"value\":-1}"+")");
}else{
response.getWriter().write(name+"("+sbStr+")");
}
//rs.close(); //此句註釋去掉會報錯 -_-! org.apache.jasper.JasperException: Unable to compile class for JSP
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write(name+"("+"{\"name\":\"errorOccurred\",\"value\":-1}"+")");
}
%>
uv_country_yestoday.jsp
<%@ page language="java" import="java.util.*,java.sql.*"
import="com.cntv.bk.util.XJPDateUtil" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
<%
//ajax垮域請求 ,jsonp
String name = (String) request.getParameter("jsoncallback");
String queryDate = (String)request.getParameter("queryDate");
String dateStr =null;
try {
/** 連接數據庫參數 **/
String driverName = "com.mysql.jdbc.Driver"; //驅動名稱
String DBUser = "hive"; //mysql用戶名
String DBPasswd = "123456"; //mysql密碼
String DBName = "vdnaccesslog"; //數據庫名
String connUrl = "jdbc:mysql://10.240.8.20:3306/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;
Class.forName(driverName).newInstance();
Connection conn = DriverManager.getConnection(connUrl);
PreparedStatement ps;
//查詢1天的(即昨天的數據)
if(queryDate.equals("1")){
String sql = "SELECT ipcountry.country,uvcountry.uv from uv_info_country uvcountry,ip_location_country_code ipcountry where uvcountry.accesscountry = ipcountry.country_code and uvcountry.accessymd=?";
ps = conn.prepareStatement(sql);
ps.setString(1, XJPDateUtil.getDateYesterday(new java.util.Date(),-1));//ps.setString(1,"20150322");
}else{
//查詢7||30天的
String sql = "select ipcountry.country as country,sum(uv)as uv from uv_info_country uvcountry,ip_location_country_code ipcountry where ipcountry.country_code=uvcountry.accesscountry and uvcountry.accessymd BETWEEN ? and ? GROUP BY uvcountry.accesscountry";
ps = conn.prepareStatement(sql);
if(queryDate.equals("7")){
dateStr = XJPDateUtil.getDateYesterday(new java.util.Date(),-7);
}else if(queryDate.equals("30")){
dateStr = XJPDateUtil.getDateYesterday(new java.util.Date(),-30);
}
ps.setString(1,dateStr);
ps.setString(2,XJPDateUtil.getDateYesterday(new java.util.Date(),-1));
}
StringBuilder sb = new StringBuilder();
sb.append("[");
String sbStr = null;
ResultSet rs;
try {
rs = ps.executeQuery();
while (rs.next()) {
String proname = rs.getString("country");
int uvnum = rs.getInt("uv");
sb.append("{").append("\"name\":")
.append("\"" + proname + "\"").append(",")
.append("\"value\":").append(uvnum)
.append("},");
}
} catch (Exception e) {
e.printStackTrace();
}
sbStr = sb.toString();
if (sbStr.endsWith(",")) {
sbStr = sbStr.substring(0, sbStr.length() - 1);
}
sbStr = sbStr + "]";
if (sbStr.endsWith("[]")) {
response.getWriter()
.write(name
+ "("
+ "{\"name\":\"errorOccurred\",\"value\":-1}"
+ ")");
} else {
response.getWriter().write(name + "(" + sbStr + ")");
}
//rs.close(); //此句註釋去掉會報錯 -_-! org.apache.jasper.JasperException: Unable to compile class for JSP
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write(
name + "("
+ "{\"name\":\"errorOccurred\",\"value\":-1}"
+ ")");
}
%>
XJPDateUtil public static String getDateYesterday(Date date,int n) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,n);//把日期往後增加一天.整數往後推,負數往前移動
date=calendar.getTime(); //這個時間就是日期往後推一天的結果
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String dateString = formatter.format(date);
return formatter.format(date);
}
6 ajax跨域請求 返回json
(一個使用jsonp)
//ajax垮域請求 ,jsonp
String name = request.getParameter("jsoncallback");
response.getWriter().write(name+"("+"{\"name\":\"errorOccurred\",\"value\":-1}"+")");
response.getWriter().write(name+"("+"{\"name\":\"errorOccurred\",\"value\":-1}"+")");
(一個使用CORS)
非常感謝作者分享文章: AJAX POST&跨域 解決方案 - CORS
response.setHeader("Access-Control-Allow-Origin","*"); // allow all
response.getWriter().write(sbStr);
response.getWriter().write("{\"name\":\"errorOccurred\",\"value\":-1}");
7.將json串 解析爲jsonArray 和 jsonObj
JSON總結- JSON與JAVA的數據轉換實例 http://iteye.blog.163.com/blog/static/1863080962012102124833914/
public static List<SystemSettingPojo> getJsonObjArray(String jsonStr) {
JSONArray jsonarray;
List list = new ArrayList<SystemSettingPojo>();
try {
jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
SystemSettingPojo pojo = new SystemSettingPojo();
String conf_item = jsonarray.getJSONObject(i).getString("name");
double warning_line = jsonarray.getJSONObject(i).getDouble(
"value");
boolean status = jsonarray.getJSONObject(i)
.getBoolean("status");
pojo.setConf_item(conf_item);
pojo.setWarning_line(warning_line);
pojo.setStatus(status);
list.add(pojo);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
/**
* 功能:僅用於測試方法,就不寫junit了 <br/>
*
* @author pjm <br/>
* @version 2015-3-30 下午01:51:44 <br/>
*/
public static void main(String[] args) {
String str = "[{'name':'snap','value':0.05,'status':true},{'name':'fail','value':0.02,'status':true},{'name':'startTime','value':5,'status':true}]";
//String str = '[{"name":"snap","value":0.05,"status":true},{"name":"fail","value":0.02,"status":true},{"name":"startTime","value":5,"status":true}]';
List list = getJsonObjArray(str);
System.out.println(list);
}
8.jdbc批量更新 ,出錯回滾 。 注意 1 2 3 4 處代碼
參考:http://blog.sina.com.cn/s/blog_662e56ec0100jtg5.html
conn.setAutoCommit(false); // 1
sql = "update system_warning_setting set warning_line=?,status=? where conf_item=?";
ps = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //2
List list = JsonUtil.getJsonObjArray(update);
for(int i=0;i<list.size();i++){
SystemSettingPojo pojo = (SystemSettingPojo)list.get(i);
ps.setDouble(1,pojo.getWarning_line() );
ps.setBoolean(2,pojo.getStatus());
ps.setString(3,pojo.getConf_item());
System.out.println(pojo.getConf_item()+"~~~~"+pojo.getWarning_line()+"~~~~"+pojo.getStatus());
ps.executeUpdate();
}
conn.commit();
conn.setAutoCommit(true); // 4
response.getWriter().write("{\"save\":\"success\"}");
考慮問題方式總結1-------------------------------------------------------------------------------------------------------
mysql查詢最近7天 30天 數據
爲什麼我第一想的是查出每天的數據來進行加和,也就是如查30天 ,首先要搞個30天的數據每個存201503xx 然後查出30條數據再sum。
哎:這麼做非常的麻煩 並且如果 查詢的是300天的數據呢?
爲什麼不想between 日期1 and 日期2呢? 思維有點不靈活!!!!之前在日誌解析裏面明明用的就是between and。知識運用不靈活。
2-------------------------------------------------------------------------------------------------------