您的位置:首页 > Web前端 > JavaScript

典型注册页面JSP实现

2015-06-19 20:15 686 查看
这篇文章主要是用Servlet技术来实现,看了下面的源代码,很容易看出,很烦,尤其是往客户端写东西的时候。你可能会说,那用JSP好了,是这样的吗?



先看下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();
}

}


前端做的很粗糙:比如注册页面时这样的



后面我们会用不同的技术来实现这一模块,对比才能知道各种技术的差别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: