在Java Web应用程序中从Serlvet访问对象实例

在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

请你看看这个。我已经取得了很大的进步,但我现在仍停留在这一点上

我有一个服务AnnJAXB.java,它执行GET请求并将响应放入Ann类中,该类包含动画和信息类作为属性。我修改了服务以返回Ann,因此可以潜在地使用返回值。我在Ann、Anime和Info类上加了注释,说成是@Stateless

我有一个servlet ControllerServlet,我想用它最初将Ann的属性打印到JSP网页前端。我将最初位于AnnJAXB服务类中的代码放入servlet中。此代码基本上是for循环:

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");