add server side code

add server side code
master
hmkcode 12 years ago
parent ea25492333
commit f2ffb1c3a7

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
</jdoconfig>

@ -0,0 +1,71 @@
package com.hmkcode.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hmkcode.vo.Person;
public class JSONServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// This will store all received articles
List<Person> persons = new LinkedList<Person>();
/***************************************************
* URL: /jsonservlet
* doPost(): receives JSON data, parse it, map it and send back as JSON
****************************************************/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
// 1. get received JSON data from request
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
String json = "";
if(br != null){
json = br.readLine();
}
// 2. initiate jackson mapper
ObjectMapper mapper = new ObjectMapper();
// 3. Convert received JSON to Article
Person person = mapper.readValue(json, Person.class);
// 4. Set response type to JSON
response.setContentType("application/json");
// 5. Add article to List<Article>
if(persons.size() > 20)
persons.remove(0);
persons.add(person);
// 6. Send List<Article> as JSON to client
mapper.writeValue(response.getOutputStream(), persons);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//2. initiate jackson mapper
ObjectMapper mapper = new ObjectMapper();
// 4. Set response type to JSON
resp.setContentType("application/json");
// 6. Send List<Article> as JSON to client
mapper.writeValue(resp.getOutputStream(), persons);
}
}

@ -0,0 +1,40 @@
package com.hmkcode.vo;
public class Person {
private String name;
private String country;
private String twitter;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getTwitter() {
return twitter;
}
public void setTwitter(String twitter) {
this.twitter = twitter;
}
@Override
public String toString() {
return "Person [name=" + name + ", country=" + country + ", twitter="
+ twitter + "]";
}
}

@ -0,0 +1,24 @@
# A default log4j configuration for log4j users.
#
# To use this configuration, deploy it into your application's WEB-INF/classes
# directory. You are also encouraged to edit it as you like.
# Configure the console as our one appender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n
# tighten logging on the DataNucleus Categories
log4j.category.DataNucleus.JDO=WARN, A1
log4j.category.DataNucleus.Persistence=WARN, A1
log4j.category.DataNucleus.Cache=WARN, A1
log4j.category.DataNucleus.MetaData=WARN, A1
log4j.category.DataNucleus.General=WARN, A1
log4j.category.DataNucleus.Utility=WARN, A1
log4j.category.DataNucleus.Transaction=WARN, A1
log4j.category.DataNucleus.Datastore=WARN, A1
log4j.category.DataNucleus.ClassLoading=WARN, A1
log4j.category.DataNucleus.Plugin=WARN, A1
log4j.category.DataNucleus.ValueGeneration=WARN, A1
log4j.category.DataNucleus.Enhancer=WARN, A1
log4j.category.DataNucleus.SchemaTool=WARN, A1

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVC</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>jsonservlet</servlet-name>
<servlet-class>com.hmkcode.servlet.JSONServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jsonservlet</servlet-name>
<url-pattern>/jsonservlet</url-pattern>
</servlet-mapping>
</web-app>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,31 @@
<!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=ISO-8859-1">
<title>Spring MVC - View (JSON, XML, PDF, Excel)</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<style type="text/css">
.style1 {
color: #C0C0C0;
font-family: Tahoma;
font-size:11px;
}
</style>
</head>
<body>
<a href="http://hmkcode.com"><h1>hmkcode.com</h1></a>
<p class="style1"><em>The data in this demo is hard-coded in a Java class not as
mentioned in the article in xml file since GAE is not allowing reading file.</em></p>
<h1>Spring MVC - View (JSON, XML, PDF, Excel)</h1>
<div style="margin:10px;width:700px;text-align:center">
<a href="rest/controller/get.json" class="label label-info">JSON</a>
<a href="rest/controller/get.xml" class="label label-info">XML</a>
<a href="rest/controller/get.pdf" class="label label-info">PDF</a>
<a href="rest/controller/get.xlsx" class="label label-info">Excel</a>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

@ -0,0 +1,43 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Java Servlet JSON</title>
<script src="./js/jquery.1.9.1.min.js"></script>
<!-- bootstrap just to have good looking page -->
<link href="./bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet" />
<!-- we code these -->
<script src="./js/myfunctions.js"></script>
</head>
<body>
<h1 style="text-align:center"><a href="http://hmkcode.com">HMKCode.com</a></h1>
<h1 style="text-align:center">Java Servlet that Receives POST Request with JSON Data<br></h1>
<div id="alert" class="alert alert-warning" style="width:200px;display:none">
<b>Warning!</b> Invalid input.
</div>
<!-- article inputs -->
<div class="article" style="margin:10px;text-align:center">
<p>
<button class="btn btn-primary" type="button" onclick="getAjax()">Refresh</button>
</p>
</div>
<!-- display all articles -->
<div style="width:700px;padding:20px">
<h5 style="text-align:center"><i style="color:#ccc"><small>Visitors</small></i></h5>
<table id="added-articles" class="table" >
<tr>
<th>Name</th>
<th>Country</th>
<th>Twitter</th>
</tr>
</table>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

@ -0,0 +1,77 @@
function sendAjax() {
$("#alert").css("display","none");
if($.trim($('#name').val()).length == 0){
$("#alert").css("display","block");
return;
}
// get inputs
var person = new Object();
person.name = $('#name').val();
person.country = $('#country').val();
person.twitter = $('#twitter').val();
$.ajax({
url: "/jsonservlet",
type: 'POST',
dataType: 'json',
data: JSON.stringify(person),
contentType: 'application/json',
mimeType: 'application/json',
success: function (data) {
$("tr:has(td)").remove();
$.each(data, function (index, person) {
if(person.name.length > 0 )
$("#added-articles").append($('<tr/>')
.append($("<td/>").append($("<span class='label label-default' style='margin:4px;padding:4px'/>").text(person.name)))
.append($("<td/>").append($("<span class='label label-success' style='margin:4px;padding:4px'/>").text(person.country)))
.append($("<td/>").append($("<span class='label label-info' style='margin:4px;padding:4px'/>").text(person.twitter)))
);
});
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
//--------------------------------------
function getAjax() {
$("#alert").css("display","none");
$.ajax({
url: "/jsonservlet",
type: 'GET',
dataType: 'json',
contentType: 'application/json',
mimeType: 'application/json',
success: function (data) {
$("tr:has(td)").remove();
$.each(data, function (index, person) {
$("#added-articles").append($('<tr/>')
.append($("<td/>").append($("<span class='label label-default' style='margin:4px;padding:4px'/>").text(person.name)))
.append($("<td/>").append($("<span class='label label-success' style='margin:4px;padding:4px'/>").text(person.country)))
.append($("<td/>").append($("<span class='label label-info' style='margin:4px;padding:4px'/>").text(person.twitter)))
);
});
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
//--------------------------------------
Loading…
Cancel
Save