(5) linux服務器部署 jsp服務器響應用戶的請求 返回json串

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>


/provideDataFromHadoop/WebContent/providedata/mysql_insert.jsp
<%@ 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

http://tc.uc.cn/?v=1&src=l4uLj8XQ0IiIiNGckZ2TkJiM0ZyQktC7no2NmpGgnJCbmtCP0JyQjYzRl4uSkw%3D%3D&restype=1&ucshare=1&ucshareplatform=6&os=ios

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-------------------------------------------------------------------------------------------------------

解決谷歌訪問打不開的問題:(經測試有效)

http://jingyan.baidu.com/article/0a52e3f420e866bf62ed7230.html

發佈了55 篇原創文章 · 獲贊 4 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章