带有 JavaBean 的 Servlet

2024-03-12

我有一组三个 servlet,每个 servlet 都有一个带有单选按钮的表单,可将​​其值传递给下一个 servlet。我想做的是创建一个与 servlet 一起使用的 JavaBean 类,并在从一个 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();
    }
}

谢谢。


下面是一个简单的 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
    }
}


或者您可以使用以下命令检查某些 JSP 页面内的 bean表达语言 https://stackoverflow.com/tags/el/info(EL)像这样:

<%@ 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>

P.S.
读这个:
JavaBeans https://stackoverflow.com/tags/javabeans/info
JavaBeans 规范 http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html
Oracle 的 JavaBean 教程 http://docs.oracle.com/javase/tutorial/javabeans/

UPDATE
我建议您阅读这篇关于 Servlet 和 JSP 的流行教程,以进一步提高您的技能:
初级和中级 Servlet 和 JSP 教程 http://courses.coreservlets.com/Course-Materials/csajsp2.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 JavaBean 的 Servlet 的相关文章

随机推荐