在Java Web应用程序中从Serlvet访问对象实例
请你看看这个。我已经取得了很大的进步,但我现在仍停留在这一点上 我有一个服务AnnJAXB.java,它执行GET请求并将响应放入Ann类中,该类包含动画和信息类作为属性。我修改了服务以返回Ann,因此可以潜在地使用返回值。我在Ann、Anime和Info类上加了注释,说成是@Stateless 我有一个servlet ControllerServlet,我想用它最初将Ann的属性打印到JSP网页前端。我将最初位于AnnJAXB服务类中的代码放入servlet中。此代码基本上是for循环:在Java Web应用程序中从Serlvet访问对象实例,java,class,object,Java,Class,Object,请你看看这个。我已经取得了很大的进步,但我现在仍停留在这一点上 我有一个服务AnnJAXB.java,它执行GET请求并将响应放入Ann类中,该类包含动画和信息类作为属性。我修改了服务以返回Ann,因此可以潜在地使用返回值。我在Ann、Anime和Info类上加了注释,说成是@Stateless 我有一个servlet ControllerServlet,我想用它最初将Ann的属性打印到JSP网页前端。我将最初位于AnnJAXB服务类中的代码放入servlet中。此代码基本上是for循环: fo
for (Anime anime : ann.getAnn()) {
似乎for循环的任何内容都不会显示为html或Ann/Anime属性
我的服务/方法类AnnJAXB:
package main;
import entities.*;
import javax.xml.bind.*;
import java.io.*;
import java.net.URL;
import java.net.MalformedURLException;
import javax.ejb.Stateless;
@Stateless
public class AnnJAXB {
public Ann Unmarshalling(String searchString) throws JAXBException, MalformedURLException {
JAXBContext jc = JAXBContext.newInstance(Ann.class);
Unmarshaller ums = jc.createUnmarshaller();
URL url = new URL( "http://cdn.animenewsnetwork.com/encyclopedia/api.xml?title=~"+searchString );
Ann ann = (Ann) ums.unmarshal(url);
return ann;
}
}
我的serlvet班长服务。注意,我没有向配置文件或类似文件添加任何内容。我只是右键单击并创建了一个servlet类并开始修改它
package main;
import entities.Anime;
import entities.Ann;
import entities.Info;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author J
*/
@WebServlet(name = "ControllerServlet", urlPatterns = {"/ControllerServlet"})
public class ControllerServlet extends HttpServlet {
// @EJB
// private AnnJAXB annJAXB = new AnnJAXB();
@EJB
private Ann ann;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ControllerServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ControllerServlet at " + request.getContextPath() + "</h1>");
AnnJAXB an = new AnnJAXB();
try{
an.Unmarshalling("evangelion");
}catch(Exception e){}
for (Anime anime : ann.getAnn()) {
out.println("<h1>Loop1</h1>");
out.println("<h1>ID: " + anime.getId() + "</h1>");
out.println("<h1>Name: " + anime.getName() + "</h1>");
for (Info temp : anime.getAnime()) {
if (temp.getSrc() != null) {
out.println("<h1>Info: " + temp.getSrc() + "</h1>");
}
}
}
out.println("<h1>End</h1>");
out.println("</body>");
out.println("</html>");
}
}
(other default methods here)
当它运行时会发生什么:
IDE要求我提供一个执行url,我将其保留为/ControllerServlet?。将打开一个网页并打印以下文字:
Servlet ControllerServlet at /prototype9
End
它应该在这些词之间显示Ann属性
以下是供参考的Ann类:
package entities;
import javax.xml.bind.annotation.*;
import java.util.*;
import javax.ejb.Stateless;
@Stateless
@XmlRootElement(name = "ann")
public class Ann {
private List<Anime> Ann = new ArrayList<Anime>();
@XmlElement(name="anime")
public List<Anime> getAnn() {
return Ann;
}
public void setAnn(List<Anime> Ann) {
this.Ann = Ann;
}
public Ann() {
super();
}
}
非常感谢您的阅读。科学网页不会打印
out.println("<h1>Loop1</h1>");
及
user3474126解决方法如下:
我将循环改为:
for (Anime anime : annj.Unmarshalling("evangelion").getAnn()) {
并删除
annj.Unmarshalling("evangelion");
修复-请参阅线程顶部我从问题中删除了您的答案,并将其作为社区wiki答案提供,因此编辑它更容易,而且我不会从中获得任何声誉,因为它不是我的答案。如果你有另一个问题,并且你自己找到了解决方案,那么你也应该写一个答案,无需将其作为社区答案,而不是编辑你的问题。谢谢您:。
ann.getAnn().size > 0
for (Anime anime : annj.Unmarshalling("evangelion").getAnn()) {
annj.Unmarshalling("evangelion");