Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 2044 → Rev 2046

/es2018/jmachado/src/java/pt/estgp/es/exemplos/hibernate/web/login/LoginRest.java
20,6 → 20,16
JSONObject js = new JSONObject();
js.put("result","ok");
 
addMessage("User autenticado com sucesso",req);
 
return js;
}
 
public JSONObject logout(JSONObject data, HttpServletRequest req, HttpServletResponse resp) throws JSONException
{
JSONObject js = new JSONObject();
js.put("result","ok");
 
return js;
}
}
/es2018/jmachado/src/java/pt/estgp/es/exemplos/hibernate/web/rest/AbstractRestServlet.java
1,5 → 1,6
package pt.estgp.es.exemplos.hibernate.web.rest;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.es.exemplos.hibernate.utils.StreamsUtils;
10,13 → 11,23
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 
public abstract class AbstractRestServlet extends HttpServlet
{
 
 
 
public void addMessage(String mensagem, HttpServletRequest request)
{
List<String> messages = (List<String>) request.getAttribute("Messages");
messages.add(mensagem);
}
 
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
process(req,resp);
29,54 → 40,111
 
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
JSONObject requestObj;
 
if(req.getContentType().equalsIgnoreCase("application/json"))
 
req.setAttribute("Messages",new ArrayList<String>());
if(req.getContentType() != null && req.getContentType().equalsIgnoreCase("application/json"))
{
InputStream content = req.getInputStream();
if(content != null)
{
String json = StreamsUtils.readString(content);
try {
requestObj = new JSONObject(json);
System.out.println("REQUEST JSON:");
System.out.println(requestObj.toString());
ParseJsonRequestResult parseJsonRequestResult = new ParseJsonRequestResult(content).invoke();
invokeService(req, resp, parseJsonRequestResult.getService(), parseJsonRequestResult.getData());
} catch (Throwable e) {
sendErrorResponse(resp, e);
}
}
}
else
{
JSONObject response = new JSONObject();
try {
response.put("service","error");
response.put("response","REST REQUEST REQUIRED");
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
} catch (JSONException e) {
e.printStackTrace();
}
 
String service = requestObj.getString("service");
String data = requestObj.has("data") ? requestObj.getString("data") : null;
 
Method innerMethod = this.getClass().getMethod(service,new Class[]{
JSONObject.class,
HttpServletRequest.class,
HttpServletResponse.class});
JSONObject obj = (JSONObject) innerMethod.invoke(this,new Object[]{data,req,resp});
 
JSONObject response = new JSONObject();
response.put("service","ok");
response.put("response",obj);
}
 
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(obj.toString());
 
} catch (Throwable e) {
e.printStackTrace();
JSONObject response = new JSONObject();
try {
response.put("service","error");
response.put("cause",e.toString());
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
} catch (JSONException e1) {
e1.printStackTrace();
}
}
 
private void invokeService(HttpServletRequest req, HttpServletResponse resp, String service, JSONObject data) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, JSONException, IOException {
Method innerMethod = this.getClass().getMethod(service,new Class[]{
JSONObject.class,
HttpServletRequest.class,
HttpServletResponse.class});
JSONObject obj = (JSONObject) innerMethod.invoke(this,new Object[]{data,req,resp});
 
}
JSONObject response = new JSONObject();
response.put("service","ok");
response.put("response",obj);
 
List<String> messages = (List<String>) req.getAttribute("Messages");
 
if(messages.size() > 0)
{
JSONArray msgs = new JSONArray();
for(String msgAdded: messages)
{
msgs.put(msgAdded);
}
response.put("messages",msgs);
}
 
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
}
 
private void sendErrorResponse(HttpServletResponse resp, Throwable e) throws IOException {
e.printStackTrace();
JSONObject response = new JSONObject();
try {
response.put("service","error");
response.put("exception",e.toString());
resp.setContentType("application/json");
PrintWriter pw = resp.getWriter();
pw.write(response.toString());
} catch (JSONException e1) {
e1.printStackTrace();
}
}
 
private class ParseJsonRequestResult {
private InputStream content;
private String service;
private JSONObject data;
 
public ParseJsonRequestResult(InputStream content) {
this.content = content;
}
 
public String getService() {
return service;
}
 
public JSONObject getData() {
return data;
}
 
public ParseJsonRequestResult invoke() throws IOException, JSONException {
JSONObject requestObj;
String json = StreamsUtils.readString(content);
requestObj = new JSONObject(json);
System.out.println("REQUEST JSON:");
System.out.println(requestObj.toString());
 
service = requestObj.getString("service");
data = requestObj.has("data") ? requestObj.getJSONObject("data") : null;
return this;
}
}
}
/es2018/jmachado/src/web/login.jsp
1,4 → 1,4
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
FORM DE AUTENTICACAO
 
</div>
/es2018/jmachado/src/web/layout1.jsp
22,6 → 22,9
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
 
 
<script src="<%=request.getContextPath()%>/js/rest-layer.js"></script>
</head>
<body id="public">
<!-- HEADER -->
/es2018/jmachado/src/web/listaPaginas.jsp
50,6 → 50,58
 
 
 
<script>
var app = angular.module('loginApp', []);
app.controller('loginAppController', function($scope) {
$scope.username= "";
$scope.password= "";
$scope.login = function(){
alert($scope.username);
alert($scope.password);
rest(
"<%=request.getContextPath()%>/ws/api/login",
"login",
{
username: $scope.username,
password: $scope.password
},
"#xpto",
function(resposta){
alert("ok:" + resposta.result);
},
function(resposta){
alert("ok:" + resposta);
}
);
}
 
 
});
</script>
 
<div id="xpto">
XPTO
<div class="web-messages"></div>
</div>
 
<div id="loginApp" ng-app="loginApp" ng-controller="loginAppController">
APP
<div class="web-messages"></div>
 
<pre>
user:{{username}} pass:{{password}}
</pre>
<div class="form">
<input type="hidden" name="dispatch" value="login">
Username: <input type="text" ng-model="username"/><br/>
Password: <input type="text" ng-model="password"/><br/>
<button type="button" class="btn btn-success" ng-click="login()">Login</button>
</div>
 
</div>
 
 
 
<html:form action="/login">
<input type="hidden" name="dispatch" value="login">
Nome: <html:text property="username"/><br/>
/es2018/jmachado/src/web/js/rest-layer.js
4,13 → 4,13
{
data : data,
service : serviceName
}
};
 
$.ajax({
url: restAction,
type: "POST",
contentType: "application/json",
data: request,
data: JSON.stringify(request),
dataType: "json",
 
success: function(resposta)
40,7 → 40,7
$(webMessagesContainer).find(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor tente novamente</div>');
if(handlerFail != undefined)
{
handlerFail(resposta.exception);
handlerFail(resposta);
}
}
});
/es2018/jmachado/build.xml
66,6 → 66,14
 
</target>
 
<target name="copyJsps">
<copy todir="build/ant/war">
<fileset dir="src/web">
<include name="**/*.*"/>
</fileset>
</copy>
</target>
 
<target name="build.war" depends="compile">
<delete dir="build/ant/war"/>
<mkdir dir="build/ant/war"/>