从旧的Java过渡到Play,Servlet问题
Transition from old Java to Play, Servlet issue
我必须使用 Play 从旧的 Java 代码移动到新的代码!框架。
在旧代码中,我使用 Ext-JS(Javascript 框架)调用了 Java servlet,方法是这样:
function getTree()
{
var store = Ext.create('Ext.data.TreeStore',
{
root:
{
text: 'System',
id: 'root',
expanded: true
},
proxy:
{
type: 'ajax',
url: 'TreeServlet',
extraParams:
{
mode:'getChildren'
},
reader:
{
type:'json',
root:'result'
}
}
});
现在,我想用Play!来做同样的事情,但我不知道如何使用它。
.在 routes.conf 中:
GET /tree controllers.Application.makeTree()
.在控制器中。应用:
public static Result makeTree(){
// What shoul I put here to call the "Servlet"
}
我不想使用 Servlet,但我不知道该怎么做。
谢谢你的帮助!
编辑 1:
谢谢大家!
以下是我最终实现目标的方式:
public class Tree extends Controller
{
private MenuManager menuManager;
String node;
String mode;
String hash;
ObjectNode response;
public void createTree() throws IOException{
this.menuManager = MenuManager.getMenuManager();
getParams();
createJson(mode, node, hash);
}
public static Result returnJson() throws IOException{
Tree t = new Tree();
t.createTree();
return ok(t.response);
}
}
在路线上:
GET /tree controllers.Tree.returnJson()
你们怎么看?好的做法?
在早期的 play 框架中,您只需为控制器中的每个请求处理程序创建静态方法。但是在较新的版本中(在播放 2.0 之后),您不需要静态方法,您可以使用普通的公共方法并在以"@"符号为前缀的路由中配置它。
并且不要在控制器类中维护或声明属性。因为游戏是一个事件驱动的框架,不像基于原始的 servlet 框架。它提供 REST,并且不像在 servlet 中那样维护任何 httpsession。会话仅以 Cookie 的形式提供。
下面是代码的重新修改版本,
public class TreeController extends Controller
{
public void createTree() throws IOException{
MenuManager menuManager = MenuManager.getMenuManager();
String mode = request().getQueryString("mode");
String node = request().getQueryString("node");
String hash = request().getQueryString("hash");
TreeNodeDto treeObject = menuManager.buildTree();
ok(treeObject.toJson());
}
}
public class BaseDto<T extends BaseDto<T>> implements Serializable{
public JsonNode toJson() {
return Json.toJson(this);
}
public T fromJson(JsonNode jsonObject) {
return (T) Json.fromJson(jsonObject, this.getClass());
}
}
public static class TreeNodeDto extends BaseDto {
public String hash;
public String name;
public Set<TreeNodeDto> children;
// Override equals and hashcode, because we are using "set" to maintain the child nodes.
}
路线
GET /tree @controllers.TreeController.createTree()
希望这会给出一些想法。
干杯。。!!!
检查 WS 对象:https://www.playframework.com/documentation/2.3.x/JavaWS
似乎从 Servlet 返回的是一个 Json,所以在这里检查如何处理 json:https://www.playframework.com/documentation/2.3.x/JavaJsonActions
我相信这样的事情应该做到
public static Promise<Result> makeTree() {
final Promise<Result> resultPromise = WS.url("TreeServlet").setHeader("Content-Type", "application/json").get().map(
new Function<WSResponse, Result>() {
public Result apply(WSResponse response) {
return ok("Feed title:" + response.asJson().findPath("result"));
}
}
);
return resultPromise;
}
下面是你的 http 请求的结构,
public static Result makeTree() {
TreeDto treeDto=new TreeDto();
JsonNode jsonResponse = Json.newObject();
try {
treeDto = <<Logic to get the tree objects from db>>;
if(treeDto != null) {
jsonResponse = Json.toJson(treeDto);
}
} catch (XODAOException e) {
Logger.error("Error while building the tree.", e);
jsonResponse = generateErrorResponse("Error while building tree.", e);
}
return ok(jsonResponse);
}
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- 使用angularjs向浏览器发送servlet响应(下载功能)
- jqGrid树网格问题
- 当值更改时,在servlet中自动获取textarea值,无需单击按钮
- 使用正则表达式评估电子邮件地址时出现性能问题
- 从旧的Java过渡到Play,Servlet问题
- 数据无法通过 Java Servlet 的问题
- 将javascript数组传递给servlet问题
- 从jsp到servlet接收数据时出现问题