投票管理系统案例-Java Web开发实例

1、表单的确认
• 客户端确认
– 减少服务器负载
– 缩短用户等待时间
– 兼容性难
• 服务器端确认
– 统一确认
– 兼容性强
– 服务器负载重
2、JSP与客户机的交互
• 从表单中获得参数
• 返回参数
• 表单的服务器端确认
3、从表单中获得参数
• JSP通过request内置对象获取表单信息
• 用不同的方法获取不同种类的信息
• 获取参数的主要方法:
– getParameter() 获取参数的值
(1)可以获得文本框、文本区域、单选、多选
的值
(2)表单中各元素的name属性是它的唯一标识,用它获取参数。
– getParameterNames() 获取参数的名称
– getParameterValues() 获取多个
4、向客户端输出
• 使用内置对象out
out.println(content)
• 使用“=”
<%= content% >
5、表单的服务器端确认
• 在客户端不能用JSP进行确认
• 分工:数据处理在服务器端
• 实效性:客户端得到服务器确认后表明数
据已经到达服务器
• 客户端兼容性好
• 缺点:加大服务器负载和用户等待时间

6、综合实验(客户端验证)
• 要求(客户端验证):
• 用户名与密码输入不能为空
• 用户名与密码的长度均须在4—10之间
• 性别必须选择(页面初始化时没有选择其中任何一个选项)
• 兴趣的选择数量在1—3之间(最少选择一个,最多选择三个)
• 说明为必填项
• 用户填写不符合要求的需要弹出警告对话框
• 以上要求用javascript验证

• 验证用户的所有输入,完全符合要求的转到显示用户填写信息结果页面
• 如果存在不符合要求的地方则Servlet转到一个jsp页面,页面内容为用户信息中不符合
• 对于服务器端验证不做具体要求,只要实现功能即可,无论采用什么方法都可以,但是必须用Servlet来实现,不可以使用jsp要求的信息

实现效果如下:
这里写图片描述

新建JSP页面userLogin.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script type="text/javascript">
    function validate()
    {
        var username = document.getElementsByName("username")[0];
        var password = document.getElementsByName("password")[0];
        var gender = document.getElementsByName("gender");
        var interest = document.getElementsByName("interest");
        var comment = document.getElementsByName("comment")[0];
        //如果用户名或密码不符合要求,则弹出对话框
        if(username.value.length < 1)
        {
            alert("用户名不能为空!");
            return false;
        }
        if(password.value.length < 1)
        {
            alert("密码不能为空!");
            return false;
        }
        if(username.value.length < 4 || username.value.length > 10)
        {
            alert("用户名长度应该介于4到10之间");       
            return false;
        }
        if(password.value.length < 4 || password.value.length > 10)
        {
            alert("密码长度应该介于4到10之间");        
            return false;
        }
        //如果性别没有选择,则弹出对话框
        if(!gender[0].checked && !gender[1].checked)
        {
            alert("性别必须要选择");
            return false;
        }
        //定义标志量n,n为多选框的选择个数
        var n = 0;
        for(var i = 0; i < interest.length; i++)
        {
            if(interest[i].checked)
            {
                n++;
            }
        }
        //判断标志量n是否符合选择的个数要求
        if(n < 1)
        {
            alert("兴趣至少选择一个!");
            return false;
        }
        if(n > 3)
        {
            alert("兴趣最多选择三个");
            return false;
        }
        //说明部分textarea不能为空
        if(comment.value.length < 1)
        {
            alert("说明必须要填写!");
            return false;
        }
        return true;
    }
    </script>
  </head>
  <body>

      <form onsubmit="return validate();">
 用户名:<input type="text" name="username"><br>
 密  码: <input type="password" name="password"><br>

 性别: 男<input type="radio" name="gender" value="男"> 
 &nbsp;&nbsp;女<input type="radio" name="gender" value="女"><br>

兴趣:足球<input type="checkbox" name="interest" value="足球">&nbsp;&nbsp;
篮球<input type="checkbox" name="interest" value="篮球">&nbsp;&nbsp;
排球<input type="checkbox" name="interest" value="排球">&nbsp;&nbsp;
羽毛球<input type="checkbox" name="interest" value="羽毛球">&nbsp;&nbsp;<br>

地址:
<select name="address">
    <option value="上海">上海</option>
    <option value="北京">北京</option>
    <option value="天津">天津</option>
</select>
<br>
说明:
<textarea name="comment" rows="15" cols="20"></textarea><br>

<input type="submit" value="点击确认">&nbsp;&nbsp;&nbsp;<input type="reset" value="重 置">
   </form>
  </body>
</html>

在性别、兴趣、地址代码段中,需要加入value值,否则服务器无法获取到用户在浏览器中的选中项。

7、综合实验(服务器端验证)
• 要求(客户端验证):
• 用户名与密码输入不能为空
• 用户名与密码的长度均须在4—10之间
• 性别必须选择(页面初始化时没有选择其中任何一个选项)
• 兴趣的选择数量在1—3之间(最少选择一个,最多选择三个)
• 说明为必填项
• 用户填写不符合要求的需要弹出警告对话框

