1 问题设置页面(1) 设置投票主题 问题数量 是否可以多选。利用jsp实现
<form action="TouPiao_SetQuestion2.jsp" method="post">
主题: <input type="text" name="theme" /><br><br>
问题数量:<input type="text" name="count"/><br><br>
支持多选:<input type="checkbox" name="mutichecked" checked="checked" /> <br><br>
<input type="submit" value="确定"/> <input type="reset" value="重置"/>
2 问题设置页面(2)根据前一页面提供的问题数量,显示问题表单,利用jsp实现。向severlet提交表单时,利用<input type="hidden">实现
<!-- 获取上一页设置的内容 这种获取checkbox值的方法太low了~~~~(>_<)~~~~ -->
<%
String theme1 = "";
theme1 = request.getParameter("theme");
int count = 0;
count = Integer.parseInt(request.getParameter("count"));
String mutichecked = request.getParameter("mutichecked");
boolean ifmutichecked = false;
if (mutichecked != null && mutichecked.equals("on"))
{
ifmutichecked = true;
}
%>
<form action="/test/TouPiao_SaveQuestion" method="post">
请为主题:"<%=theme1 %>"设置问题<br><br>
<%
for(int i=0;i<count;i++)
{
int a=i+1;
out.println("问题"+a+": <input type='text' name='question"+i+"'/> <br><br>");
}
%>
<input type="hidden" value=<%=theme1 %> name="theme"/>
<input type="hidden" value=<%=ifmutichecked %> name="mutichecked"/>
<input type="hidden" value=<%=count%> name="count"/>
<input type="submit" value="确定"/> <input type="reset" value="重置"/>
</form>
3 severlet 接受表单提交信息,并存储在XML文档中
注意:当Web项目引入jdom jar包时,需将jar包放在WEB-INF/lib下面
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/**
* 获取主题 问题数量 支持多选
*/
String themeString=request.getParameter("theme");
int count = 0;
count = Integer.parseInt(request.getParameter("count"));
String mutichecked = request.getParameter("mutichecked");
System.out.println(themeString);
/**
* 获取问题
*/
ArrayList <String> questionsArrayList=new ArrayList<String>();
for (int i=0;i<count;i++)
{
String question=request.getParameter("question"+i);
questionsArrayList.add(question);
System.out.println(question);
}
String result="";
/**
* 保存问题至XML
*/
try
{
Document document = new Document();
Element root = new Element("root");
document.addContent(root);
//主题
Element themeElement=new Element("theme");
themeElement.setText(themeString);
root.addContent(themeElement);
//是否多选
Element muticheckElement=new Element("muticheck");
muticheckElement.setText(mutichecked);
root.addContent(muticheckElement);
// 问题
Element questionsElement =new Element("question");
for (int i=0;i<questionsArrayList.size();i++)
{
String queString=questionsArrayList.get(i);
questionsElement.addContent(new Element("question"+i).setText(queString));
}
root.addContent(questionsElement);
//保存XML文档
Format format = Format.getPrettyFormat();
format.setIndent(" ");
XMLOutputter outXML = new XMLOutputter(format);
outXML.output(document, new FileWriter("E:/toupiao/"+themeString+".xml"));
result="succes";
}
catch (Exception e)
{
result=e.getMessage();
}
/**
* 向页面返回结果
*/
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>result</TITLE></HEAD>");
out.println(" <BODY>");
out.println(result);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
4 根据本地拥有的投票主题,初始化选择主题页面。
<!-- 获取当前可选择的投票主题 -->
<%
ArrayList<String> allTheme=new ArrayList<String>();
File file=new File("E:/toupiao");
File [] allXml= file.listFiles();
%>
<body>
<form action="/test/TouPiao_SetQuestions" method="post">
欢迎使用投票系统!请选择投票主题:<br>
主题
<select name="check">
<%
for(File subfile:allXml)
{
out.print("<option>");
out.print(subfile.getName());
out.println("</option>");
}
%>
</select><br>
<input type="submit">
</form>
</body>
5 根据选择的主题结果,现在投票主题
注:当使用File初始化方法时,本地文件夹路径应为“/E:/toupiao” 而不是“E:/toupiao”。如果使用后者,将会使得路径变为tomcat的根目录+“E:/toupiao”。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/**
* 获得参数
*/
String choose = request.getParameter("check");
/**
* 解析XML文档
*/
SAXBuilder builder = new SAXBuilder();
org.jdom.Document doc;
/**
* 获得所有问题
*/
ArrayList<String> allquestionArrayList = new ArrayList<String>();
String themeString = "";
String ifmuticheckString = "";
try
{
doc = builder.build(new File("/E:/toupiao/" + choose ));
org.jdom.Element element = doc.getRootElement();
themeString = element.getChild("theme").getText();
ifmuticheckString = element.getChild("muticheck").getText();
org.jdom.Element questions = element.getChild("question");
java.util.List list = questions.getChildren();
for (int i = 0; i < list.size(); i++)
{
org.jdom.Element element2 = (org.jdom.Element) list.get(i);
allquestionArrayList.add(element2.getText());
}
}
catch (JDOMException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 构造HTML文档
*/
String htmlQuestion = "";
for (int i = 1; i <= allquestionArrayList.size(); i++)
{
if (ifmuticheckString.equals("true"))
{
htmlQuestion += "<input type='checkbox' name='question'"+i+" />Q "+ i + ":"
+ allquestionArrayList.get(i - 1)
+ "<br>";
}
else
{
htmlQuestion +="<input type='radio' name='question' /> Q" + i + ":"
+ allquestionArrayList.get(i - 1)
+ "<br>";
}
}
String formQuestion="<form action='TouPiao_GetResult.jsp' method='post'>" +
"please chose the question about '"+themeString+"'<br>"+
htmlQuestion+
"<input type='submit' value='submit'>"+"</form>";
/**
* 在页面上显示
*/
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(formQuestion);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}