您的位置:首页 > 数据库 > MySQL

Servlet学习笔记--jsp+Servlet+MySQL实现用户注册

2015-10-15 23:12 786 查看
一、步骤:

1、在数据库中新建user表,表中包含user_id、username、password,它们分别表示用户ID、用户名和密码

2、创建Servlet类,名为RegServlet,用于处理用户注册请求,在类中重写init()和doPost()方法。接着在web.xml中写RegServlet类的配置信息。

3、修改index.jsp页面,用于用户注册所需的表单。

二、遇到的“坑”

1、若用response。setCharacterEncoding(“utf-8”)来设置response的编码,则会出现“The method setCharacterEncoding(String) is undefined for the type RegServlet”错误,后来 改成“换成response.setContentType(“utf-8”);”也不行。。。,后来百度了一下。大神说:response.setCharacterEncoding(“”); 在Servlet2.3中是不行的,至少要2.4版本才可以,如果低于2.4版本,可以用如下办法: response.setContentType(“text/html;charset=utf-8”);

果然,真的可以O(∩_∩)O

三、相关代码

1、RegServlet.java

package com.code;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegServlet extends HttpServlet {

private static final long serialVersionUID = 6162631333316063332L;
private Connection conn;//连接数据库Connection
public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

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("    This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

//doPost()方法处理用户注册请求
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//设置request的编码
response.setContentType("text/html;charset=utf-8");//设置response的编码。若换成response.setContentType("utf-8"),则从Servlet中传到jsp的中文会乱码
String userID = request.getParameter("userID");//获取jsp中表单中的用户ID
String username = request.getParameter("username");//获取jsp中表单中的username
String password = request.getParameter("password");//获取jsp中表单中的password
if (conn != null) {//判断数据库是否连接成功
String sql = "insert into user(user_id,username,password)"
+ "values(?,?,?)";//SQL语句。用来向user表插入记录,使用“?”表示占位符
try {
PreparedStatement ps = conn.prepareStatement(sql);//创建PreparedStatement对象
//对SQL中的参数动态赋值
ps.setString(1, userID);
ps.setString(2, username);
ps.setString(3, password);
ps.executeUpdate();//执行更新操作
PrintWriter out = response.getWriter();//获取PrintWriter对象
out.print("<h1 align='center'>");
out.print(username + ",注册成功!");
out.print("</h1>");
out.flush();
out.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} else {
response.sendError(500, "数据库连接错误");//发送数据库连接错误信息提示信息
}

}

//init()是Servlet的初始化方法,此方法只运行一次。在这例子中,用此方法来加载数据库驱动,并获得数据库连接对象Connection
public void init() throws ServletException {
super.init();
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动,这里用的是MySQL,要在项目中导入mysql-connector-java-5.1.25。jar包,不然会报错
String url = "jdbc:mysql://localhost:3306/SSH";//数据库连接UML
conn = DriverManager.getConnection(url, "root", "");//获取数据库连接
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


2、RegServlet类的Servlet配置代码如下:

<servlet>
<servlet-name>RegServlet</servlet-name>
<servlet-class>com.code.RegServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/RegServlet</url-pattern>
</servlet-mapping>


3、index.jsp

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.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>

<form action="RegServlet" method="post" onsubmit="return reg(this);">
<table align="center">
<tr>
<td>用户ID</td>
<td><input type="text" name="userID" /></td>
</tr>
<tr>
<td>用户姓名</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td><input type="reset" value="refresh" /></td>
<td><input type="submit" value="注册" /></td>
</tr>
</table>
</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: