• 计算器 & 登录注册 案例 model1 model2 开发模式 BeanUtils


    JSP 两种开发模式

    JSP model1 : JSP + JavaBean 组合 ,适合开发中小型简单应用,JSP负责业务流程控制、页面显示;JavaBean 负责数据封装和处理
    JSP model2 : Servlet + JSP + JavaBean 组合,符合MVC 设计模式,适合开发业务流程复杂大型应用,JSP 只负责页面显示,JavaBean负责数据封装和处理,Servlet负责业务流程控制,JavaBean、JSP调度 --------- 分工明确,便于维护

    计算器案例:

    calculator.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
        function validateForm(){
            var first = document.getElementById("first").value; // 这个v必须小写
            var second = document.getElementById("second").value;
            // 判断两个参数 必须为数字
            if(isNaN(first) || isNaN(second)){
                // 输入非法 
                alert("输入的参数必须为数字!");
                return false; // 阻止form 提交
            }
        }
    </script>
    </head>
    <body>
    <!-- 页面由两个部分组成 -->
    <!-- 显示运算结果 -->
    <!-- 封装请求参数 到JavaBean对象中 -->
    <jsp:useBean id="calculator" class="cn.itcast.domain.Calculator" scope="page"></jsp:useBean>
    <jsp:setProperty property="*" name="calculator"/>
    <!-- 执行运算,显示计算结果 -->
    <h3>计算结果是 :${calculator.firstNum } ${calculator.operator } ${calculator.secondNum } = ${calculator.result }</h3>
    <hr/>
    <!-- 计算参数输入form表单 -->
    <form action="/day9/calculator.jsp" method="post" onsubmit="return validateForm();">
        <table>
            <tr>
                <td>第一个参数</td>
                <td><input type="text" name="firstNum" id="first"/></td>
            </tr>
            <tr>
                <td>运算符</td>
                <td>
                    <select name="operator">
                        <option value="+">+</option>
                        <option value="-">-</option>
                        <option value="*">*</option>
                        <option value="/">/</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>第二个参数</td>
                <td><input type="text" name="secondNum" id="second" /></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="计算" />
                </td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    Calculator.java

    package cn.itcast.domain;
    
    import java.math.BigDecimal;
    
    /**
     * 存放计算器数据
     * 
     * @author seawind
     * 
     */
    public class Calculator {
        private String firstNum = "0";
        private String operator = "+";
        private String secondNum = "0";
        private double result;
    
        public String getFirstNum() {
            return firstNum;
        }
    
        public void setFirstNum(String firstNum) {
            this.firstNum = firstNum;
        }
    
        public String getOperator() {
            return operator;
        }
    
        public void setOperator(String operator) {
            this.operator = operator;
        }
    
        public String getSecondNum() {
            return secondNum;
        }
    
        public void setSecondNum(String secondNum) {
            this.secondNum = secondNum;
        }
    
        public void setResult(double result) {
            this.result = result;
        }
    
        // 在获得result的时候,进行计算
        public double getResult() {
            // 将两个参数 转换 double 类型
            BigDecimal num1 = new BigDecimal(firstNum);
            BigDecimal num2 = new BigDecimal(secondNum);
            BigDecimal result = null;
            if (operator.equals("+")) {
                result = num1.add(num2);
            } else if (operator.equals("-")) {
                result = num1.subtract(num2);
            } else if (operator.equals("*")) {
                result = num1.multiply(num2);
            } else if (operator.equals("/")) {
                if (num2.doubleValue() == 0) {
                    throw new RuntimeException("除数不能为0!");
                }
                result = num1.divide(num2, 9, BigDecimal.ROUND_HALF_UP);
            }
            return result.doubleValue();
        }
    
        // public double getResult() {
        // // 将两个参数 转换 double 类型
        // double num1 = Double.parseDouble(firstNum);
        // double num2 = Double.parseDouble(secondNum);
        // if (operator.equals("+")) {
        // result = num1 + num2;
        // } else if (operator.equals("-")) {
        // result = num1 - num2;
        // } else if (operator.equals("*")) {
        // result = num1 * num2;
        // } else if (operator.equals("/")) {
        // if (num2 == 0) {
        // throw new RuntimeException("除数不能为0!");
        // }
        // result = num1 / num2;
        // }
        // return result;
        // }
    
    }

    登录注册案例:

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>主页</h1>
    <!-- 通过判断 session中信息,得知用户是否登陆 -->
    <c:if test="${empty existUser}">
        您还未登陆!
    </c:if>
    
    <c:if test="${not empty existUser}">
        用户昵称:${existUser.nickname }
        邮箱 :${existUser.email }
        <a href="/day9user/invalidate" >注销</a>
    </c:if>
    <hr/>
    <a href="/day9user/regist.jsp">用户注册</a>
    <a href="/day9user/login.jsp">用户登陆</a>
    </body>
    </html>

    regist.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
        // 点击切换验证码
        function change(){
            document.getElementById("myimg").src = "/day9user/checkimg?"+new Date().getTime();
        }
        // 数据合法性 校验
        function validateForm(){
            // 获得需要校验内容的value属性
            var username = document.getElementById("username").value;
            if(username == ""){
                alert("用户名不能为空");
                return false;
            }
            var password = document.getElementById("password").value;
            if(password==""){
                alert("密码不能为空!");
                return false;
            }
            var repassword = document.getElementById("repassword").value;
            if(password != repassword){
                alert("两次密码输入不一致!");
                return false;
            }
            // 省略昵称为空、验证码为空判断
            var email = document.getElementById("email").value;
            // 正则表达式 (w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*;)*
            if(email.match("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+\.([a-zA-Z0-9_-])+$")==null){
                // 不匹配
                alert("邮箱的地址非法!");
                return false;
            }
        }
    </script>
    </head>
    <body>
    <h1>用户注册页面</h1>
    <h3 style="color:red">${msg }</h3>
    <form onsubmit="return validateForm();" action="/day9user/regist" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username" id="username"/></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password" id="password"/></td>
            </tr>
            <tr>
                <td>确认密码</td>
                <td><input type="password" name="repassword" id="repassword"/></td>
            </tr>
            <tr>
                <td>昵称</td>
                <td><input type="text" name="nickname" id="nickname"/></td>
            </tr>
            <tr>
                <td>邮箱</td>
                <td><input type="text" name="email" id="email" /></td>
            </tr>
            <tr>
                <td>验证码</td>
                <td><input type="text" name="checkcode" id="checkcode"/> <img src="/day9user/checkimg" onclick="change();" id="myimg" style="cursor: pointer;"/></td>
            </tr>
            <tr>
                <td colspan=2">
                    <input type="submit" value="注册" />
                </td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    RegistServlet.java

    package cn.itcast.user.controller;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    import cn.itcast.user.model.User;
    import cn.itcast.user.model.UserOperation;
    
    /**
     * 注册 Servlet程序
     * 
     * @author seawind
     * 
     */
    public class RegistServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 处理 中文乱码
            request.setCharacterEncoding("utf-8");
    
            // 判断验证码信息是否有效
            String checkcode_session = (String) request.getSession().getAttribute(
                    "checkcode_session");// session中验证码
            request.getSession().removeAttribute("checkcode_session");
            String checkcode = request.getParameter("checkcode");// 用户输入验证码
            if (checkcode_session == null || !checkcode_session.equals(checkcode)) {
                // 验证码输入错误
                request.setAttribute("msg", "验证码输入错误!");
                request.getRequestDispatcher("/regist.jsp").forward(request,
                        response);
                return;
            }
    
            // 封装数据 JavaBean
            User user = new User();
            try {
                BeanUtils.populate(user, request.getParameterMap());
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
    
            // 需要另一个JavaBean处理数据
            UserOperation userOperation = new UserOperation();
            try {
                int result = userOperation.regist(user);
                // 判断注册结果
                if (result == UserOperation.SUCCESS) {
                    // 注册成功
                    response.sendRedirect("/day9user/login.jsp");
                } else if (result == UserOperation.USERNAMEEXIST) {
                    // 用户名已经存在
                    request.setAttribute("msg", "用户名已经存在");
                    request.getRequestDispatcher("/regist.jsp").forward(request,
                            response);
                    return;
                } else {
                    // 邮箱已经存在
                    request.setAttribute("msg", "邮箱已经存在");
                    request.getRequestDispatcher("/regist.jsp").forward(request,
                            response);
                    return;
    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    UserOperation.java

    package cn.itcast.user.model;
    
    import java.io.FileOutputStream;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    /**
     * 数据处理的javabean
     * 
     * @author seawind
     * 
     */
    public class UserOperation {
        public static final int SUCCESS = 1;
        public static final int USERNAMEEXIST = 2;
        public static final int EMAILEXIST = 3;
    
        // 用户登陆
        // 如果方法返回boolean 只能知道登陆成功还是失败
        // 有些情况,需要在登陆后,获得用户一些其它信息 --- 返回用户所有信息
        public User login(User user) throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("d:\users.xml");
    
            Element users = document.getRootElement();// 根元素
            List<Element> userList = users.elements("user");
    
            // 判断用户名和密码是否正确
            for (Element existUser : userList) {
                if (existUser.elementText("username").equals(user.getUsername())
                        && existUser.elementText("password").equals(
                                user.getPassword())) {
                    // 登陆成功,封装用户所有信息
                    user.setNickname(existUser.elementText("nickname"));
                    user.setEmail(existUser.elementText("email"));
                    return user;
                }
            }
    
            // 用户名和密码不存在
            return null;
        }
    
        // 用户注册
        public int regist(User user) throws Exception {
            // 读取XML (XML位置 磁盘固定位置或者 src目录)
            SAXReader reader = new SAXReader();
            Document document = reader.read("d:\users.xml");
    
            // 判断输入用户信息中 用户名和邮箱是否存在
            Element users = document.getRootElement();
            List<Element> userList = users.elements("user");
            for (Element existUser : userList) {
                if (existUser.elementText("username").equalsIgnoreCase(
                        user.getUsername())) {
                    // 用户名已经存在
                    return USERNAMEEXIST;
                } else if (existUser.elementText("email").equalsIgnoreCase(
                        user.getEmail())) {
                    // 邮箱已经存在
                    return EMAILEXIST;
                }
            }
    
            // 用户名和邮箱不存在,可以注册
            Element newUserElement = DocumentHelper.parseText(
                    "<user><username>" + user.getUsername()
                            + "</username><password>" + user.getPassword()
                            + "</password><nickname>" + user.getNickname()
                            + "</nickname><email>" + user.getEmail()
                            + "</email></user>").getRootElement();
            users.add(newUserElement);
    
            // 回写数据到XML
            OutputFormat format = OutputFormat.createPrettyPrint(); // 自动换行
            XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(
                    "d:\users.xml"), format);
            xmlWriter.write(document);
    
            return SUCCESS;
        }
    }

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>登陆页面</h1>
    <h3 style="color:red">${msg }</h3>
    <form action="/day9user/login" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username" value="${cookie.username.value }"/></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password" value="${cookie.password.value }"/></td>
            </tr>
            <tr>
                <td><input type="checkbox" name="remember" value="on" /></td>
                <td>记住用户名和密码</td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="登陆" />
                </td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    LoginServlet.java

    package cn.itcast.user.controller;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    import cn.itcast.user.model.User;
    import cn.itcast.user.model.UserOperation;
    
    /**
     * 完成用户登陆功能
     * 
     * @author seawind
     * 
     */
    public class LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 解决请求参数乱码
            request.setCharacterEncoding("utf-8");
    
            // 封装数据 到javabean
            User user = new User();
            try {
                BeanUtils.populate(user, request.getParameterMap());
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
    
            // 调用UserOperation 进行登陆操作
            UserOperation userOperation = new UserOperation();
            try {
                User existUser = userOperation.login(user);
                // 判断登陆是成功还是失败
                if (existUser == null) {
                    // 登陆失败
                    request.setAttribute("msg", "用户名或者密码错误!");
                    request.getRequestDispatcher("/login.jsp").forward(request,
                            response);
                    return;
                } else {
                    // 登陆成功
                    // 将登陆用户信息 保存到Session
                    request.getSession().setAttribute("existUser", existUser);
    
                    // 记住用户名和密码
                    // 判断一下用户是否勾选了 记住选择框
                    if ("on".equals(request.getParameter("remember"))) {
                        // 用户勾选了记住 选择框
                        Cookie usernameCookie = new Cookie("username", existUser
                                .getUsername());
                        usernameCookie.setPath("/");
                        usernameCookie.setMaxAge(60 * 60 * 24 * 14);// 两个星期
                        response.addCookie(usernameCookie);
    
                        Cookie passwordCookie = new Cookie("password", existUser
                                .getPassword());
                        passwordCookie.setPath("/");
                        passwordCookie.setMaxAge(60 * 60 * 24 * 14);// 两个星期
                        response.addCookie(passwordCookie);
                    }
    
                    response.sendRedirect("/day9user/index.jsp");
                    return;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    InvalidateServlet.java

    package cn.itcast.user.controller;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 完成用户注销
     * 
     * @author seawind
     * 
     */
    public class InvalidateServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 销毁session
            request.getSession().invalidate();
    
            // 跳转回主页
            response.sendRedirect("/day9user/index.jsp");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    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>CheckImgServlet</servlet-name>
        <servlet-class>cn.itcast.user.view.CheckImgServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>RegistServlet</servlet-name>
        <servlet-class>cn.itcast.user.controller.RegistServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>cn.itcast.user.controller.LoginServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>InvalidateServlet</servlet-name>
        <servlet-class>cn.itcast.user.controller.InvalidateServlet</servlet-class>
      </servlet>
    
    
    
    
      <servlet-mapping>
        <servlet-name>CheckImgServlet</servlet-name>
        <url-pattern>/checkimg</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>RegistServlet</servlet-name>
        <url-pattern>/regist</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>InvalidateServlet</servlet-name>
        <url-pattern>/invalidate</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
  • 相关阅读:
    Collections之sort、reverse
    网页小实验——在平面空间建立大量“可思考的”对象
    3D网页小实验——将txt配置文本转化为3D陈列室
    原生JavaScript实现一种日历
    JavaScript实现竖向滚动条的一种思路
    一个原生JavaScript动画库原型
    html小工具——文章注释编辑器
    基于Babylon.js编写宇宙飞船模拟程序1——程序基础结构、物理引擎使用、三维罗盘
    WebGL场景的两种地面构造方法
    基于Babylon.js编写简单的骨骼动画生成器
  • 原文地址:https://www.cnblogs.com/vaer/p/3938734.html
Copyright © 2020-2023  润新知