(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值