典型注册页面JSP实现
2015-06-19 20:15
686 查看
这篇文章主要是用Servlet技术来实现,看了下面的源代码,很容易看出,很烦,尤其是往客户端写东西的时候。你可能会说,那用JSP好了,是这样的吗?
先看下xml文件,事实上Servlet3.0开始,就可以不用配置xml文件,可以段前声明的方式来完成,看博客中另一篇文章。这里还是暂时使用下xml配置文件:
其中 Login.jsp
注册页面 index.jsp
该模块中,没有使用数据库,只是简单写了一个类来模仿数据库功能,User.java
下面几个为Servet文件:
RegisterServlet.java
错误处理ErrorServlet.java
注册验证成功 SuccessServlet.java
登陆验证 LoginServlet.java
最后是登陆成功的欢迎界面:
前端做的很粗糙:比如注册页面时这样的
后面我们会用不同的技术来实现这一模块,对比才能知道各种技术的差别。
先看下xml文件,事实上Servlet3.0开始,就可以不用配置xml文件,可以段前声明的方式来完成,看博客中另一篇文章。这里还是暂时使用下xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Demo1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.demo1.servlet.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register.html</url-pattern> </servlet-mapping> <servlet> <servlet-name>ErrorServlet</servlet-name> <servlet-class>com.demo1.servlet.ErrorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ErrorServlet</servlet-name> <url-pattern>/error.html</url-pattern> </servlet-mapping> <servlet> <servlet-name>SuccessServlet</servlet-name> <servlet-class>com.demo1.servlet.SuccessServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SuccessServlet</servlet-name> <url-pattern>/success.html</url-pattern> </servlet-mapping> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.demo1.servlet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/test.html</url-pattern> </servlet-mapping> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.demo1.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login.html</url-pattern> </servlet-mapping> <servlet> <servlet-name>MemberServlet</servlet-name> <servlet-class>com.demo1.servlet.MemberServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MemberServlet</servlet-name> <url-pattern>/member.html</url-pattern> </servlet-mapping> </web-app>
其中 Login.jsp
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <title>登陆页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta name="keywords" content="注册网页,西安电子科技大学,韩春"> <meta name="description" content="a simple demo to Web APP"> <meta name="content-type" content="text/html; charset=UTF-8"> </head> <body> <h2 align=center>欢迎您</h2> <center> <form action="<%=path %>/login.html" method="post"> <table border="1"> <tr> <td>用户名:</td> <td><input name="userName"></td> </tr> <tr> <td>密码:</td> <td><input name="password" type="password"></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="点击登陆"></td> </tr> </table> </form> 还没注册?<a href="<%=path%>/index.jsp">点击注册吧</a> </center> </body> </html>
注册页面 index.jsp
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <title>注册页面</title> <meta name="keywords" content="注册网页,西安电子科技大学,韩春"> <meta name="description" content="a simple demo to Web APP"> <meta name="content-type" content="text/html; charset=UTF-8"> </head> <body> <h2 align=center>注册页面</h2> <center> <form action="<%=path %>/register.html" method="post"> <table border="1"> <tr> <td>登录名:</td> <td><input name="userName"></td> </tr> <tr> <td>密码:</td> <td><input name="password" type="password"></td> </tr> <tr> <td>重复密码:</td> <td><input name="conPassword" type="password"></td> </tr> <tr> <td>邮箱地址:</td> <td><input name="email"></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="提交注册"></td> </tr> </table> </form> 您有账号?<a href="<%=path %>/jsp/front/Login.jsp"><front color="GREEN" >点击直接登录</front></a> </center> </body> </html>
该模块中,没有使用数据库,只是简单写了一个类来模仿数据库功能,User.java
package com.demo1.java; import java.util.HashMap; import java.util.Map; public class User { private Map<String,String> userMap = new HashMap<String, String>(); private static User user = null; private User(){ userMap.put("韩春", "123456##abcdefg@163.com"); } public static User getInstance(){ if(user == null){ user = new User(); } return user; } public Map<String, String>getUserMap(){ return userMap; } }
下面几个为Servet文件:
RegisterServlet.java
package com.demo1.servlet; import com.demo1.java.User; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class RegisterServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userName = req.getParameter("userName"); String password = req.getParameter("password"); String conPassword = req.getParameter("conPassword"); String email = req.getParameter("email"); List<String> errors = new ArrayList<String>(); //装载错误信息 if(!isValidUsername(userName)){ errors.add("用户名为空或者已经存在"); } if(!isValidEmail(email)){ errors.add("无效的邮箱号码"); } if(isValidPassword(password, conPassword)){ errors.add("密码为空或者两次输入不一样"); } if(errors.isEmpty()){ User user = User.getInstance(); Map<String, String> map = user.getUserMap(); map.put(userName, password+"##"+email); req.getRequestDispatcher("/success.html").forward(req, resp); }else{ req.setAttribute("errors", errors); req.getRequestDispatcher("/error.html").forward(req, resp); } } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } public boolean isValidUsername(String username){ User user = User.getInstance(); Map<String, String> map = user.getUserMap(); if(username != null){ //暂时先这样改 这里是有问题的,不能很好地判断 return true; }else{ return false; } } public boolean isValidPassword(String password, String conPassword){ return password == null || conPassword == null || password.length() < 6 || !password.equals(conPassword); } public boolean isValidEmail(String email){ boolean flag = false; if(email == null || "".equals(email)){ flag = false; }else{ flag = email.matches("^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"); } return flag; } }
错误处理ErrorServlet.java
package com.demo1.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ErrorServlet extends HttpServlet { private static final long serialVersionUID = 1l; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>新会员增加失败</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h2>新会员增加失败</h2> "); @SuppressWarnings("unchecked") List<String> list = (List<String>)req.getAttribute("errors"); if(list != null){ for(String str:list){ out.println(str + "</br>"); } } out.println("<a href=\"" + req.getContextPath() + "/index.jsp\">返回注册页面</a> " ); //注意这边的解析!!! out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }
注册验证成功 SuccessServlet.java
package com.demo1.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class SuccessServlet extends HttpServlet { @SuppressWarnings("unused") private static final long serivalVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>新会员增加成功</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h2>新会员增加成功</h2> "); out.println("<a href=\"" + req.getContextPath() + "/jsp/front/Login.jsp\">返回登陆页面</a> " ); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); out.flush(); out.close(); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }
登陆验证 LoginServlet.java
package com.demo1.servlet; import java.io.IOException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo1.java.User; public class LoginServlet extends HttpServlet { public static final long serialVervletUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName"); String password = request.getParameter("password"); if(checkLogin(userName, password)){ request.getRequestDispatcher("/member.html").forward(request, response); }else{ response.sendRedirect("/Demo1/jsp/front/Login.jsp"); } } public boolean checkLogin(String userName, String password)throws NullPointerException{ User user = User.getInstance(); Map<String, String> map = user.getUserMap(); if(userName != null && !"".equals(userName) && password != null && !"".equals(password)){ String[] arr = map.get(userName).split("##"); if(arr[0].equals(password)){ return true; } } return false; } }
最后是登陆成功的欢迎界面:
package com.demo1.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MemberServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>Welcome</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h2 align=\"center\">" + request.getParameter("userName")+ " 您好,欢迎您哦" + "</h2>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
前端做的很粗糙:比如注册页面时这样的
后面我们会用不同的技术来实现这一模块,对比才能知道各种技术的差别。
相关文章推荐
- Backbone.js 的最佳应用场景有哪些?
- qq音乐的歌词接口中例如:,.的特殊符号编码使用js进行转义
- 关于html5与jsp页面同样的html代码展示的页面效果不一样的问题
- [置顶] js禁用回退键[backspace键]浏览历史跳转的解决办法
- js变量数组
- JS问题汇总
- JSTL函数标签:${fn:xxx(xxx)}
- js中RegExp类型
- JavaScript基础二 JS除错与调试、函数、对象、Array对象
- 记录一个JS
- AJAX 跨域请求 - JSONP获取JSON数据
- javascript中window.open()与window.location.href的区别
- jsoup
- js跳转页面方法
- js插件
- js生成验证码
- 关于js中全局和非全局以及立即运行的问题
- json_decode()的常见错误
- JS调用本地应用程序
- JSON和XML解析