从Java Web应用程序中的Servlet访问对象的实例

时间:2015-04-16 22:36:56

标签: java class object

请你看看这个。我取得了很大的进步,但现在我仍然坚持这一点。

我有一个服务AnnJAXB.java,它执行GET请求并将响应放在Ann类中(其中包含Anime和Info类作为属性)。我修改了服务以返回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类ControllerServlet。注意我没有添加任何配置文件或类似的东西。我刚刚右键单击并创建了一个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();
    }
}

非常感谢你阅读。

2 个答案:

答案 0 :(得分:0)

科学网页不打印

out.println("<h1>Loop1</h1>"); 

假设它从未进入循环是正确的,因此:来自

的条件
(i=0, i< List.size(), i++) 

未得到满足。对于debadging目的,在自己的代码中,检查

@EJB
private Ann ann; //not null  

 ann.getAnn().size > 0

http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlElements.html

答案 1 :(得分:0)

user3474126 解决了以下问题:

我改变循环说:

for (Anime anime : annj.Unmarshalling("evangelion").getAnn()) {

并删除

annj.Unmarshalling("evangelion");