本文介绍以JSP+Session对象实现简单的购物功能,包括登录注册、用户管理、留言板等。
由于有人反映复制的代码不能实现功能,我就直接放完整的包了,链接在文章末尾。使用tomcat启动后进入http://localhost:8080/jsp_demo/experiment_4_2/login1.jsp,具体路径与你的配置相关。
有问题请通过发邮件的方式与我取得联系,邮箱在我首页,我每天都会看。评论的内容不一定会看到。
前言
JSP+Session对象实现简单的用户注册登录、购买商品、结算、留言等功能,具体功能如下:
1、以商品购物为例,有商品购买页面shop1.jsp和shop2.jsp,分别为商品1和商品2的商品购买网页,每个页面储存商品的基本信息,点击提交按钮跳转到结算页面account.jsp,在该页面显示购买的用户的用户名、商品名称、价格、数量、总结算金额。
2、实现留言板功能页面(使用application对象),普通用户登录(user1),可以查看留言、发表留言,发表留言时能将用户名称写入;管理员用户登录(admin),除了具备普通用户的功能以外,能删除留言。
3、所有页面在未经过登录直接访问时,都不能访问,提示请登录后访问。
一、登录注册
1.在不使用数据库的情况下做到登录注册
登录与注册本质上是存储用户的账号与密码,从这点出发,我们很容易想到Java的HashMap(存储key-value的数组),因此我们可以将用户的账号密码存储进HashMap。
HashMap<String, String> user = new HashMap<String, String>();
user.put("zhangsan", "123");
user.put("lisi", "456");
user.put("wangwu", "789");
user.put("admin", "admin");
接下来是第二个问题,如何在整个进程中都能访问到用户登录和注册的信息。我们使用application存储用户的数据, application不过多介绍。
二、商品
商品这里限定为两个页面,每个页面1个商品。若想实现多个商品,可以用appliciation存储,与留言板功能类似,具体见留言板。
三、留言板
需求为所有用户可见,因此自然是使用application。这里使用了4个ArrayList存储,输出相同索引即对应的信息。存储管理员的用户名,管理员可对留言板操作。
Set<String> adminUser = new HashSet<String>();
ArrayList<String> authors = new ArrayList<String>();
ArrayList<String> goods = new ArrayList<String>();
ArrayList<String> tittles = new ArrayList<String>();
ArrayList<String> contents = new ArrayList<String>();
四、代码
login1.jsp
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<html>
<body>
<%!
HashMap<String, String> user = new HashMap<String, String>();
%>
<%
//获取登录状态
String login = (String) session.getAttribute("login");
if ("fail".equals(login)) {
%>
<p class="login-alert">未登录或密码错误</p>
<%
}
user.put("zhangsan", "123");
user.put("lisi", "456");
user.put("wangwu", "789");
user.put("admin", "admin");
application.setAttribute("user", user);
String username = "null";
String password = "null";
username = request.getParameter("username");
password = request.getParameter("password");
user.put(username, password);
application.setAttribute("user", user);
%>
<div class="login">
<form action="login2.jsp" method="post" name="userform">
<h1>登录</h1>
<p>账号<input type="text" name="username"></p>
<p>密码<input type="password" name="password"></p>
<div>
<input type="submit" class="btn" name="sub1" value="登录">
<input type="submit" class="btn" name="sub2" value="注册" onclick="register()">
</div>
</form>
</div>
</body>
<script>
function register() {
document.userform.action = "";
}
</script>
<link rel="stylesheet" href="index.css">
</html>
login2.jsp
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<%
//获取用户表
HashMap<String, String> user = (HashMap<String, String>) application.getAttribute("user");
out.print(user);
//获取传递参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//非空处理
if (username == null || username.equals("")){
username = "null";
}
if (password == null || password.equals("")){
password = "null";
}
String login;
//判断用户是否存在
if(user.containsKey(username)) {
out.print("success");
//response.sendRedirect("shop1.jsp");
//判断账号密码是否正确
String correct_password = user.get(username);
if (password.equals(correct_password)){
login = "success";
session.setAttribute("login",login);
response.sendRedirect("shop1.jsp");
}
else {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
}
else {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//存入session
session.setAttribute("username",username);
session.setAttribute("password",password);
%>
shop1.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<html>
<body>
<%
String good2 = request.getParameter("good2");
if(good2 == null || good2.equals("")){
good2 = "0";
}
Integer b = Integer.parseInt(good2);
session.setAttribute("good2", b);
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//获取用户名
String username = (String) session.getAttribute("username");
%>
<div class="shop">
<form action="shop2.jsp" method="post" name="shopform">
<div class="welcome">欢迎你,<span><%=username%></span>!</div>
<div style="margin-bottom: 40px">
<img src="img/good1.png" alt="">
<p>20.55元</p>
</div>
<p>购买数量<input type="text" name="good1"></p>
<input type="submit" class="btn" name="sub1" value="进入商店2">
<input type="submit" class="btn" name="sub2" value="直接购买" onclick="buy()">
</form>
<a href="webBoardNav.jsp" class="btn">查看留言</a>
<div style="margin-top: 15px"></div>
<a href="login1.jsp" class="btn">退出登录</a>
</div>
</body>
<script>
function buy(){
document.shopform.action="account.jsp"
}
</script>
<link rel="stylesheet" href="index.css">
</html>
shop2.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<html>
<body>
<%
String good1 = request.getParameter("good1");
if(good1 == null || good1.equals("")){
good1 = "0";
}
Integer a = Integer.parseInt(good1);
session.setAttribute("good1", a);
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//获取用户名
String username = (String) session.getAttribute("username");
%>
<div class="shop">
<form action="shop1.jsp" method="post" name="shopform">
<div class="welcome">欢迎你,<span><%=username%></span>!</div>
<div style="margin-bottom: 40px">
<img src="img/good2.png" alt="">
<p>50.35元</p>
</div>
<p>购买数量<input type="text" name="good2"></p>
<input type="submit" class="btn" name="sub3" value="进入商店1">
<input type="submit" class="btn" name="sub4" value="直接购买" onclick="buy()">
</form>
<a href="webBoardNav.jsp" class="btn">查看留言</a>
<div style="margin-top: 15px"></div>
<a href="login1.jsp" class="btn">退出登录</a>
</div>
</body>
<script>
function buy(){
document.shopform.action="account.jsp"
}
</script>
<link rel="stylesheet" href="index.css">
</html>
account.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<html>
<body>
<div class="shop">
<%
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
Integer a = Integer.parseInt(session.getAttribute("good1").toString());
Integer b = Integer.parseInt(session.getAttribute("good2").toString());
if (a == 0) {
String good1 = request.getParameter("good1");
if (good1 == null || good1.equals("")) {
a = 0;
} else {
a = Integer.parseInt(request.getParameter("good1"));
}
}
if (b == 0) {
String good2 = request.getParameter("good2");
if (good2 == null || good2.equals("")) {
b = 0;
} else {
b = Integer.parseInt(request.getParameter("good2"));
}
}
Double priceA = 20.55;
Double priceB = 50.35;
double sum = a * priceA + b * priceB;
%>
<h1>账单</h1>
<h1>----------</h1>
<p>你购买了</p>
<p><span><%= a %></span>个商品1</p>
<p><span><%= b %></span>个商品2</p>
<p>总金额<span><%= sum %></span>元</p>
<a href="shop1.jsp" class="btn">返回</a>
</div>
<link rel="stylesheet" href="index.css">
</body>
</html>
webBoard.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;" pageEncoding="UTF-8"%>
<html>
<body>
<%
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//获取历史留言表
ArrayList<String> authors = (ArrayList<String>) application.getAttribute("authors");
ArrayList<String> goods = (ArrayList<String>) application.getAttribute("goods");
ArrayList<String> tittles = (ArrayList<String>) application.getAttribute("tittles");
ArrayList<String> contents = (ArrayList<String>) application.getAttribute("contents");
%>
<a class="back" href="webBoardNav.jsp"><</a>
<div class="message-tittle">
<p>留言板</p>
</div>
<%
//遍历留言表
for (int i = 0;i<authors.size();i++) {
%>
<table class="message">
<tr>
<td width="100px" style="color: coral">No.<%= i+1 %></td>
<td style="color: brown; font-size: 20px; font-weight: bold">《<%=tittles.get(i)%>》</td>
</tr>
<tr><td colspan="2">留言者:<%=authors.get(i) %></td></tr>
<tr><td colspan="2">商品:<%=goods.get(i) %></td></tr>
<tr><td colspan="2"><%=contents.get(i) %></td></tr>
</table>
<%
}
%>
<link rel="stylesheet" href="index.css">
</body>
</html>
webBoard_manage.jsp
<%@ page import="java.util.Set" %>
<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8" %>
<%
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
response.sendRedirect("login1.jsp");
}
String setAdminUser = request.getParameter("setAdminUser");
//获取管理员账号
Set<String> adminUser = (Set<String>) application.getAttribute("adminUser");
//非空判断
if (!(setAdminUser == null || setAdminUser.equals(""))) {
adminUser.add(setAdminUser);
response.sendRedirect("webBoardNav.jsp");
}
%>
<html>
<body>
</body>
</html>
webBoardDel.jsp
<%@ page import="java.util.Set" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html" %>
<%@ page language="java" pageEncoding="utf-8" %>
<%
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//获取用户名
String username = (String) session.getAttribute("username");
//判断用户名是否在管理员列表
Set<String> adminUser = (Set<String>) application.getAttribute("adminUser");
if (!(adminUser.contains(username))) {
//不是管理员返回
response.sendRedirect("webBoardNav.jsp");
}
//获取历史留言表
ArrayList<String> authors = (ArrayList<String>) application.getAttribute("authors");
ArrayList<String> goods = (ArrayList<String>) application.getAttribute("goods");
ArrayList<String> tittles = (ArrayList<String>) application.getAttribute("tittles");
ArrayList<String> contents = (ArrayList<String>) application.getAttribute("contents");
//获取留言序号
String number = request.getParameter("number");
if (!(number == null || number.equals(""))) {
Integer i = Integer.valueOf(number);
authors.remove(i - 1);
goods.remove(i - 1);
tittles.remove(i - 1);
contents.remove(i - 1);
//初始信息同步至application
application.setAttribute("authors", authors);
application.setAttribute("goods", goods);
application.setAttribute("tittles", tittles);
application.setAttribute("contents", contents);
}
%>
<html>
<body>
<div class="board">
<form action="">
<p>删除留言</p>
<p>请输入留言序号<input type="text" name="number"></p>
<input class="btn" type="submit">
</form>
<a href="webBoardNav.jsp" class="btn">返回</a>
</div>
<link rel="stylesheet" href="index.css">
</body>
</html>
webBoardNav.jsp
<%@ page import="java.util.Set" %>
<%@ page import="java.util.HashSet" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html" %>
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<body>
<%!
//初始化
Set<String> adminUser = new HashSet<String>();
ArrayList<String> authors = new ArrayList<String>();
ArrayList<String> goods = new ArrayList<String>();
ArrayList<String> tittles = new ArrayList<String>();
ArrayList<String> contents = new ArrayList<String>();
{
authors.add("zhangsan");
goods.add("商品1");
tittles.add("每天一苹果,医生远离我");
contents.add("连续吃苹果365天");
}
%>
<%
//初始信息同步至application
application.setAttribute("authors", authors);
application.setAttribute("goods", goods);
application.setAttribute("tittles", tittles);
application.setAttribute("contents", contents);
//获取历史留言表
ArrayList<String> authors = (ArrayList<String>) application.getAttribute("authors");
ArrayList<String> goods = (ArrayList<String>) application.getAttribute("goods");
ArrayList<String> tittles = (ArrayList<String>) application.getAttribute("tittles");
ArrayList<String> contents = (ArrayList<String>) application.getAttribute("contents");
//编码转换
request.setCharacterEncoding("utf-8");
//获取用户名
String username = (String) session.getAttribute("username");
String tittle = request.getParameter("tittle");
String good = request.getParameter("good");
String content = request.getParameter("content");
//添加留言
//非空判断
if (!(tittle == null || tittle.equals("") || good == null || good.equals("") || content == null || content.equals(""))) {
authors.add(username);
goods.add(good);
tittles.add(tittle);
contents.add(content);
//同步至application
application.setAttribute("authors", authors);
application.setAttribute("goods", goods);
application.setAttribute("tittles", tittles);
application.setAttribute("contents", contents);
}
%>
<div class="board">
<p>欢迎<span><%= username %></span>进入商店留言与评价!</p>
<form action="webBoardNav.jsp" method="post">
<p>标题<input type="text" name="tittle"></p>
<p>商品<select name="good" size="1">
<option value="商品1" selected>商品1</option>
<option value="商品2">商品2</option>
</select></p>
<p>内容</p><textarea name="content" id="" cols="30" rows="6"></textarea>
<input type="submit" class="btn" value="提交">
</form>
</p>
<p>
<a href="webBoard.jsp" class="btn">查看留言</a>
</p>
<p>
<a href="webBoardDel.jsp" class="btn">删除留言</a>
</p>
<p>
<a href="shop1.jsp" class="btn">返回商店</a>
</p>
</div>
<div class="admin">
<%
//获取所有用户信息
HashMap<String, String> user = (HashMap<String, String>) application.getAttribute("user");
//初始管理员账号添加
adminUser.add("admin");
//管理员账号同步至application
application.setAttribute("adminUser", adminUser);
//获取登录状态
String login = (String) session.getAttribute("login");
if (!"success".equals(login)) {
login = "fail";
session.setAttribute("login",login);
response.sendRedirect("login1.jsp");
}
//判断用户名是否在管理员列表
if (adminUser.contains(username)) {
//如果是,则打印用户信息表
out.print("已注册用户<br>");
for (String u : user.keySet()) {
out.print("用户名:" + u + "  密码:" + user.get(u) + "<br>");
}
%>
<p>
<%
//打印管理员信息表
for (String a : adminUser) {
out.print("管理员:" + a + "<br>");
}
%>
<form action="webBoard_manage.jsp" method="get">
<p>将此用户设置为管理员<input type="text" name="setAdminUser"></p>
<input type="submit">
</form>
<%
} else {
out.print("该板块仅对管理员用户展示!");
}
%>
</p>
</div>
<link rel="stylesheet" href="index.css">
</body>
</html>
完整代码:
链接:https://pan.baidu.com/s/1A-jM_Nx3GRN6u72IQkK9xw?pwd=nmyk
提取码:nmyk