带有JavaBeans的servlet

带有JavaBeans的servlet,java,servlets,javabeans,Java,Servlets,Javabeans,我有一组三个servlet,每个servlet都有一个带有单选按钮的表单,该表单将其值传递给下一个servlet。我试图做的是创建一个JavaBean类来与servlet一起使用,并在从一个servlet转到另一个servlet时保持它们的状态和单选按钮的选择。有人能为JavaBean推荐一些示例代码吗 以下是一些第一个servlet代码: (其他两个servlet对于其他问题具有相同的代码) protectedvoidprocessrequest(HttpServletRequest请求,Ht

我有一组三个servlet,每个servlet都有一个带有单选按钮的表单,该表单将其值传递给下一个servlet。我试图做的是创建一个JavaBean类来与servlet一起使用,并在从一个servlet转到另一个servlet时保持它们的状态和单选按钮的选择。有人能为JavaBean推荐一些示例代码吗

以下是一些第一个servlet代码:

(其他两个servlet对于其他问题具有相同的代码)

protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
out.println(“”);
out.println(“”);
out.println(“Servlet 1”);
out.println(“”);
out.println(“”);
out.println(“答案1
\n”+ “答案2
\n”+ “回答3

”; out.println(“答案1
\n”+ “答案2
\n”+ “回答3

”; out.println(“答案1
\n”+ “答案2
\n”+ “回答3

”; out.println(“”); out.println(“”); out.println(“”); }最后{ out.close(); } }

谢谢。

这里是一个简单的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>

答案
目前没有答案。
第一个答案:${answers.question1}
第二个答案:${answers.question2}
第三个答案:${答案.问题3}

p.S.
阅读以下内容:


更新
我建议您阅读这个关于servlet和JSP的流行教程,以进一步提高您的技能:

与具体问题无关。您可能希望实现更好的关注点分离——因此,您不应该将HTML放入servlet中。您可以将JSP与JSTL一起使用,并将Java代码放入servlet中。谢谢你的回复,但是我被告知要这么做,所以很遗憾我不得不坚持下去。bean的代码?这是最简单的部分,只是属性、getter和setter。将其存储在会话中或使用隐藏字段更有趣。实际上,我在其他servlet中使用了会话属性来传递收音机的值,但是bean的代码是什么?我将如何在会话中使用它?将鼠标放在问题上的
[javabeans]
标记上,直到出现一个黑色信息框。然后点击这里的信息链接。非常感谢信息01。我只是需要更多的帮助。在第三个servlet中,我是否必须执行与第二个servlet相同的操作,例如'String answer4=request.getParameter(“Q4”);etc AnswersBean AnswersBean=新的AnswersBean();回答Bean.setAnswer4(回答4);etc'以便编码到另一个页面,在那里我可以打印结果?@user1852114在我的示例中的第三个Servlet中,您从会话中检索AnswerBean,您之前将它放在第二个Servlet中。当您执行
request.getParameter(“some_parameter”)
时,通常会从HTML表单中提交一些参数。在你的具体情况下,你可以自由地做任何你需要的事情。
<%@ 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>