jsp实现传智书城登录+注册+后台管理

一、用户登入(前台+后台)

思路

我们来到login.jsp登录页面,发现需要用户账号和密码,这就需要与数据库进行交互,首先我们建user表存放用户的账号密码等数据,当我们点击登入时,访问到UserServlet2,判断act=login账号密码与数据库对比成功返回到myAccount.jsp前台页面。判断账号密码皆为admin时返回到home.jsp后台页面,失败弹出失败。

1. 案例演示

2. 实现步骤

2.1 login.jsp代码

设置form表单上传的路径为UserServlet2

<form action="${pageContext.request.contextPath}/client/logins?act=login" method="post">

xml为

    <servlet>
        <servlet-name>UsersServlet2</servlet-name>
        <servlet-class>bookshop.servlet.UsersServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>UsersServlet2</servlet-name>
        <url-pattern>/client/logins</url-pattern>
    </servlet-mapping>

2.1 UserServlet代码

package bookshop.servlet;

import bookshop.dao.UsersDao;
import bookshop.vo.Users;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet(name = "UserServlet2", value = {
    "/UserServlet"
}) public class UsersServlet extends HttpServlet {
    private UsersDao usersDao;

    @Override public void init(ServletConfig config) throws ServletException {

}

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
    IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
    IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");
        String act = request.getParameter("act");
        //登录判断
        if ("login".equals(act)) {
            request.setCharacterEncoding("utf-8");
            String name = request.getParameter("username");
            String psd = request.getParameter("password");
            UsersDao ud = new UsersDao();
            Users user = ud.getUserByNameAndPass(name, psd);
            System.out.println(name);
            System.out.println(psd);
            if (user != null) {
                request.getSession().setAttribute("user", user);
                //获取用户角色,如果是超级用户就进入用户后台,不是就是进入普通用户
                String usersrole = user.getRole();
                System.out.println("身份==>" + usersrole);
                if ("管理员".equals(usersrole)) {
                    System.out.println(request.getContextPath());
                    response.sendRedirect(request.getContextPath() + "/admin/login/home.jsp");
                } else {

                    response.sendRedirect(request.getContextPath() + "/client/myAccount.jsp");
                }

            } else {
                request.setAttribute("register_message", "错误");
                request.getRequestDispatcher("/client/login.jsp").forward(request, response);
            }
        }
        //注册判断
        if ("register".equals(act)) {
            Map < String,
            String[] > paramenter = request.getParameterMap();
            UsersDao ud = new UsersDao();
            Users users = new Users();
            users.setUsername(paramenter.get("username")[0]);
            users.setPassword(paramenter.get("password")[0]);
            users.setGender(paramenter.get("gender")[0]);
            users.setEmail(paramenter.get("email")[0]);
            if (ud.add(users)) {
                response.sendRedirect(request.getContextPath() + "/client/registersuccess.jsp");
            } else {
                request.setAttribute("error", "註冊失敗");
                request.getRequestDispatcher("/client/register.jsp").forward(request, response);
            }
        }

    }
}

二、用户注册

思路

1. 案例演示

点击注册进入注册页面,输入相应值点击注册提交,上传到数据库
在这里插入图片描述
在这里插入图片描述

2. 实现步骤

2.1 register.jsp代码

设置form表单上传的路径为UserServlet2

		<form action="${pageContext.request.contextPath}/client/logins?act=register" method="post" onsubmit="return checkForm();">

2.1 UserServlet代码

与上面一样	

三、后台管理

1. 后台管理一

思路

1. 案例演示

点击商品管理出现商品页面
在这里插入图片描述
在这里插入图片描述

2. 实现步骤

2.1 设置left.jsp代码

点击商品管理传到findProductByIdServlet进行判断处理,当act=list传到list.jsp页面

<tr>
<td><a href="${pageContext.request.contextPath}/admin/products/edit?act=list" target="mainFrame" class="left_list">商品管理</a></td>
</tr>
2.1 设置findProductByIdServlet代码

findProductByIdServlet执行当act=list时输出所有内容,把一下代码添加到后面findProductByIdServlet即可

if(act.equals("list")){
       BooksDao bd=new BooksDao();
       List<Books> books=new ArrayList<Books>();
       books=bd.getAll();
       request.getSession().setAttribute("ps",books);
       request.getRequestDispatcher("/admin/products/list.jsp").forward(request,response);
    }

2. 后台管理二

思路

首先我们访问商品管理,点击商品管理,访问到findProductByIdServlet响应到list.sp 点击编辑,访问到findProductByIdServle响应到编辑页面,修改编辑页面提交访问到findProductByIdServle,响应到成功或者失败页面

1. 案例演示

点击商品编辑,出现编辑页面,修改需要的商品名称等,上传商品图片,点击确定弹出修改成功,查看商品发现已经修改,查看数据库表,发现imgurl为 ip地址+时间戳+三个随机数生成不重复字符串。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ip+时间戳+随机数
在这里插入图片描述

2. 实现步骤

2.1 设置list.jsp代码

设置/admin/products/edit?act=find,点击编辑传到findProductByIdServlet进行判断处理,当act=find传到edit.jsp页面

