本案例使用MVC模式设计最基础的注册、登录模块
本案例适合刚学完jsp的学者尝试,主要目的是运用jsp基础知识汇总一个完整的mvc架构,本案例主要目的是让入门mvc者清晰理解的mvc基础运行原理。
- 建立数据库student(具体创建步骤略)需要说明的是这里设置属性值的时候一定要按照需求设定好,varchar给小了,当你输入数据的时候会注册不成功。
- 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>
- 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;
}
}
- 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”);导致不能正常调用数据库。这涉及到一些深层次的知识,后面的文章会做讲解。
运行结果
大家觉得文章有帮助,可以关注下小编,我跟大家一起成长!!!