问题
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?
Here is some of the first servlet code:
(The other two servlets have same code for other questions)
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.
回答1:
Here is a simple JavaBean class example:
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:
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:
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:
<%@ 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
UPDATE
I suggest you read this popular tutorial on Servlets and JSP to further improve your skills:
Beginning & Intermediate Servlet & JSP Tutorials
来源:https://stackoverflow.com/questions/14307633/servlets-with-javabeans