java 带有 JavaBean 的 Servlet
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14307633/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Servlets with JavaBeans
提问by user1852114
I have a set of three servlets, each one of them has a form with radio buttons that passes its values to the next servlet. What I am trying to do is to make a JavaBean class to use with the servlets and keep the state of them and the choices of the radio buttons while going from one servlet to another. Could anyone suggest some sample code for the JavaBean please?
我有一组三个 servlet,每个都有一个带有单选按钮的表单,可以将其值传递给下一个 servlet。我想要做的是制作一个 JavaBean 类来与 servlet 一起使用,并在从一个 servlet 转到另一个 servlet 时保持它们的状态和单选按钮的选择。谁能建议一些 JavaBean 的示例代码?
Here is some of the first servlet code:
这是一些第一个 servlet 代码:
(The other two servlets have same code for other questions)
(其他两个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();
}
}
Thank you.
谢谢你。
回答by informatik01
Here is a simple JavaBean class example:
这是一个简单的 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;
}
}
In your second Servlet you can create and populate your bean with the required information:
在您的第二个 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);
}
}
Now in the third Servlet you can check if the session contains the bean:
现在在第三个 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
}
}
Or you can check the bean right inside some JSP page using Expression Language(EL) like this:
或者,您可以使用表达式语言(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>
P.S.
Read this:
JavaBeans
JavaBeans Specification
Oracle's JavaBeans tutorials
PS
阅读:
JavaBeans
JavaBeans 规范
Oracle 的 JavaBeans 教程
UPDATE
I suggest you read this popular tutorial on Servlets and JSP to further improve your skills:
Beginning & Intermediate Servlet & JSP Tutorials
更新
我建议你阅读这个关于 Servlets 和 JSP 的流行教程,以进一步提高你的技能:
初级和中级 Servlet 和 JSP 教程