Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在restlejavase中使用xml/css/json吗?_Java_Html_Css_Twitter Bootstrap_Restlet - Fatal编程技术网

可以在restlejavase中使用xml/css/json吗?

可以在restlejavase中使用xml/css/json吗?,java,html,css,twitter-bootstrap,restlet,Java,Html,Css,Twitter Bootstrap,Restlet,我对java和restlet完全是新手。 我正在使用EclipseLunaJavaSE。 我尝试在我的web应用程序中使用html/css/xml/bootstrap等。 我四处搜索,找到的所有示例都是基于JavaEE的。 所以我想知道,如果我想使用html(文件)/css/xml/bootstrap/json等,我应该使用JavaEE而不是JavaSE。。在我的web服务中包含更丰富的上下文。我确实在他们的主页上读过Restlet用户指南/教程,甚至读过《Restlet在行动》一书。但我自己找

我对java和restlet完全是新手。 我正在使用EclipseLunaJavaSE。 我尝试在我的web应用程序中使用html/css/xml/bootstrap等。 我四处搜索,找到的所有示例都是基于JavaEE的。 所以我想知道,如果我想使用html(文件)/css/xml/bootstrap/json等,我应该使用JavaEE而不是JavaSE。。在我的web服务中包含更丰富的上下文。我确实在他们的主页上读过Restlet用户指南/教程,甚至读过《Restlet在行动》一书。但我自己找不到任何答案。也许这些材料中有答案,但我还没有弄明白。 所以,在java SE restlet中,目前,我正在用java代码对html进行硬编码。。。 但这还不够


这对其他人来说可能是非常基本的。但请理解,这也会让初学者感到困惑。举例将非常有用。谢谢。

别担心!没有愚蠢的问题;-)

当然,您可以在服务器端仅使用带有JavaSE的Restlet。您可以在独立Java应用程序中定义Restlet服务器。这可以使用类组件来完成。实例化后,您可以向其中添加服务器。以下代码对此进行了描述:

public static void main(String[] args) {
    Component component = new Component();
    component.getServers().add(Protocol.HTTP, 8080);
    (...)
    component.start();
}
启动组件之前,可以将Restlet应用程序附加到组件上,如下所述:

component.getDefaultHost().attach(new SampleApplication());
String rootUri = "file:///(...)/static-content";
Directory directory = new Directory(getContext(), rootUri);
directory.setListingAllowed(true);
router.attach("/static/", directory);
public class SampleApplication extends Application {
    (...)
    private Configuration configuration;

    public static Configuration configureFreeMarker(Context context) {
        Configuration configuration = new Configuration();
        ClassTemplateLoader loader = new ClassTemplateLoader(
            SampleAppApplication.class,
            "/org/myapp/sample/server/templates/");
        configuration.setTemplateLoader(loader);
        // configuration.setCacheStorage(new StrongCacheStorage());
        return configuration;
    }

    public Configuration getConfiguration() {
        return configuration;
    }
}
private SampleApplication getSampleApplication() {
    return (SampleApplication)getApplication();
}

private Representation toRepresentation(Map<String, Object> map,
    String templateName, MediaType mediaType) {
    return new TemplateRepresentation(templateName,
        getSampleApplication().getConfiguration(), map, mediaType);
}

@Get("html")
public Representation getHtml() {
    Map<String, Object> model = new HashMap<String, Object>();

    model.put("titre", "my title");
    model.put("users", getUsers());

    return toRepresentation(model,
        "myTemplate", MediaType.TEXT_HTML);
}
Restlet应用程序对应于扩展类
应用程序
的类。下一步包括重写方法
createInboundRoot
。此方法定义应用程序的REST路由。以下代码描述Restlet应用程序的skelekon:

public class SampleApplication extends Application {
    @Override
    public Restlet createInboundRoot() {
        Router router = new Router(getContext());

        router.attach("/myresource", MyServerResource.class);

        (...)

        return router;
    }
}
由于您希望提供静态文件(JS、CSS等),因此可以利用类
目录
。它允许自动和递归地将根文件夹中的所有文件夹和文件附加到路径。可按如下所述进行配置:

component.getDefaultHost().attach(new SampleApplication());
String rootUri = "file:///(...)/static-content";
Directory directory = new Directory(getContext(), rootUri);
directory.setListingAllowed(true);
router.attach("/static/", directory);
public class SampleApplication extends Application {
    (...)
    private Configuration configuration;

    public static Configuration configureFreeMarker(Context context) {
        Configuration configuration = new Configuration();
        ClassTemplateLoader loader = new ClassTemplateLoader(
            SampleAppApplication.class,
            "/org/myapp/sample/server/templates/");
        configuration.setTemplateLoader(loader);
        // configuration.setCacheStorage(new StrongCacheStorage());
        return configuration;
    }

    public Configuration getConfiguration() {
        return configuration;
    }
}
private SampleApplication getSampleApplication() {
    return (SampleApplication)getApplication();
}

private Representation toRepresentation(Map<String, Object> map,
    String templateName, MediaType mediaType) {
    return new TemplateRepresentation(templateName,
        getSampleApplication().getConfiguration(), map, mediaType);
}

