有没有办法让多个链接转到一个空白页面,但每个不同的链接在页面上显示一个单独的查询而不是单独的页面来执行此操作?或者我要求多少?我是用JSP页面做的。任何帮助将不胜感激。
感谢。
答案 0 :(得分:3)
是。使用GET或POST变量,您可以根据传递的参数更新页面显示:
/page.jsp?arg1=val1&arg2=val2
/page.jsp?arg1=val2
然后是page.js代码:
String arg1 = request.getParameter("arg");
String arg2 = request.getParameter("arg2");
if (arg1 == "val1")
// Do something
if (arg2 == "val2")
// Do something else
答案 1 :(得分:3)
那里有Servlet
。您可以利用它来高度控制,预处理和后处理请求。您可以使用查询字符串将请求特定信息传递给servlet,例如http://example.com/context/servlet?name1=value1&name2=value2
,可以在Servlet中访问,如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name1 = request.getParameter("name1"); // Now contains "value1".
String name2 = request.getParameter("name2"); // Now contains "value2".
// Do your business thing with them.
}
您还可以使用请求pathinfo将请求特定信息传递给servlet,这样可以产生更好的URL,例如: http://example.com/context/servlet/value1/value2
,可以在Servlet中访问,如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pathInfo = request.getPathInfo(); // Now contains "/value1/value2".
// Do your business thing with them.
}
在这两种情况下,Servlet
当然都映射在web.xml
中,如下所示:
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>com.example.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
要在JSP中显示结果,您需要将数据存储在请求范围中,并将请求转发给JSP以供显示。 E.g:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String query = request.getParameter("query");
List<Result> results = searchDAO.list(query);
request.setAttribute("results", results);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
}
这里Result
类只是一个普通的 JavaBean 类,大致代表数据库表的一行。 JSP放在/WEB-INF
中,以防止通过URL进行直接访问。您当然希望仅 servlet可以访问它。在JSP中,您可以依次使用Expression Language来访问任何作用域属性,例如上面示例中的results
。您还可以在JSP中使用taglib来控制页面流和输出。一个众所周知的标准taglib是JSTL(只需在/WEB-INF/lib
中删除jstl-1.2.jar即可使其工作),这是一个如何在JSP中很好地显示结果的示例:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
<c:forEach items="${results}" var="result">
<tr>
<td>${result.name}</td>
<td>${result.description}</td>
</tr>
</c:forEach>
</table>
要了解有关JSP / Servlet的更多信息,我可以推荐Marty Hall's Coreservlets.com tutorials。要了解有关以正确方式(DAO模式)与数据库交互的更多信息,您可能会发现this article也很有用。
祝你好运。答案 2 :(得分:0)
war / WEB-INF上有一个文件web.xml。
您可以在文件中输入以下内容。
<servlet-mapping>
<servlet-name>myApp1</servlet-name>
<url-pattern>/hello/dolly</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>myApp2</servlet-name>
<url-pattern>/bye/bunny</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>myApp1</servlet-name>
<servlet-class>
misc.apps.enter.theDragon
</servlet-class>
</servlet>
<servlet>
<servlet-name>myApp2</servlet-name>
<servlet-class>
misc.apps.enter.theDragon
</servlet-class>
</servlet>
以下是解释:
所以,现在两条路径
实际上最终调用相同的servlet misc / apps / enter / theDragon.java
然后在servlet代码中找到misc / apps / enter / theDragon.java 你有代码
this.requestUri = request.getRequestURI();
if (this.requestUri.contains("/hello/dolly")){
happyRoutine();
else // if (this.requestUri.contains("/bye/bunny"))
{
response.redirect("whatever page");
}
但是,你想映射一个jsp而不是一个非jsp servlet,不是吗? 看看下面的web.xml条目,我相信你不需要任何条目 进一步解释两个url路径如何映射到同一个jsp。 然后,在jsp内部,再次使用request.getRequestURI()来找出哪个 url用于调用jsp,然后进行你想要的各自动作。
<servlet-mapping>
<servlet-name>empJSP1</servlet-name>
<url-pattern>/hello/dolly</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>empJSP2</servlet-name>
<url-pattern>/bye/bunny</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>empJSP1</servlet-name>
<jsp-file>/employees/emp.jsp</jsp-file>
</servlet>
<servlet>
<servlet-name>empJSP2</servlet-name>
<jsp-file>/employees/emp.jsp</jsp-file>
</servlet>