• 验证用户的所有输入,完全符合要求的转到显示用户填写信息结果页面
• 如果存在不符合要求的地方则Servlet转到一个jsp页面,页面内容为用户信息中不符合
• 对于服务器端验证不做具体要求,只要实现功能即可,无论采用什么方法都可以,但是必须用Servlet来实现,不可以使用jsp要求的信息

新建ProcessServlet.java

package com.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ProcessServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        this.process(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        this.process(req, resp);
    }

    protected void process(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        req.setCharacterEncoding("utf-8");

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String gender = req.getParameter("gender");
        String[] interest = req.getParameterValues("interest");
        String address = req.getParameter("address");

        //编码格式转换,不转换使用utf-8时,中文会存在乱码(原本使用iso-8859-1)
        address = new String(address.getBytes("iso-8859-1"), "utf-8");
        System.out.println(req);

        String comment = req.getParameter("comment");
        //list中存放出错原因的所有信息
        List<String> list = new ArrayList<String>();
        //判断用户名是否符合条件
        if(null == username || "".equals(username))
        {
            list.add("用户名不能为空!");
        }
        else if (username.length() < 4)
        {
            list.add("用户名过短!");
        }
        else if(username.length() > 10)
        {
            list.add("用户名过长!");
        }
        //判断密码是否符合条件
        if(null == password || "".equals(password))
        {
            list.add("密码不能为空!");
        }
        else if(password.length() < 4)
        {
            list.add("密码过短!");
        }
        else if(password.length() > 10)
        {
            list.add("密码过长!");
        }
        //判断是否选择了性别,若用户没有选择,则gender的值为null
        if(null == gender)
        {
            list.add("性别没有选择!");
        }
        //判断选择的兴趣点个数是否符合条件
        if(null == interest)
        {
            list.add("兴趣至少选择一个!");
        }
        else if(interest.length > 3)
        {
            list.add("兴趣最多选择三个!");
        }
        //判断是否填写说明
        if(null == comment || "".equals(comment))
        {
            list.add("说明没有填写!");
        }

        resp.setCharacterEncoding("utf-8");
        //如果list为空,则说明没有返回错误信息,转到正确的页面上
        if(list.isEmpty())
        {
            req.setAttribute("username", username);
            req.setAttribute("password", password);
            req.setAttribute("gender", gender);
            req.setAttribute("interest", interest);
            req.setAttribute("address", address);
            req.getRequestDispatcher("loginSuccess.jsp").forward(req, resp);
        }
        else
        {
            //将错误信息放入集合error中
            req.setAttribute("error", list);
            req.getRequestDispatcher("loginFailure.jsp").forward(req, resp);
        }
    }
}

新建JSP前端页面userLogin.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>

<form action="ProcessServlet">
 用户名:<input type="text" name="username"><br>
 密  码: <input type="password" name="password"><br>

 性别: 男<input type="radio" name="gender" value="男"> 
 &nbsp;&nbsp;女<input type="radio" name="gender" value="女"><br>

 兴趣:足球<input type="checkbox" name="interest" value="足球">&nbsp;&nbsp;
篮球<input type="checkbox" name="interest" value="篮球">&nbsp;&nbsp;
排球<input type="checkbox" name="interest" value="排球">&nbsp;&nbsp;
羽毛球<input type="checkbox" name="interest" value="羽毛球">&nbsp;&nbsp;<br>

 地址:
<select name="address">
    <option value="上海">上海</option>
    <option value="北京">北京</option>
    <option value="天津">天津</option>
</select>
<br>
 说明:
<textarea name="comment" rows="15" cols="20"></textarea><br>

<input type="submit" value="点击确认">&nbsp;&nbsp;&nbsp;<input type="reset" value="重 置">
   </form>
  </body>
</html>

新建转入正确页面loginSucess.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'loginSuccess.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
 用户名:<%= request.getAttribute("username") %><br>
 密码:<%= request.getAttribute("password") %> <br>
 性别:<%= request.getAttribute("gender") %> <br>
 //兴趣为数组,需要进行遍历取出
 兴趣:<% String[] interest = (String[])request.getAttribute("interest");
for(String str : interest)
{
%>
 <%= str %> &nbsp;&nbsp;
 <%} %>   
<br>
 地址:<%= request.getAttribute("address") %><br>   
 说明:<%= request.getAttribute("comment") %>
  </body>
</html>

新建转入出错页面loginFailure.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'loginFailure.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
 错误信息如下:<br><br><br>
 //错误信息为数组list,需要进行遍历取出
<% List<String> list = (List<String>) request.getAttribute("error"); %>
//使用<ul>***</ul>,会将错误结果加圆点每条列出;使用<ol>***</ol>,会将错误结果加编号每条列出
<ol>
<%
for(String str : list)
{
%>
   <li><font color="#ff0000"><%= str %></font></li>
<%} %>

 </ol>  

  </body>
</html>

最后,在web.xml文件中写入:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <servlet>
    <servlet-name>ProcessServlet</servlet-name>
    <servlet-class>com.servlet.ProcessServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ProcessServlet</servlet-name>
    <url-pattern>/ProcessServlet</url-pattern>
  </servlet-mapping>

</web-app>
  • 9
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值