jsp——基于mvc模式之注册登录操作案例

本案例使用MVC模式设计最基础的注册、登录模块

本案例适合刚学完jsp的学者尝试,主要目的是运用jsp基础知识汇总一个完整的mvc架构,本案例主要目的是让入门mvc者清晰理解的mvc基础运行原理。

  1. 建立数据库student(具体创建步骤略)需要说明的是这里设置属性值的时候一定要按照需求设定好,varchar给小了,当你输入数据的时候会注册不成功。
    在这里插入图片描述
  2. register.jsp:负责提交用户的注册信息到servlet触发器,并负责显示注册是否注册成功的信息。
    **注意:**action后面的地址值不要写错,这里可以通过web.xml进行配置servlet,也可以用WebServlet注解进行配置:@WebServlet(name = “HandleRegister”,urlPatterns = “/HandleRegister”),idea上有这个功能。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="userBean" class="com.mvcdemo.Register" scope="request"></jsp:useBean>
<html>
<head>
    <title>Title</title>
</head>
<body bgcolor="aqua">
<font size="3">
    <div align="center">
        <form action="/HandleRegister" method="post">
            登录:
            <table>
                <tr>
                    <td>*用户名称:</td><td><input type="text" name="logname"></td>
                    <td>*用户密码:</td><td><input type="password" name="password"></td>
                </tr>
                <tr>
                    <td>*重复密码:</td><td><input type="password" name="again_password"></td>
                    <td>*email:</td><td><input type="email" name="email"></td>
                    <td><button type="submit">提交</button></td>
                </tr>
            </table>
        </form>
    </div>
    <div align="center">
        <p>注册反馈:
        <jsp:getProperty name="userBean" property="backNews"/></p>
        <table border="3">
            <tr>
                <td>会员名称:</td>
                <td><jsp:getProperty name="userBean" property="logname"/></td>
            </tr>
            <tr>
                <td>email地址:</td>
                <td><jsp:getProperty name="userBean" property="email"/></td>
            </tr>
        </table>
    </div>
</font>
</body>
</html>

  1. Register(模型):JavaBean的实例由控制器负责创建或更新
    注意: javabean在生成set和get方法时候一定要与后面servlet的request.getParameter取值对象名一样。
package com.mvcdemo;

public class Register {
    String logname = "",email ="",backNews="请填注册信息";

    public String getLogname() {
        return logname;
    }

    public void setLogname(String logname) {
        this.logname = logname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getBackNews() {
        return backNews;
    }

    public void setBackNews(String backNews) {
        this.backNews = backNews;
    }
}

  1. HandleRegister(控制器):控制器负责连接数据库,将用户提交的信息写入到表中,并将用户转发到jsp页面查看注册反馈信息。
    注意:
    1.trim()是对input框的空格的检查与删除操作。
    2.数据库我使用的是mariadb,大家可以使用自己熟知的数据库,方便大家操作。
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import javax.servlet.*;

@WebServlet(name = "HandleRegister",urlPatterns = "/HandleRegister")
public class HandleRegister extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        try {  Class.forName("org.mariadb.jdbc.Driver");
        }
        catch(Exception e){}
    }
    public String handleString(String s)
    {   try{ byte bb[]=s.getBytes("utf-8");
        s=new String(bb);
    }
    catch(Exception ee){}
        return s;
    }
    public  void  doPost(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException {
        String uri="jdbc:mysql://localhost/test?"+
                "user=root&password=root&characterEncoding=utf-8";
        Connection con;
        PreparedStatement sql;
        Register userBean=new Register();  //创建的Javabean模型
        request.setAttribute("userBean",userBean);//将会更新id是"userBean"的bean
        String logname=request.getParameter("logname").trim();
        String password=request.getParameter("password").trim();
        String again_password=request.getParameter("again_password").trim();
        String email=request.getParameter("email").trim();
        if(logname==null)
            logname="";
        if(password==null)
            password="";
        if(!password.equals(again_password)) {
            userBean.setBackNews("两次密码不同,注册失败,");
            RequestDispatcher dispatcher= request.getRequestDispatcher("/ch9/register.jsp");
            dispatcher.forward(request, response);//转发
            return;
        }
        boolean isLD=true;
        for(int i=0;i<logname.length();i++){
            char c=logname.charAt(i);
            if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
                isLD=false;
        }
        boolean boo=logname.length()>0&&password.length()>0&&isLD;
        String backNews="";
        try{   con=DriverManager.getConnection(uri);
            String insertCondition="INSERT INTO student VALUES (?,?,?)";
            sql=con.prepareStatement(insertCondition);
            if(boo)
            { sql.setString(1,handleString(logname));
                sql.setString(2,handleString(password));
                sql.setString(3,handleString(email));
                int m=sql.executeUpdate();
                if(m!=0){
                    backNews="注册成功";
                    userBean.setBackNews(backNews);
                    userBean.setLogname(logname);
                    userBean.setEmail(handleString(email));
                }
            }
            else {
                backNews="信息填写不完整或名字中有非法字符";
                userBean.setBackNews(backNews);
            }
            con.close();
        }catch(SQLException exp){
            backNews="该会员名已被使用,请您更换名字"+exp;
            userBean.setBackNews(backNews);
        }
        RequestDispatcher dispatcher= request.getRequestDispatcher("/ch9/register.jsp");
        dispatcher.forward(request, response);//转发
    }
}

在本案例上可能遇到最大的问题就是运行成功,不报任何错误,但是输入数据不成功,也就是说不能把数据传入数据库,并且显示出来。对于这类问题我们首先检查你的sql语句,因为sql语句写错一般是不会报错。第二检查你的转换界面是是否调用servlet。第三有可能在页面你写了 request.setCharacterEncoding(“utf-8”);导致不能正常调用数据库。这涉及到一些深层次的知识,后面的文章会做讲解。

运行结果

在这里插入图片描述
在这里插入图片描述
大家觉得文章有帮助,可以关注下小编,我跟大家一起成长!!!

发布了8 篇原创文章 · 获赞 27 · 访问量 352

猜你喜欢

转载自blog.csdn.net/qq_44706044/article/details/103740053