<!--  循环输出所有商品 -->
<c:forEach items="${ps}" var="p">
	<tr onmouseover="this.style.backgroundColor = 'white'"
		onmouseout="this.style.backgroundColor = '#F5FAFE';">
		<td style="CURSOR: hand; HEIGHT: 22px" align="center" width="100">${p.id }</td>
		<td style="CURSOR: hand; HEIGHT: 22px" align="center" width="18%">${p.name }</td>
		<td style="CURSOR: hand; HEIGHT: 22px" align="center" width="8%">${p.price }</td>
		<td style="CURSOR: hand; HEIGHT: 22px" align="center" width="8%">${p.num }</td>
		<td style="CURSOR: hand; HEIGHT: 22px" align="center">${p.catagory}</td>
		<td style="CURSOR: hand; HEIGHT: 22px" align="center">${p.description}</td>
		<td align="center" style="HEIGHT: 22px" width="7%">
			<a href="${pageContext.request.contextPath}/admin/products/edit?act=find&id=${p.id}&type=admin">//点击编辑传到findProductByIdServlet处理
				<img src="${pageContext.request.contextPath}/admin/images/i_edit.gif" border="0" style="CURSOR: hand"> 
			</a>
		</td>
		<td align="center" style="HEIGHT: 22px" width="7%">
			<a href="${pageContext.request.contextPath}/deleteProduct?id=${p.id}" onclick="javascript:return p_del()">
					<img src="${pageContext.request.contextPath}/admin/images/i_del.gif"
					width="16" height="16" border="0" style="CURSOR: hand">
			</a>
		</td>
	</tr>
</c:forEach>
2.2 findProductByIdServlet代码

findProductByIdServlet执行当act=find时由id找到对应的商品,然后输出到编辑页面。当act=update时修改保存更改的编辑页面,保存上传的图片到upload文件,生成唯一字符串到保存到imgurl中。

package bookshop.servlet;

import books.Books.Books;
import books.Dao.BooksDao;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
import user.utils.IPTimeStamp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.File;
import java.io.IOException;

@WebServlet(name = "findProductByIdServlet", value = "/findProductByIdServlet")
public class findProductByIdServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       String act=request.getParameter("act");
        if(act.equals("find")){
           //获取id
           int id=Integer.parseInt(request.getParameter("id"));
           //实例化booksdao
           BooksDao bd=new BooksDao();
           //找到id的书
           Books books=bd.getBooks(id);
           //存起来
           request.getSession().setAttribute("p",books);
           //转到编辑页面
            System.out.println("nice");
           request.getRequestDispatcher("/admin/products/edit.jsp").forward(request,response);
       }

        if(act.equals("update")){
            update(request,response);
        }
    }
    protected  void  update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        System.out.println("update");
        String id=request.getParameter("id");
        int sid=Integer.parseInt(id);
        SmartUpload su=new SmartUpload();
        su.initialize(getServletConfig(),request,response);
        Books b=new Books();
        try {
            su.upload();
            b.setId(sid);
            b.setName(su.getRequest().getParameter("name"));
            b.setPrice(Double.parseDouble(su.getRequest().getParameter("price")));
            b.setNum(Integer.parseInt(su.getRequest().getParameter("num")));
            b.setCatagory(su.getRequest().getParameter("catagory"));
            b.setDescription(su.getRequest().getParameter("description"));
            //生成上传文件名
            IPTimeStamp its=new IPTimeStamp(request.getRemoteAddr());
            //扩展名
            String ext=su.getFiles().getFile(0).getFileExt();
            //ip +时间戳+字符串
            String fileName =its.getIpTimeRand()+"."+ext;
            //路径
            String pathName=getServletContext().getRealPath("/")+"upload"+ File.separator+fileName;
            //保存文件
            su.getFiles().getFile(0).saveAs(pathName);
            //设置商品图片地址列为文件的完整路径
            b.setImgurl("upload\\"+fileName);
            BooksDao bd=new BooksDao();
            if(bd.update(b)){
                response.getWriter().println("修改成功");
            }else {
                response.getWriter().println("修改失败");
            }
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
    }
}

2.3 BooksDao中update方法

在BooksDao中创建update方法用于用户修改

    @Override
    public boolean update(Books books) {
         Connection con = null;
         PreparedStatement pst = null;
         ResultSet rs = null;
            try {
                    con = JDBCutils.getConnection();
                    String sql="update books set name=?,price=?,catagory=?,num=?,description=?,imgurl=? where id=?";
                    pst=con.prepareStatement(sql);
                    pst.setString(1,books.getName());
                    pst.setDouble(2,(books.getPrice()));
                    pst.setString(3,books.getCatagory());
                    pst.setInt(4,books.getNum());
                    pst.setString(5,books.getDescription());
                    pst.setString(6,books.getImgurl());
                    pst.setInt(7,books.getId());
                    int i=pst.executeUpdate();
                    if(i==1){
                        return true;
                    }
            } catch (Exception e) {
               e.printStackTrace();
            } finally {
              JDBCutils.close(con, pst, rs);
            }
        return false;
    }
2.4 IPTimeStamp类

IPTimeStamp类用来获取ip地址时间戳随机数

package user.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class IPTimeStamp {
    //时间戳格式
    private SimpleDateFormat sdf=null;
    private String ip=null;

    public IPTimeStamp(){

    }
    public IPTimeStamp(String ip){
        this.ip=ip;
    }

    //时间复杂度,ip地址的转换,时间戳
    public  String getIpTimeRand(){
        StringBuffer buf=new StringBuffer();
        if(this.ip!=null){
            String s[]=this.ip.split("\\:");
            for(int i=0;i<s.length;i++){
                buf.append(this.addZero(s[i],3));
            }
        }
        //时间--字符串
        buf.append(this.getTimeStamp());
        Random r=new Random();
        for(int i=0;i<3;i++){
            buf.append(r.nextInt(10));
        }
        return buf.toString();
    }

    private String addZero(String str,int len){
        StringBuffer s=new StringBuffer();
        s.append(str);
        while (s.length()<len){
            s.insert(0,"0");
        }
        return s.toString();
    }

    public String getTimeStamp(){
        this.sdf=new SimpleDateFormat("YYYYMMddHHmmssSS");
        return this.sdf.format(new Date());
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑伴你而行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值