文章目录
一、用户登入(前台+后台)
思路
我们来到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());
}
}