Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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
用于在HTML和XML之间切换的JSP语法_Html_Xml_Jsp_Postback - Fatal编程技术网

用于在HTML和XML之间切换的JSP语法

用于在HTML和XML之间切换的JSP语法,html,xml,jsp,postback,Html,Xml,Jsp,Postback,我希望有一个JSP页面可以执行以下操作: 如果方法为GET,查询字符串为NULL,则使用TEXTAREA和SUBMIT按钮绘制HTML表单 如果方法为GET且querystring不为NULL或方法为POST,则使用GET/POST变量生成XML文档 我的第一个方法草稿(测试POST或GET)在语法上失败: query.jsp <%@ page import="..." %> <%! private void to_xml() { ...

我希望有一个JSP页面可以执行以下操作:

  • 如果方法为GET,查询字符串为NULL,则使用TEXTAREA和SUBMIT按钮绘制HTML表单
  • 如果方法为GET且querystring不为NULL或方法为POST,则使用GET/POST变量生成XML文档
我的第一个方法草稿(测试POST或GET)在语法上失败:

query.jsp

<%@ page import="..." %>
<%!
  private void to_xml() {
  ...                
  }
%>
<% if (request.getMethod()="POST") { %>

<?xml version="1.0" encoding="UTF-8"?>

<%
  //generate XML 
  to_xml();
} 

else { 

  //draw HTML form
%>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>XML Query</title>
    </head>
    <body>
        <form action="query.jsp" method="post">
            <table cellpadding="2">
                <tr><td>Query:</td></tr>
                <tr><td><textarea name="query" cols="60" rows="10" ></textarea>
                <tr><td><input type="submit" value="Go"></td></tr>
            </table>
        </form>
    </body>
</html>

<% } %>

XML查询
查询:

我相信有更好的方法可以做到这一点,但我的经验是有限的。至于您的具体问题:在Java中,字符串是对象,而不是原语。您需要通过方法来比较对象,而不是通过相等运算符
=
(或者更不正确的是,赋值运算符
=
)。当直接在JSP文件而不是Java类中编写原始Java代码时,这并没有什么不同



至于更好的方法,只需使用servlet

将JSP放入
/WEB-INF/query.JSP
以防止直接访问,并删除所有老式的scriptlet,使其成为一个完整的视图


XML查询
查询:
创建一个执行控制任务的servlet:

@WebServlet(urlPatterns={”/query})
公共类QueryServlet扩展了HttpServlet{
@凌驾
受保护的无效服务(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
if(request.getParameterMap().isEmpty()){
showJsp(请求、响应);
}否则{
showXml(请求、响应);
}
}
私有void showJsp(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
request.getRequestDispatcher(“/WEB-INF/query.jsp”).forward(请求,响应);
}
私有void showXml(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
// ...
}
}
按打开页面


然而,我想知道混合使用POST/GET-here有何用处,因为您还想截取查询字符串。只需从
中删除
method=“post”
,并将上述示例中的
service()
方法名称替换为
doGet()
。通过这种方式,表单提交URL也变成了可书签的(这也是谷歌的工作之一)。

在阅读了您的回复、思考和研究之后,我真正想要的似乎是Java的RESTful接口。虽然我可以使用Jersey或RESTEasy,但可能实现的JAX-RS的选定部分将满足我的需要。这也是我最初的想法:)这只是另一个学习曲线。请注意,Jersey和RESTEasy都是具体的JAX-RSAPI实现。就像Tomcat是一个具体的JSP/ServletAPI实现一样,我实际上只有两个类:Session和InfoObjects(BusinessObjects)。我需要会话的GET/POST/DELETE(auth form/authenticate/logout)和InfoObjects的GET(获取一个或多个对象)。虽然我相信这些框架会使这变得容易,但我知道要增加额外的复杂性。有一种不那么复杂的方法吗?好吧,使用普通servlet就不那么复杂了。基本上,我在我的答案里写的是你需要的一切。但使用JAX-RS将使您在未来的更改和扩展方面具有更大的灵活性。注意,JAX-RS是在基本ServletAPI之上设计的。因此,它使用一个普通的servlet,但只是将所有可能的样板/重复抽象出来,这样您就不需要对整个JSP/servlet代码执行Ctrl+C/Ctrl+V操作,但是,比方说,只需再添加一个方法即可。只需在请求范围中设置一个属性,如
request.setAttribute(“foo”,foo)
,并通过EL-like
${foo}
在转发的JSP中访问它。另见和。