使用JavaBeans的Servlets

4
我有一组三个servlet,每个servlet都有一个带有单选按钮的表单,可以将其值传递到下一个servlet。我正在尝试创建一个JavaBean类与servlet一起使用,并在从一个servlet到另一个servlet时保持它们的状态和单选按钮的选择。请问有人能提供JavaBean的示例代码吗?
以下是第一个servlet代码的部分内容:(其他两个servlet的其他问题也有同样的代码)
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet 1</title>");            
        out.println("</head>");
        out.println("<form  id=\"form1\" action = \"Servlet2\" method = \"POST\">");
        out.println("<input type = \"radio\" name = \"Q1\" value = \"Answer 1\"> Answer 1 <br />\n" +
                    "<input type = \"radio\" name = \"Q1\" value = \"Answer 2\"> Answer 2 <br />\n" +
                    "<input type = \"radio\" name = \"Q1\" value = \"Answer 3\"> Answer 3 <br /> <br />");

        out.println("<input type = \"radio\" name = \"Q2\" value = \"Answer 1\"> Answer 1 <br />\n" +
                    "<input type = \"radio\" name = \"Q2\" value = \"Answer 2\"> Answer 2 <br />\n" +
                    "<input type = \"radio\" name = \"Q2\" value = \"Answer 3\"> Answer 3 <br /> <br />");

        out.println("<input type = \"radio\" name = \"Q3\" value = \"Answer 1\"> Answer 1 <br />\n" +
                    "<input type = \"radio\" name = \"Q3\" value = \"Answer 2\"> Answer 2 <br />\n" +
                    "<input type = \"radio\" name = \"Q3\" value = \"Answer 3\"> Answer 3 <br /> <br />");
        out.println("<input type = \"submit\" value = \"Next\">");
        out.println("</body>");
        out.println("</html>");
    } finally {            
        out.close();
    }
}

谢谢你。

感谢您。


2
不论具体问题如何,您可能想要实现更好的“关注点分离” - 因此,您不应该将HTML放入Servlet中。相反,您可以使用JSP和JSTL,并将Java代码放入Servlet中。 - Lion
我明白了。谢谢您的回复,但是我被告知要这样做,所以不幸的是我必须坚持这样做。 - user1852114
2
Bean的代码?那很简单,只需要属性、getter和setter。将其存储在会话中或使用隐藏字段则更有趣。 - Dave Newton
实际上,我已经在其他servlet中使用了会话属性来传递单选按钮的值,但是bean的代码应该是什么?我该如何将其与会话一起使用? - user1852114
1
将鼠标放在您放置在问题上的“[javabeans]”标签上,直到出现黑色信息框。然后在其中单击“info”链接。 - BalusC
1个回答

5

这是一个简单的JavaBean类示例:

import java.io.Serializable;

public class AnswersBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String answer1;

    private String answer2;

    private String answer3;

    public String getAnswer1() {
        return answer1;
    }

    public void setAnswer1(String answer1) {
        this.answer1 = answer1;
    }

    public String getAnswer2() {
        return answer2;
    }

    public void setAnswer2(String answer2) {
        this.answer2 = answer2;
    }

    public String getAnswer3() {
        return answer3;
    }

    public void setAnswer3(String answer3) {
        this.answer3 = question3;
    }

}

在您的第二个Servlet中,您可以创建并填充所需信息的bean:
package com.example;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;

import com.example.AnswersBean;

public class Servlet2 extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
        String answer1 = request.getParameter("Q1");
        String answer2 = request.getParameter("Q2");
        String answer3 = request.getParameter("Q3");

        // you may check if the answers exist and validate them

        AnswersBean answersBean = new AnswersBean();
        answersBean.setAnswer1(answer1);
        answersBean.setAnswer2(answer2);
        answersBean.setAnswer3(answer3);

        // store bean in session
        request.getSession().setAttribute("answers", answersBean);

        // you now can forward to some view, for example some results.jsp
        request.getRequestDispatcher("/results.jsp").forward(request, response);
    }
}

现在在第三个Servlet中,您可以检查会话是否包含该Bean:
package com.example;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;

import com.example.AnswersBean;

public class Servlet3 extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
        AnswersBean answers = request.getSession().getAttribute("answers");

        if (answers == null) {
            // no bean was set in session
                    // do something
        } else {
            // there is a bean in session
                    // do something
        }

        // you now can forward to some view, for example some foo.jsp
        request.getRequestDispatcher("/foo.jsp").forward(request, response);

        // or do something else
    }
}


或者你可以使用表达式语言(EL)在JSP页面中直接检查bean,像这样:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Answers</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <c:choose>
        <c:when test="${empty answers}">
            <h3>There are currently no answers.</h3>
        </c:when>
        <c:otherwise>
            <h3>First answer:  ${answers.question1}</h3>
            <h3>Second answer: ${answers.question2}</h3> 
            <h3>Third answer:  ${answers.question3}</h3>
        </c:otherwise>
    </c:choose>
</body>
</html>

附言
请阅读以下内容:
JavaBeans
JavaBeans规范
Oracle的JavaBeans教程

更新
我建议您阅读这篇流行的Servlet和JSP教程,以进一步提高您的技能:
Servlet和JSP入门和中级教程


非常感谢informatik01。我只需要更多的帮助。在第三个servlet中,我是否需要像在第二个servlet中所做的那样,例如。'String answer4 = request.getParameter("Q4"); 等 AnswersBean answersBean = new AnswersBean(); answersBean.setAnswer4(answer4); 等' 以便编写到另一个页面,我可以打印结果? - user1852114
@user1852114 在我的示例中的第三个Servlet中,您可以从Session中检索AnswerBean,在第二个Servlet中您先前将其放入其中。当您执行request.getParameter("some_parameter")时,您通常会从HTML _form_中获取一些提交的参数。您可以根据您具体的情况自由地进行任何操作。 - informatik01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接