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.youkuaiyun.com/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-------------------------------------------------------------------------------------------------------