@Get("html")
public Representation getHtml() {
    Map<String, Object> model = new HashMap<String, Object>();

    model.put("titre", "my title");
    model.put("users", getUsers());

    return toRepresentation(model,
        "myTemplate", MediaType.TEXT_HTML);
}
现在让我们关注服务器资源。我们可以根据您的情况区分两种:

  • 交换结构化数据并使用POJO WW及其注释方法(
    Get
    Post
    ,…)
  • 直接管理表示或基于Restlet扩展的表示
对于第一个,您可以在stackoverflow上参考这一点

第二种方法允许使用模板引擎生成要发送回客户端的内容。这类似于JavaEE中的JSP。我们可以以Freemarker()及其相应的Restlet扩展为例

首先,我们需要在Restlet应用程序中配置Freemarker引擎,主要是查找模板的根目录,如下所述:

component.getDefaultHost().attach(new SampleApplication());
String rootUri = "file:///(...)/static-content";
Directory directory = new Directory(getContext(), rootUri);
directory.setListingAllowed(true);
router.attach("/static/", directory);
public class SampleApplication extends Application {
    (...)
    private Configuration configuration;

    public static Configuration configureFreeMarker(Context context) {
        Configuration configuration = new Configuration();
        ClassTemplateLoader loader = new ClassTemplateLoader(
            SampleAppApplication.class,
            "/org/myapp/sample/server/templates/");
        configuration.setTemplateLoader(loader);
        // configuration.setCacheStorage(new StrongCacheStorage());
        return configuration;
    }

    public Configuration getConfiguration() {
        return configuration;
    }
}
private SampleApplication getSampleApplication() {
    return (SampleApplication)getApplication();
}

private Representation toRepresentation(Map<String, Object> map,
    String templateName, MediaType mediaType) {
    return new TemplateRepresentation(templateName,
        getSampleApplication().getConfiguration(), map, mediaType);
}

@Get("html")
public Representation getHtml() {
    Map<String, Object> model = new HashMap<String, Object>();

    model.put("titre", "my title");
    model.put("users", getUsers());

    return toRepresentation(model,
        "myTemplate", MediaType.TEXT_HTML);
}
然后,您可以创建Freemarker表示,以利用此类模板生成输出内容(在服务器端生成的动态内容),如下所述:

component.getDefaultHost().attach(new SampleApplication());
String rootUri = "file:///(...)/static-content";
Directory directory = new Directory(getContext(), rootUri);
directory.setListingAllowed(true);
router.attach("/static/", directory);
public class SampleApplication extends Application {
    (...)
    private Configuration configuration;

    public static Configuration configureFreeMarker(Context context) {
        Configuration configuration = new Configuration();
        ClassTemplateLoader loader = new ClassTemplateLoader(
            SampleAppApplication.class,
            "/org/myapp/sample/server/templates/");
        configuration.setTemplateLoader(loader);
        // configuration.setCacheStorage(new StrongCacheStorage());
        return configuration;
    }

    public Configuration getConfiguration() {
        return configuration;
    }
}
private SampleApplication getSampleApplication() {
    return (SampleApplication)getApplication();
}

private Representation toRepresentation(Map<String, Object> map,
    String templateName, MediaType mediaType) {
    return new TemplateRepresentation(templateName,
        getSampleApplication().getConfiguration(), map, mediaType);
}

@Get("html")
public Representation getHtml() {
    Map<String, Object> model = new HashMap<String, Object>();

    model.put("titre", "my title");
    model.put("users", getUsers());

    return toRepresentation(model,
        "myTemplate", MediaType.TEXT_HTML);
}
希望能有帮助。
蒂埃里

非常感谢。这个答案结构很好。我需要这个结构。我还有几个问题。我不知道我还能在这里写信……不客气!如果您的问题与此相关,我认为我们可以在评论中继续;-)如果没有,请随时在stackoverflow上发布一个新问题,我会回答你…再次感谢。我还没试过freemarker。如果freemarker有助于与JavaEE中的JSP相似的工作,那么在您的解释中有一句话“This i’s something to JSPs in JavaEE”。那么为什么不使用JSP/JavaEE呢。与JavaEE相比,使用JavaSE的好处到底是什么。因为看起来使用JavaSE需要额外的努力才能像JavaEE一样工作。例如,使用额外的工具、freemarker等扩展。当我在[restlet主页]()中查看restlet用户指南时。他们这样解释:-针对JavaEE的Restlet edition:“此版本旨在Java EE应用程序服务器内开发和部署Restlet应用程序,或者更准确地说是在诸如Apache Tomcat之类的Servlet容器内。”-针对JavaSE的Restlet edition:“此版本旨在使用Restlet引擎的内部HTTP服务器或Jetty等可插拔服务器在常规Java虚拟机内开发和部署Restlet应用程序。”关于JavaSE vs.JavaEE(),还有另一个答案:“JavaSE代表Java标准版,通常用于开发桌面应用程序,形成核心/基础API。JavaEE代表Java企业版,用于运行在服务器上的应用程序,例如web站点