有没有人知道如何在使用Spark微型Web框架时覆盖现有的404错误页面?
在默认的错误页面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 </title>
</head>
<body>
<h2>HTTP ERROR: 404</h2>
<p>Problem accessing /strangepage. Reason:
<pre> Not Found</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想编辑此自定义错误页面(或者可能将其重定向到另一个路径):
get(new Route("/404") {
@Override
public Object handle(Request request, Response response) {
response.type("text/html");
return "Error page 404";
}
});
Run Code Online (Sandbox Code Playgroud) 我使用SparkJava为我的项目构建了一个REST API,现在我想将它部署到Google App Engine.但是在Eclipse中安装Google App Engine插件后,我不知道如何做到这一点.我已将我之前项目中的src文件复制到新的Web应用程序项目,并将main()重命名为init(),如http://www.sparkjava.com/readme.html#title18所述,我还更新了web.xml如上所述.但该项目没有运行.请指导!
我正在使用使用Jetty 9.0.2的SparkJava 2.2.
我得到Jetty抛出的"Form too large"异常.如果我直接使用Jetty,我已经知道如何解决这个问题:
http://www.eclipse.org/jetty/documentation/current/setting-form-size.html
问题:
现在我需要找到一种org.eclipse.jetty.server.Request.maxFormContentSize通过SparkJava 更改设置的方法.有没有办法做到这一点?
我必须注意其他方法(JVM_OPTS,System.setProperty)由于某些原因不适合我.我仍然得到同样的例外.
堆栈跟踪:
[qtp1858644635-27] ERROR spark.webserver.MatcherFilter -
java.lang.IllegalStateException: Form too large 308913>200000
at org.eclipse.jetty.server.Request.extractParameters(Request.java:334)
at org.eclipse.jetty.server.Request.getParameterMap(Request.java:765)
at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:193)
at spark.QueryParamsMap.<init>(QueryParamsMap.java:59)
at spark.Request.initQueryMap(Request.java:364)
at spark.Request.queryMap(Request.java:349)
at spark.webserver.RequestWrapper.queryMap(RequestWrapper.java:213)
at com.xyz.analytics.webservice.RequestTools.getRequestQueryMap(RequestTools.java:27)
at com.xyz.analytics.webservice.RequestTools.getMandrillQueryParams(RequestTools.java:22)
at com.xyz.analytics.webservice.Endpoints.lambda$initiateEndpointsAndExceptionHandlers$2(Endpoints.java:61)
at com.xyz.analytics.webservice.Endpoints$$Lambda$3/1485697819.handle(Unknown Source)
at spark.SparkBase$1.handle(SparkBase.java:311)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:159)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:451)
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
我必须注意其他方法(JVM_OPTS,System.setProperty)对我不起作用.
好吧,调试器甚至不会在任何设置的断点处停止org.eclipse.jetty.server.handlerContextHandler...加上当它在org.eclipse.jetty.server.Request断点处停止时,_context属性为null.似乎SparkJava以不同的方式处理它.死路. …
我正在使用Spark Java做一个项目.在服务器端,创建了一些图像,我希望它们在客户端中可用.由于我有一个静态内容目录,在服务器端创建映像后,我将它放在该目录中.但是,除非我重新启动服务器,否则此文件不可用.我想必须有一种方法可以在运行时刷新Spark Java的静态目录文件,以便可以实现运行时创建的映像请求.对?
谢谢!
通常,我使用Tomcat或Glassfish构建一个Java Web应用程序到WAR(Web应用程序存档文件).只需单击几下,即可通过Elastic Beanstalk轻松将此文件部署到AWS中.集成很简单,因为Elastic Beanstalk允许我们在Tomcat/Glassfish/Java上部署Web应用程序.
我最近开始使用名为Spark的轻量级Java框架,www.sparkjava.com.是否可以通过几次点击在Elastic Beanstalk上部署它?如果没有,是否可以轻松地将Spark Java Web应用程序部署到AWS上?或者,我是否需要创建EC2实例,复制JAR应用程序,并通过命令行启动JAR Web应用程序?
java amazon-ec2 amazon-web-services spark-java amazon-elastic-beanstalk
我有一个Spark MVC应用程序,非常简单.
根据spark文档,这应该足以运行应用程序:
public class SparkServer {
public static void main(String args[]) {
Spark.staticFileLocation("src/main/webapp");
System.out
.println("bla bla bla");
RService rService = new SparqlRService();
new RController(rService);
}
}
Run Code Online (Sandbox Code Playgroud)
我将该类放在项目中的一个包中,然后在Apache Tomcat服务器上运行Web应用程序(动态Web应用程序).
运行Apache Tomcat时不会出现print语句,这意味着此类未被调用.我知道这很有道理.这就是我要问的原因.请问如何让Apache Tomcat运行我的spark应用程序?
之后@mlk答案,我做了以下内容:
public class SparkServer implements SparkApplication {
@Override
public void init() {
Spark.staticFileLocation("src/main/webapp");
System.out
.println("bla bla lba");
RService rService = new SparqlRService();
new RController(rService);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的web.xml中我做了:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>SRecommender</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file> …Run Code Online (Sandbox Code Playgroud) 我正在将Spark Java Web Framework与Apache的Velocity Template Engine结合使用,以帮助设计一个从SQL数据库中提取数据的响应式Web应用程序.使用SQL2o我创建了一些自定义类类型的Java对象,即用户,组,站点等.
我已经检查过并填充了创建的对象列表.当我然后将我的对象列表放入一个hashmap并返回一个ModelandView时,出于某种原因我的列表就在那里但我不能在vtl中使用它的任何属性.
main方法和Spark代码的相关部分:
public static void main(String[] args) {
WEB_LOGMGR loggr = new WEB_LOGMGR(true);
WEB_DBMGR dbmgr = new WEB_DBMGR(true, loggr);
Model backend = new ScadaModel(dbmgr, loggr);
System.out.println(dataToJson(backend.getUsers()));
staticFiles.location("/");
staticFiles.externalLocation("/");
String layout = "/templates/layout.vtl";
//secure("public/keystore.jks", "password", null, null);
before("/form", (request, response) -> {
boolean authenticated = false;
// ... check if authenticated
if (!authenticated) {
halt(401, "You are not welcome here");
}
});
get("/", (req, res) -> {
HashMap pdata = new HashMap();
pdata.put("template", "/templates/main.vtl");
return …Run Code Online (Sandbox Code Playgroud) 我想对使用Windows中的命令提示符提交给Spark的应用程序进行远程调试.请你帮助我好吗?
我可以提供的任何地方Spark启动远程调试端口.
我必须使用Spark(Java框架)读取客户端发送的一些数据.
这是客户的帖子请求代码.我正在使用jQuery.
$.post("/insertElement",
{item:item.value, value: value.value, dimension: dimension.value });
Run Code Online (Sandbox Code Playgroud)
服务器代码:
post(new Route("/insertElement") {
@Override
public Object handle(Request request, Response response) {
String item = (String) request.attribute("item");
String value = (String) request.attribute("value");
String dimension = (String) request.attribute("dimension");
Element e = new Element(item, value, dimension);
ElementDAO edao = new ElementDAO();
edao.insert(e);
JSONObject json = JSONObject.fromObject( e );
return json;
}
});
Run Code Online (Sandbox Code Playgroud)
我正在使用Spark,所以我只需要定义路线.我想在数据库中存储客户端发送的数据,但所有属性都为null.
我认为这种方式不正确.如何读取发送的数据?
我使用sparkjava 开发了一个简单的 java web 应用程序。它包含 GET 和 POST 请求。我制作了自己的简单身份验证脚本,它使用秘密密码对用户进行身份验证并将用户名存储在会话中:
/*
Make sure authenticated
*/
before((req, res) -> {
boolean authenticated = false;
if ( req.session().attribute("user") != "casumo_user" ) {
try{
if (req.queryParams("secret").equals(System.getenv().get("SECRET"))){
authenticated = true;
req.session().attribute("user","casumo_user");
}
}catch (Exception e){
halt(401, "{\"error\":\"Please Authenticate.\"}");
}
}else{
authenticated = true;
}
if (!authenticated) {
halt(401, "{\"error\":\"Please Authenticate.\"}");
}
});
Run Code Online (Sandbox Code Playgroud)
我正在使用Postman Add-on for Chrome,这工作正常。我将进行一次身份验证,服务器将让我的会话保持活动状态以供后续请求使用。
问题是我想使用 curl 来发出相同的请求,但是会话并没有从一个请求到另一个请求保持活动状态。
例如,我首先使用这个命令:
curl -s -L --data "secret=secret_password" url/auth | jsonpp
Run Code Online (Sandbox Code Playgroud)
{ "msg": "已通过身份验证!您现在可以提出请求了。" …
spark-java ×10
java ×7
amazon-ec2 ×1
apache ×1
apache-spark ×1
curl ×1
httprequest ×1
javascript ×1
jetty ×1
jquery ×1
list ×1
server ×1
session ×1
static-files ×1
tomcat ×1
vtl ×1