1、Servlet实现注册的思路:
2、工程结构
3、功能实现:
(1)html实现对数据的收集:
<body bgcolor="aqua"> <center> <h3>注册</h3> <form action="/Register_servlet_war_exploded/register" method="post"> 用户名:<input type="text" name="account" size="12"><br><br> 密码:<input type="password" name="password" size="12"> <input type="submit" value="注册"> <input type="reset" value="取消"> </form> </center> </body>
(2)Servlet:获取表单提交的数据,并将他们封装到Map集合中(可以减少代码量)
public class ServletRegister extends javax.servlet.http.HttpServlet { protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { request.setCharacterEncoding("UTF-8"); Map<String, String[]> properties=request.getParameterMap();//将表单中的数据封装到Map中 Login log= new Login(); try { BeanUtils.populate(log, properties); } catch (IllegalAccessException|InvocationTargetException e) { e.printStackTrace(); } try { regist(log); } catch (SQLException e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath()+"/log.html");//重定向 } public void regist(Login log) throws SQLException{//数据库 Connection con=null; try { con = C3p0Utils.getConnection(); QueryRunner qr = new QueryRunner(); String sql = "insert into Login values(?,?)"; Object[] insert = {log.getAccount(), log.getPassword()}; qr.update(con, sql, insert); } catch (SQLException e){ throw new RuntimeException(e); } }
4、get和post提交方式乱码问题:
(1)post提交:
request.setCharacterEncoding("UTF-8");
直接高数服务器编码的格式。
(2)get提交:
采用request.setCharacterEncoding("UTF-8");的方法已经不能解决中文乱码的问题了。需要从底层改变编码格式:
name = new String(name,getBytes("ISO-8859-1"),"UTF-8");
post提交的请求在请求体中,可以通过设置编码解决乱码。而get提交的数据在请求行中,通过设置编码的方式是不行的。