【发布时间】:2017-05-28 02:13:33
【问题描述】:
我正在尝试将从 Google App Engine 的数据存储区检索到的实体发送到 JSP 页面。在我的 servlet 中,我可以看到实体已正确恢复(我记录了一个属性)。但不知何故,在将响应发送回 JSP 页面时,我得到了标题中提到的错误。
这是我的 Servlet 代码:TweetPermalinkController.java
package com.socialwebapp;
import java.io.IOException;
// import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
@SuppressWarnings("serial")
public class TweetPermalinkController extends HttpServlet {
// private static final Logger log = Logger.getLogger(NewTweetController.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
String id = req.getPathInfo().split("/")[1];
System.out.println("25: " + id);
long tweetId = 0;
try{
tweetId = Long.parseLong(id);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("35: " + tweetId);
Entity tweet = null;
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Key tweetKey = KeyFactory.createKey("Tweet", tweetId);
try {
tweet = ds.get(tweetKey);
System.out.println((String) tweet.getProperty("message"));
resp.setContentType("text/html");
req.setAttribute("id", tweetId);
req.setAttribute("tweet", tweet);
req.getRequestDispatcher("show_tweet.jsp").forward(req, resp);
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
}
}
web.xml中的代码:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>IndexPage</servlet-name>
<servlet-class>com.socialwebapp.HomePageController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexPage</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>NewTweetPage</servlet-name>
<servlet-class>com.socialwebapp.NewTweetController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NewTweetPage</servlet-name>
<url-pattern>/new_tweet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>TweetPermalinkPage</servlet-name>
<servlet-class>com.socialwebapp.TweetPermalinkController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TweetPermalinkPage</servlet-name>
<url-pattern>/tweet/*</url-pattern>
</servlet-mapping>
</web-app>
JSP:show_tweet.jsp:
<h2>Show Single Tweet</h2>
这是我在控制台中看到的日志和错误: https://pastebin.com/gqKvTVBK
我不明白为什么我看到下面几行的第 4 行。前 3 行符合预期,我不明白为什么我看到我的 jsp 文件的名称,我什至没有在任何地方记录它:
25: 6544293208522752
35: 6544293208522752
新的
25:show_tweet.jsp
java.lang.NumberFormatException:对于输入字符串:“show_tweet.jsp”35: 0
我花了半天时间试图弄清楚这一点。任何帮助或指导将不胜感激。
这里是回购链接:https://github.com/ghoshabhi/SocialWebApp/
TIA!
【问题讨论】:
-
函数的第一行写
System.out.println(req.getPathInfo())看看路径是什么。看起来这个函数正在响应 /tweet/show_tweet.jsp 以及 /tweet/some-id。然后,找出使用 /tweet/show_tweet.jsp 地址调用此函数的原因。
标签: java jsp google-app-engine servlets