07320170911
可以改进的几点:
1、显示表单头部和尾部等一样的内容可以单独抽离出来,在每个页面进行<%@include file="header.jsp" %> 切入。
2、对登陆验证信息进行友好提示。3、页面保护,可以直接写一个session.jsp,在需要保护的页面进行<%@include file="session.jsp" %> 切入。
4、代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
--登陆--
<%
int rand = (int) (Math.random() * 9000 + 1000);
String check = String.valueOf(rand);
session.setAttribute("check", check);
%>
<%@page import="java.util.Collections"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.tiger.bean.Goods"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
--商品列表--
<%
String username = (String) session.getAttribute("username");
List
good_list = (ArrayList
)
application.getAttribute("good_list");
%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.tiger.bean.Goods"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
--购物车--
<%
String username = (String) session.getAttribute("username");
List
goods_list = (ArrayList
) application
.getAttribute("goods");
%>
package com.tiger.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import com.tiger.bean.Goods;
/**
* 07320170911
* 登陆
* @author tiger
* @Date 2017年9月10日
*/
@WebServlet("/login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() { }
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = getServletContext();
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
String check = request.getParameter("check");
String check_rand = (String)session.getAttribute("check");
if("tiger".equals(username)
&& "123456".equals(password)
&& check.equals(check_rand)){
//只有用户输入登录信息正确,才设置session【表示登陆在线状态】,给过滤器判断
session.setAttribute("username", username);
//验证通过后,定向到商品列表页面
response.sendRedirect("goods_list.jsp");
}else{
response.sendRedirect("login.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}package com.tiger.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import com.tiger.bean.Goods;
/**
* 注销
* @author tiger
* @Date 2017年9月10日
*/
@WebServlet("/logout")
public class Logout extends HttpServlet {
private static final long serialVersionUID = 1L;
public Logout() { }
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false);
//清除登陆session
session.removeAttribute("username");
//重定向回登陆页面
response.sendRedirect("login.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}package com.tiger.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import com.tiger.bean.Goods;
/**
* 添加商品
* @author tiger
* @Date 2017年9月10日
*/
@WebServlet("/addGoods")
public class AddGoods extends HttpServlet {
private static final long serialVersionUID = 1L;
public AddGoods() { }
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String[] checkbox = request.getParameterValues("checkbox");
if (checkbox != null) {
ServletContext application = request.getServletContext();
List
good_list = (ArrayList
) application.getAttribute("good_list"); ArrayList
goods = new ArrayList<>(); for (Goods good : good_list) { for (String checkId : checkbox) { Integer check = Integer.parseInt(checkId); if (check == good.getId()) { goods.add(good); } } } //显示购物车列表时所用 application.setAttribute("goods", goods); //定向到购物车页面 response.sendRedirect("car_list.jsp"); }else { response.sendRedirect("login.jsp"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }package com.tiger.servlet; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.annotation.*; import javax.servlet.http.*; import com.tiger.bean.Goods; /** * 删除商品 * @author tiger * @Date 2017年9月10日 */ @WebServlet("/deleteGoods") public class DeleteGoods extends HttpServlet { private static final long serialVersionUID = 1L; public DeleteGoods() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] checkbox = request.getParameterValues("checkbox"); if (checkbox != null) { ServletContext application = request.getServletContext(); List
good_list = (ArrayList
) application .getAttribute("goods"); for (int i = 0;i < good_list.size();i++) { for (String checkId : checkbox) { Integer check = Integer.parseInt(checkId); if (good_list.get(i).getId() == check) { good_list.remove(good_list.get(i)); } } } //显示购物车列表时所用 application.setAttribute("goods", good_list); //定向到购物车页面 response.sendRedirect("car_list.jsp"); }else { System.out.println("---没有选择到要删除的商品---"); response.sendRedirect("car_list.jsp"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }package com.tiger.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 我的过滤器,除了登陆页面不过滤,其余都过滤 * @author tiger * @Date 2017年9月7日 */ @WebFilter(urlPatterns = {"/*"}) public class MyFilter implements Filter { public MyFilter() { } public void destroy() { System.out.println("MyFilter.destroy()"); } /** * 过滤器的核心方法 */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse resp = (HttpServletResponse)response; //获取请求的servlet映射路径 String servlet_path = req.getServletPath(); if (!servlet_path.equals("/login") && !servlet_path.equals("/login.jsp")) { //session String username_session = (String) req.getSession().getAttribute("username"); //判断是否处于在线状态 if (username_session != null) { //在线,则放行 chain.doFilter(request, response); }else { //不在线则返回登陆页面 resp.sendRedirect("login.jsp"); } }else { //提交的uri不是/login和/login.jsp时,则放行 chain.doFilter(request, response); } } public void init(FilterConfig fConfig) throws ServletException { System.out.println("MyFilter.init()"); } } package com.tiger.listener; import java.util.*; import javax.servlet.*; import javax.servlet.annotation.WebListener; import com.tiger.bean.Goods; /** * 监听器:初始化信息 * @author tiger * @time 2017年9月11日 */ @WebListener public class MyListener implements ServletContextListener { public MyListener() { } public void contextDestroyed(ServletContextEvent sce) { System.out.println("MyListener.contextDestroyed()"); } /** * 项目已启动就加载初始化商品列表信息 */ public void contextInitialized(ServletContextEvent sce) { //数据源,实际中是在数据库 Goods[] goods = { new Goods(0, "吉利", 60000.00), new Goods(1, "宝马", 660000.00), new Goods(2, "奔驰", 550000.00), new Goods(3, "兰博基尼", 4500000.00), new Goods(4, "法拉利", 2200000.00), new Goods(5, "大众", 130000.00) }; List
good_list = new ArrayList
(); //添加进集合中 Collections.addAll(good_list, goods); sce.getServletContext().setAttribute("good_list", good_list); System.out.println("---初始化商品列表数据 success!---"); } } package com.tiger.bean; import java.io.Serializable; /** * javabean的标准写法 * @author tiger * @Date 2017年9月10日 */ public class Goods implements Serializable{ private Integer id; private String name; private double price; /** * @param id * @param name * @param price */ public Goods(Integer id, String name, double price) { super(); this.id = id; this.name = name; this.price = price; } public Goods() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Good [id=" + id + ", name=" + name + ", price=" + price + "]"; } }