一个简单的java web 项目
来源:互联网 发布:淘宝卖家扣分会怎样 编辑:程序博客网 时间:2024/04/30 06:51
本文实现一个简单的 java web 项目,包括以下5个功能:
1. 登录
用户默认主页index.jsp , 可选择登录功能,输入用户名和密码,若登录成功,则进入产品管理总页面main.jsp。若不成功仍退回index.jsp
2. 注册
用户默认主页index.jsp , 可选择注册功能 ,若注册,则进入 register.jsp
3. 管理产品(增加,删除,查看)
登录成功后,进入产品管理总页面main.jsp。第一次进入main.jsp,默认显示所有产品列表。在此页面上更实现 查询某个产品记录,添加产品,批量删除,选中一项产品查看详情,实现分页功能。
3.1 添加产品
3.2 查询"圣女果"
3.3 选择“香蕉” ,点击 “查看”
4. 退出
用户点击“退出”时,清除session,退回主页面index.jsp
5. 过滤器
若用户没有登录成功,而直接访问 main.jsp 或 addProduct.jsp ,则被过滤器过滤到 index.jsp . 因为有成功登录,验证其身份后,才有权利访问产品和管理产品。否则将被过滤到默认主页index.jsp.
例如:在地址栏直接输入:http://192.168.0.103:8080/xianfengProject/main.jsp,则被过滤到index.jsp
-------------------------------------------------------------------------------
项目环境:
操作系统:win7
实现技术:jsp+servlet
数据库: mysql5.5.20 , Navicat_for_MySQL_11.0.10
服务器:apache-tomcat-7.0.40
开发平台: MyEclipse10
--------------------------------------------------------------------------------
说明:
1. 数据库
数据库名:mydb , 共两张表.
表一:userinfo (id , username , pswd)
表二:product (proid , proname, proprice , proaddress , proimage)
product (proid , proname, proprice , proaddress , proimage)表结构:
userinfo (id , username , pswd)表结构如下:
2. MyEclipse 工程目录
----------------------------------------------------------------------------------------------------------------------
1. index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>先锋管理系统欢迎您</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function login(){var th = document.form1;if(th.username.value==""){alert("用户名不能为空!");th.username.focus();return;}if(th.pswd.value==""){alert("密码不能为空!");th.pswd.focus();return;}th.action = "<%=path%>/servlet/LoginAction";th.submit();}</script> </head> <body> <div style="text-align:center"> <form name="form1" action="" method="post"> <table style="margin:auto"> <tr> <td colspan="2"> 先锋管理系统欢迎你! </td> </tr> <tr> <td>用户名:</td> <td><input type="text" name="username"></input></td> </tr> <tr> <td>密 码:</td> <td><input type="password" name="pswd"></input></td> </tr> <tr> <td colspan="2" align="center"> <button type="button" name="" value="" onclick="login()">登录</button> <button type="button" name="" value="" onclick="javascript:location.href='register.jsp'">注册</button> </td> </tr> </table> </form> </div> </body></html>
2. register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>注册新用户</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function dosubmit(){var th = document.form1;if(th.username.value==""){alert("用户名不能为空!");th.username.focus();return;}if(th.pswd.value==""){alert("密码不能为空!");th.pswd.focus();return;}th.action="<%=path%>/servlet/RegisterAction";th.submit();}function back(){ alert("退回主页!");th = document.form1;th.acton="<%=path%>/index.jsp";th.submit;}</script> </head> <body> <div style="text-align:center"> <form action="" name="form1" method="post"> <table style="margin:auto"> <tr> <td colspan="3"> 用户注册 </td> </tr> <tr> <td>用户名:</td> <td><input type="text" name="username"></input></td> <td>必须填写!</td> </tr> <tr> <td>密 码:</td> <td><input type="password" name="pswd"></input></td> <td>必须填写!</td> </tr> <tr> <td colspan="3" align="center"> <button type="button" name="" onclick="dosubmit()" >确定</button> <button type="button" name="" value="" onclick="javascript:location.href='index.jsp'" >返回</button> </td> </tr> </table> </form> </div> </body></html>
3.main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page import="com.util.*" %><%@ page import="com.product.*" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";//获取 session 中的 username;String username = (String)session.getAttribute("username");//获取从 servlet ProductActiion 中 传递的参数(数据库查询的结果)List<Map<String,Object>> list =(List<Map<String,Object>>) request.getAttribute("listProduct");// 获取 分页对象DividePage dividePage = (DividePage) request.getAttribute("dividePage");// 获取查询的关键词String productName = (String) request.getAttribute("productName");if(list==null){//第一次进 main.jsp页面,默认加载所有的产品ProductService service = new ProductDao();int totalRecord = service.getItemCount("");dividePage = new DividePage(5,totalRecord,1);int start = dividePage.fromIndex();int end = dividePage.toIndex();list = service.listProduct("", start, end);}%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>产品管理</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function searchProduct(){var th = document.form2;th.action="<%=path%>/servlet/ProductAction?action_flag=search";th.submit();}function first(){window.location.href = "<%=path%>/servlet/ProductAction?action_flag=search&pageNum=1";}function next(){window.location.href = "<%=path%>/servlet/ProductAction?action_flag=search&pageNum=<%=dividePage.getCurrentPage()+1%>";}function forward(){window.location.href = "<%=path%>/servlet/ProductAction?action_flag=search&pageNum=<%=dividePage.getCurrentPage()-1%>";}function end(){window.location.href = "<%=path%>/servlet/ProductAction?action_flag=search&pageNum=<%=dividePage.getPageCount() %>";}function changePage(currentPage){window.location.href = "<%=path%>/servlet/ProductAction?action_flag=search&pageNum="+currentPage;} function selectAll(flag){var ids = document.getElementsByName("ids");for(var i = 0 ; i < ids.length ; i++){ids[i].checked = flag;}}function getSelectedCount(){var ids = document.getElementsByName("ids");var count = 0;for(var i = 0 ; i < ids.length ; i++){ids[i].checked==true?count++:0;}return count;}function del(){if(getSelectedCount()==0){alert("至少选择一个删除项!");return;}var th = document.form1;th.action="<%=path%>/servlet/ProductAction?action_flag=del";th.submit();}function getSelectedValue(){var ids = document.getElementsByName("ids");for(var i = 0 ; i < ids.length ; i++){if(ids[i].checked){return ids[i].value;}}}function view(){if(getSelectedCount()<1){alert("至少选择一个查看项!");return;}else if(getSelectedCount()>1){alert("只能选择一个查看项!");return;}var th = document.form1;th.action="<%=path%>/servlet/ProductAction?action_flag=view&proid="+getSelectedValue();th.submit();}function logout(){window.location.href="<%=path %>/servlet/LogoutAction?action_flag=logout";}</script> </head> <body> <div> <table width=60% align="center"> <tr> <td align="left"><font size=2>欢迎您的光临,<%=username%><br><a href="javascript:logout();">退出</a></font></td> </tr> <tr> <td align="center"> <form name = "form2" action="" method="post"> <table> <tr> <td colspan="2">产品信息查询</td> </tr> <tr> <td >产品名称</td> <td ><input type="text" name="proname" value="<%= productName!=null?productName:"" %>"/></td> </tr> <tr> <td colspan="2" align="center"> <button type="button" onclick="searchProduct()" >查询</button> <button type="button" onclick="javascript:location.href='<%=path %>/addProduct.jsp'">添加</button> </td> </tr> </table> </form> </td> </tr> <tr> <td height=50> </td> </tr> <tr> <td> 查询结果</td> </tr> <tr> <td > <form name="form1" action="" method="post"> <table border=1 width=100%> <tr align="center"> <td width=10%><input type="checkbox" name="checkall" onclick="javascript:selectAll(this.checked);" /></td> <td width=30%>产品名称</td> <td width=30%>产品产地</td> <td>产品价格</td> </tr> <% if(list!=null && !list.isEmpty()){ for(Map<String,Object> map :list){%> <tr align="center"> <td width=10%><input type="checkbox" name="ids" value="<%=map.get("proid") %>"/></td> <td width=30%><%=map.get("proname") %></td> <td width=30%><%=map.get("proaddress") %></td> <td><%=map.get("proprice") %></td> <%} }else{%> <tr align="center"> <td width=10%><input type="checkbox" name="" /></td> <td width=30%></td> <td width=30%></td> <td></td> </tr><% } %> </table> </form> </td> </tr> <tr> <td> <button type="button" onclick="javascript:del();">删除</button> <button type="button" onclick="javascript:view();" >查看</button> </td> </tr> <tr> <td colspan="4" align="center"> 共<%=dividePage.getPageCount() %>页 <a href="javascript:first();">首页</a> <a href="javascript:forward();">上一页</a> <a href="javascript:next();">下一页</a> <a href="javascript:end();">尾页</a> 跳转到<select name="select" onchange="changePage(this.value)"> <% int pageCount = dividePage.getPageCount(); if(pageCount>0){ for(int i = 1 ; i<=pageCount;i++){%> <option value="<%=i %>" <%= (i==dividePage.getCurrentPage()?"selected":"")%>> <%=i %> </option> <% } }else{// 无记录 %> <option value="1">1</option> <%} %> </select> </td> </tr> </table> </div> </body></html>
4.addProduct.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>新增产品</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function dosubmit(){var th = document.form1;th.action="<%= path%>/servlet/ProductAction?action_flag=add";th.submit();}</script> </head> <body> <div align="center"> <table width=70% style="margin:auto;"> <tr><td align="center" height=150 valign="bottom">产品信息添加</td></tr> <tr> <td> <form id="form1" name="form1" action="" method="post" enctype="multipart/form-data"> <table border=1 style="margin:auto"> <tr > <td>产品名称</td> <td><input type="text" name="proname" id="proname"/></td> <td>产品价格</td> <td><input type="text" name="proprice" id="proprice"/></td> </tr> <tr> <td>产品产地</td> <td colspan="3"><input type="text" name="proaddress" id="proaddress"/></td> </tr> <tr> <td>产品图片</td> <td colspan="3"><input type="file" name="proimage" id="proimage" size=35/></td> </tr> </table> </form> </td> </tr> <tr> <td colspan="4" align="center"> <button type="button" onclick="javascript:dosubmit();">确定</button> <button type="button" onclick="javascript:location.href='main.jsp'">返回</button> </td> </tr> </table> </div> </body></html>
5. viewProduct.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";Map<String,Object> map = (Map<String,Object>)request.getAttribute("productMap");%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>查看产品</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <div align="center"> <table width=60% style="margin:auto"> <tr> <td height=100> </td> </tr> <tr> <td > 产品信息 </td> </tr> <tr> <td> <table width = 99% border =1 > <tr align="center"> <td width = 20%>产品名称</td> <td width = 30%><%=map.get("proname") %></td> <td width = 20%>产品价格</td> <td><%=map.get("proprice") %></td> </tr> <tr align="center"> <td >产品产地</td> <td colspan=3><%=map.get("proaddress") %></td> </tr> <tr align="center"> <td>产品图片</td> <td colspan=3><img src="<%=path%>/upload/<%=map.get("proimage") %>"></td> </tr> </table> </td> </tr> <tr> <td align="center"> <button type="button" onclick="javascript:location.href='<%=path %>/main.jsp'">确定</button> <button type="button" onclick="javascript:history.go(-1)">返回</button> </td> </tr> </table> </div> </body></html>
6.LoginAction.java
package com.login;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;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 LoginAction extends HttpServlet {private LoginService service;/** * Constructor of the object. */public LoginAction() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();String path = request.getContextPath();String username = request.getParameter("username");String pswd = request.getParameter("pswd");List<Object> params = new ArrayList<Object>();params.add(username);params.add(pswd);boolean flag = service.login(params);if (flag) {request.getSession().setAttribute("username", username);response.sendRedirect(path+"/main.jsp");}else{response.sendRedirect(path+"/index.jsp");}out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code hereservice = new LoginDao();}}
7.LoginDao.java
package com.login;import java.sql.SQLException;import java.util.List;import java.util.Map;import javax.mail.Flags.Flag;import com.jdbc.JdbcUtils;public class LoginDao implements LoginService {private JdbcUtils jdbcUtils;public LoginDao() {// TODO Auto-generated constructor stubjdbcUtils = new JdbcUtils();}@Overridepublic boolean login(List<Object> params) {// TODO Auto-generated method stubboolean flag = false;try {jdbcUtils.getConnection();String sql = "select * from userinfo where username = ? and pswd = ?";Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);flag = !map.isEmpty()?true:false;} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{//关闭数据库jdbcUtils.releaseConn();}return flag;}}
8.LoginService.java
package com.login;import java.util.List;public interface LoginService {public boolean login(List<Object> params);}
9. MyFilter.java
package com.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.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyFilter implements Filter {public MyFilter() {// TODO Auto-generated constructor stub}@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {// 过滤用户请求,判断是否登录HttpServletRequest httpServletRequest = (HttpServletRequest)request;HttpServletResponse httpServletResponse = (HttpServletResponse)response;httpServletRequest.setCharacterEncoding("utf-8");httpServletResponse.setCharacterEncoding("utf-8");String username = (String)httpServletRequest.getSession().getAttribute("username");if (username == null) {String path = httpServletRequest.getContextPath();httpServletResponse.sendRedirect(path+"/index.jsp");}filterChain.doFilter(httpServletRequest, httpServletResponse);}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
10.RegisterAction.java
package com.register;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;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 RegisterAction extends HttpServlet {private RegisterService service;/** * Constructor of the object. */public RegisterAction() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();String path = request.getContextPath();String username = request.getParameter("username");String pswd = request.getParameter("pswd");List<Object> params = new ArrayList<Object>();params.add(username);params.add(pswd); boolean flag = service.registerUser(params);if (flag) {response.sendRedirect(path+"/index.jsp");}out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code hereservice = new RegisterDao();}}
11. RegisterDao.java
package com.register;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.jdbc.JdbcUtils;public class RegisterDao implements RegisterService {private JdbcUtils jdbcUtils;public RegisterDao() {// TODO Auto-generated constructor stubjdbcUtils = new JdbcUtils();}/* 完成对用户注册的dao的编写 * @see com.register.service.RegisterService#registerUser(java.util.List) */@Overridepublic boolean registerUser(List<Object> params) {// TODO Auto-generated method stubboolean flag = false;try {jdbcUtils.getConnection();String sql = "insert into userinfo(username,pswd) values(?,?)";flag = jdbcUtils.updateByPreparedStatement(sql, params);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{//关闭数据库连接jdbcUtils.releaseConn();}return flag;}}
12. RegisterService.java
package com.register;import java.util.List;public interface RegisterService {//完成用户注册功能public boolean registerUser(List<Object> params);}
13. ProductAction.java
package com.product;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.util.DividePage;import com.util.UUIDTools;public class ProductAction extends HttpServlet {private ProductService service;/** * Constructor of the object. */public ProductAction() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String action_flag = request.getParameter("action_flag");if (action_flag.equals("add")) {addProduct(request,response);}else if (action_flag.equals("search")) {listProduct(request,response);}else if (action_flag.equals("del")) {delProduct(request,response);}else if (action_flag.equals("view")) {viewProduct(request,response);}out.flush();out.close();}private void viewProduct(HttpServletRequest request,HttpServletResponse response) {// TODO Auto-generated method stubString proid = request.getParameter("proid");Map<String, Object> map = service.viewProduct(proid);request.setAttribute("productMap", map);try {request.getRequestDispatcher("/viewProduct.jsp").forward(request, response);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }/**批量删除产品 * @param request * @param response */private void delProduct(HttpServletRequest request,HttpServletResponse response) {// TODO Auto-generated method stubSystem.out.println("进入del");//获得复选框的值String[] ids = request.getParameterValues("ids");for (int i = 0; i < ids.length; i++) {System.out.println("ids["+i+"]="+ids[i]);}boolean flag = service.delProduct(ids);System.out.println("删除flag:"+flag);if (flag) {try {request.getRequestDispatcher("/main.jsp").forward(request, response);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void listProduct(HttpServletRequest request,HttpServletResponse response) {// TODO Auto-generated method stubString productName = request.getParameter("proname");String pageNum = request.getParameter("pageNum");System.out.println("参数 pageNum :"+pageNum);if (productName == null) {productName = "";}int totalRecord = service.getItemCount(productName); //获取总的记录数int currentPage = 1;DividePage dividePage = new DividePage(5, totalRecord);//默认第一页开始if (pageNum != null) {currentPage = Integer.parseInt(pageNum);dividePage.setCurrentPage(currentPage);}//记录从第几行开始int start = dividePage.fromIndex();//显示几条记录int end = dividePage.toIndex();System.out.println("currentPageNum :"+ dividePage.getCurrentPage() +", start = "+start +", end = "+end);List<Map<String, Object>> list = null;try {list = service.listProduct(productName , start , end);request.setAttribute("listProduct", list);request.setAttribute("dividePage", dividePage);request.setAttribute("productName",productName );request.getRequestDispatcher("/main.jsp").forward(request, response);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}private void addProduct(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{//表单含有文件要提交String path = request.getContextPath();DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);servletFileUpload.setFileSizeMax(3*1024*1024);//单个文件大小限制3MservletFileUpload.setSizeMax(6*1024*1024);//上传文件总大小List<FileItem> list = null;List<Object> params = new ArrayList<Object>();params.add(UUIDTools.getUUID()); // 参数传 product表的主键try {//解析request的请求list = servletFileUpload.parseRequest(request);//取出所有表单的值,判断非文本字段和文本字段for(FileItem fileItem : list){if (fileItem.isFormField()) {//是文本字段String fileItemName = fileItem.getFieldName(); //获取 <input>控件的 名称String fileItemValue = fileItem.getString("utf-8");//获取<input>控件的值if (fileItemName.equals("proname")) {params.add(fileItemValue); //参数传入 proname}else if (fileItemName.equals("proprice")) {params.add(fileItemValue);//参数传入 proprice}else if (fileItemName.equals("proaddress")) {params.add(fileItemValue);////参数传入 proaddress}}else{ //非文本字段String imageName = fileItem.getName(); //获取文件名称params.add(imageName);//参数传入 proimage//String path = request.getRealPath("/upload");String upload_dir = request.getServletContext().getRealPath("/upload");//获取服务器端 /upload 路径File uploadFile = new File(upload_dir+"/"+imageName);System.out.println("---upload_dir--->>"+uploadFile);fileItem.write(uploadFile);}}// 把产品加入数据库boolean flag = service.addProduct(params);if (flag) {response.sendRedirect(path+"/main.jsp");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code hereservice = new ProductDao();}}
14.ProductDao.java
package com.product;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.jdbc.JdbcUtils;public class ProductDao implements ProductService {private JdbcUtils jdbcUtils;public ProductDao() {// TODO Auto-generated constructor stubjdbcUtils = new JdbcUtils();}@Overridepublic boolean addProduct(List<Object> params) {boolean flag = false;try {jdbcUtils.getConnection();String sql = "insert into product(proid,proname,proprice,proaddress,proimage) values(?,?,?,?,?)";flag = jdbcUtils.updateByPreparedStatement(sql, params);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{// 关闭数据库连接jdbcUtils.releaseConn();}return flag;}@Overridepublic List<Map<String, Object>> listProduct(String proname ,int start ,int end) {// TODO Auto-generated method stubList<Map<String, Object>> list = new ArrayList<Map<String,Object>>();List<Object> params = new ArrayList<Object>();try {jdbcUtils.getConnection();String sql = "select * from product where 1=1 and proname like ? limit ? ,?";if(proname.equals("")){sql = "select * from product limit ? ,?";params.add(start);params.add(end);}else{params.add("%"+proname+"%");params.add(start);params.add(end);}list = jdbcUtils.findMoreResult(sql, params);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally{jdbcUtils.releaseConn();}return list;}//查询总记录数@Overridepublic int getItemCount(String proname) {// TODO Auto-generated method stubint count = 0;Map<String, Object> map = null;List<Object> params = null;try {jdbcUtils.getConnection();String sql = "select count(*) totalCount from product where 1=1 and proname like ?";if(proname.equals("")){sql = "select count(*) totalCount from product";}else{params = new ArrayList<Object>();params.add("%"+proname+"%");}map = jdbcUtils.findSimpleResult(sql, params);count = Integer.parseInt(map.get("totalCount").toString());} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally{// 关闭数据库连接jdbcUtils.releaseConn();}return count;}@Overridepublic boolean delProduct(String[] ids) {boolean flag = false;try {jdbcUtils.getConnection();if (ids!=null) {String[] sql = new String[ids.length];for(int i = 0 ; i< ids.length; i++){sql[i] = "delete from product where proid = '"+ids[i]+"'";System.out.println(sql[i]);}flag = jdbcUtils.deleteByBatch(sql);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally{// 关闭数据库连接jdbcUtils.releaseConn();}return flag;}@Overridepublic Map<String, Object> viewProduct(String proid) {// TODO Auto-generated method stubMap<String, Object> map = null;try {jdbcUtils.getConnection();List<Object> params = new ArrayList<Object>();params.add(proid);String sql = "select * from product where proid = ?";map = jdbcUtils.findSimpleResult(sql, params);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally{// 关闭数据库连接jdbcUtils.releaseConn();}return map;}}
15. ProductService.java
package com.product;import java.util.List;import java.util.Map;public interface ProductService {public boolean addProduct(List<Object> params);//列出产品,为了分页,加上参数 start,endpublic List<Map<String, Object>> listProduct(String proname , int start , int end);//获取总的记录数public int getItemCount(String proname);//批处理删除产品public boolean delProduct(String[] ids);//查询单个产品public Map<String, Object> viewProduct(String proid);}
16. JdbcUtils.java
package com.jdbc;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap; import java.util.List;import java.util.Map;import com.mysql.jdbc.Driver;public class JdbcUtils {// 定义数据库的用户名private final String USERNAME = "root";// 定义数据库的密码private final String PASSWORD = "123456";// 定义数据库的驱动信息private final String DRIVER = "com.mysql.jdbc.Driver";// 定义访问数据库的地址private final String URL = "jdbc:mysql://localhost:3306/mydb";// 定义访问数据库的连接private Connection connection;// 定义sql语句的执行对象private PreparedStatement pstmt;// 定义查询返回的结果集合private ResultSet resultSet;// 实现批处理的功能private Statement stmt;public JdbcUtils() {// TODO Auto-generated constructor stubtry {Class.forName(DRIVER);System.out.println("注册驱动成功!!");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blockSystem.out.println("注册驱动失败!!");}}// 定义获得数据库的连接public Connection getConnection() {try {connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (Exception e) {// TODO: handle exceptionSystem.out.println("Connection exception !");}return connection;}/** 实现批处理删除 * @param sql * @return * @throws SQLException */public boolean deleteByBatch(String[] sql) throws SQLException{boolean flag = false;stmt = connection.createStatement();if (sql!=null) { //判断数组是否为空,不能用length来判断,否则可能会报空指针异常。for(int i = 0 ; i<sql.length ; i++){stmt.addBatch(sql[i]);}int[] count = stmt.executeBatch();if (count!=null) {flag = true;}}return flag;}/** * 完成对数据库标的增加删除和修改的操作 * * @param sql * @param params * @return * @throws SQLException */public boolean updateByPreparedStatement(String sql, List<Object> params)throws SQLException {boolean flag = false;int result = -1;// 表示当用户执行增加删除和修改的操作影响的行数int index = 1; // 表示 占位符 ,从1开始pstmt = connection.prepareStatement(sql);if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i)); // 填充占位符}}result = pstmt.executeUpdate();flag = result > 0 ? true : false;return flag;}/** * 查询返回单条记录 * * @param sql * @param params * @return * @throws SQLException */public Map<String, Object> findSimpleResult(String sql, List<Object> params)throws SQLException {Map<String, Object> map = new HashMap<String, Object>();pstmt = connection.prepareStatement(sql);int index = 1;if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));}}resultSet = pstmt.executeQuery(); // 返回查询结果ResultSetMetaData metaData = pstmt.getMetaData(); // 获取 结果中,一行所有列的结果int cols_len = metaData.getColumnCount(); // 获得列的总数while (resultSet.next()) {for (int i = 0; i < cols_len; i++) {String col_name = metaData.getColumnName(i + 1); // 获得第i列的字段名称Object col_value = resultSet.getObject(col_name);// 返回 第i列的内容值if (col_value == null) {col_value = "";}map.put(col_name, col_value);}}return map;}/** * 查询返回多条记录 * * @param sql * @param params * @return * @throws SQLException */public List<Map<String, Object>> findMoreResult(String sql,List<Object> params) throws SQLException {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();pstmt = connection.prepareStatement(sql);int index = 1; // 表示占位符if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));}}resultSet = pstmt.executeQuery(); // 返回查询结果集合ResultSetMetaData metaData = resultSet.getMetaData(); // 获得列的结果while (resultSet.next()) {Map<String, Object> map = new HashMap<String, Object>();int cols_len = metaData.getColumnCount(); // 获取总的列数for (int i = 0; i < cols_len; i++) {String col_name = metaData.getColumnName(i + 1); // 获取第 i列的字段名称// ,列计算从1开始Object col_value = resultSet.getObject(col_name); // 获取第i列的内容值if (col_value == null) {col_value = "";}map.put(col_name, col_value);}list.add(map);}return list;}/** * 查询返回单个JavaBean(使用java反射机制) * * @param sql * @param params * @param cls * @return * @throws Exception */public <T> T findSimpleRefResult(String sql, List<Object> params,Class<T> cls) throws Exception {T resultObject = null;int index = 1; // 占位符pstmt = connection.prepareStatement(sql);if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i)); // 填充占位符}}resultSet = pstmt.executeQuery(); // 获取查询结果ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列的信息int cols_len = metaData.getColumnCount(); // 获取总的列数while (resultSet.next()) {// 通过反射机制创建实例resultObject = cls.newInstance(); // java反射机制for (int i = 0; i < cols_len; i++) {String col_name = metaData.getColumnName(i + 1); // 获取第i列的名称Object col_value = resultSet.getObject(col_name); // 获取第i列的值if (col_value == null) {col_value = "";}Field field = cls.getDeclaredField(col_name);field.setAccessible(true);// 打开 JavaBean的访问 private权限field.set(resultObject, col_value);}}return resultObject;}/** 查询返回多个JavaBean(通过java反射机制) * @param sql * @param params * @param cls * @return * @throws Exception */public <T> List<T> findMoreRefResult(String sql, List<Object> params,Class<T> cls) throws Exception {List<T> list = new ArrayList<T>();int index = 1; //占位符pstmt = connection.prepareStatement(sql);if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));}}resultSet = pstmt.executeQuery(); // 返回查询结果集合ResultSetMetaData metaData = resultSet.getMetaData(); // 返回列的信息int cols_len = metaData.getColumnCount(); // 结果集中总的列数while (resultSet.next()) {// 通过反射机制创建一个java实例T resultObject = cls.newInstance();for (int i = 0; i < cols_len; i++) {String col_name = metaData.getColumnName(i + 1); // 获得第i列的名称Object col_value = resultSet.getObject(col_name); // 获得第i列的内容if (col_value == null) {col_value = "";}Field field = cls.getDeclaredField(col_name);field.setAccessible(true); // 打开JavaBean的访问private权限field.set(resultObject, col_value);}list.add(resultObject);}return list;}/**关闭数据库访问 * @throws SQLException */public void releaseConn(){if (resultSet!=null) {try {resultSet.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}if (pstmt!=null) {try {pstmt.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}if (connection!=null) {try {connection.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}}
17. DividePage.java
package com.util;public class DividePage {private int pageSize ; //每一页的记录数private int totalRecord;//总记录数private int currentPage;//当前第几页public DividePage(int pageSize, int totalRecord, int currentPage) {this.pageSize = pageSize;this.totalRecord = totalRecord;setCurrentPage(currentPage);}public DividePage(int pageSize, int totalRecord) {this(pageSize,totalRecord,1);}//获取总页数public int getPageCount(){int pageCount = totalRecord/pageSize;int mod = totalRecord%pageSize;if (mod!=0) {pageCount++;}return pageCount;}// mysql : select * from product limit 5,10 表示查询记录行 第6到15行。//起始记录从第几行开始(mysql 记录默认从第0行开始)public int fromIndex(){return (currentPage-1)*pageSize;}//要查询的的尾记录相对于起始记录的偏移量,即一页的记录数public int toIndex(){return pageSize;}public void setCurrentPage( int currentPage){if (getPageCount()!=0) {//有记录int validPage = currentPage<1?1:currentPage;validPage = validPage>getPageCount()?getPageCount():validPage;this.currentPage = validPage;} else{ // 0条记录this.currentPage = 1;}}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalRecord() {return totalRecord;}public void setTotalRecord(int totalRecord) {this.totalRecord = totalRecord;}public int getCurrentPage() {return currentPage;}}
18. UUIDTools.java
package com.util;import java.util.UUID;public class UUIDTools {public UUIDTools() {// TODO Auto-generated constructor stub}/**返回一个 6位的字符串 * @return */public static String getUUID(){UUID uuid = UUID.randomUUID();return uuid.toString().replaceAll("-", "").substring(0, 6); }}
20. LogoutAction.java
package com.logout;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 LogoutAction extends HttpServlet {/** * Constructor of the object. */public LogoutAction() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");String path = request.getContextPath();String action_flag = request.getParameter("action_flag");if (action_flag.equals("logout")) {request.getSession().removeAttribute("username");response.sendRedirect(path+"/index.jsp");}}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here}}
21. web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>RegisterAction</servlet-name> <servlet-class>com.register.RegisterAction</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>LoginAction</servlet-name> <servlet-class>com.login.LoginAction</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ProductAction</servlet-name> <servlet-class>com.product.ProductAction</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>LogoutAction</servlet-name> <servlet-class>com.logout.LogoutAction</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterAction</servlet-name> <url-pattern>/servlet/RegisterAction</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LoginAction</servlet-name> <url-pattern>/servlet/LoginAction</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ProductAction</servlet-name> <url-pattern>/servlet/ProductAction</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LogoutAction</servlet-name> <url-pattern>/servlet/LogoutAction</url-pattern> </servlet-mapping> <!-- 配置 过滤器 --> <filter> <filter-name>MyFilter</filter-name> <filter-class>com.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <!-- /*表示过滤所有页面 ,/main.jsp 表示只过滤main.jsp页面--> <url-pattern> /main.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>MyFilter</filter-name> <!-- /*表示过滤所有页面 /addProduct.jsp 表示只过滤addProduct.jsp页面--> <url-pattern>/addProduct.jsp</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
注意:
1. 使用过滤器,要引入jar包:servlet-2_5-api.jar
2. 使用jdbc连接mysql , 要引入jar包:mysql-connector-java-5.1.7-bin.jar
3. 文件上传,要引入2个jar包:
commons-fileupload-1.3.1.jar 和
commons-io-2.4.jar
- 一个简单的java web 项目
- 一个简单的Java Web项目
- 【Java.Web】创建一个简单的Java Web项目
- 一个最简单的java web项目的部署
- 一个简单的Java Web项目搭建流程
- <java EE 项目:Attendance> 从一个简单项目看java web 开发的整体布局
- Jsp 入门 - 一个简单的web项目
- 创建一个简单的maven web项目
- 一个简单的Web API项目
- 一个java web项目
- 一个简单web服务器的java实现
- Java 实现一个简单的web服务器
- java实现一个简单的Web服务器
- java实现一个简单的Web服务器
- Java Web的一个简单购物网站
- Java实现一个简单的Web服务器
- 一个简单的Java web服务器实现
- Java编写一个简单的Web爬虫
- 运行Capture.exe找不到cdn_sfl401as.dll
- 我看到的最棒的Twisted入门教程!
- Latent semantic analysis note(LSA)
- 总是掉头发怎么办
- C++初学者(关于函数指针的应用)
- 一个简单的java web 项目
- jQuery UI Dialog 创建友好的弹出对话框
- Oracle如何保持一致读?
- WinCE的C#程序中获取当前应用程序的路径
- Android 常用语句
- svnserve.conf: Option expected的问题解决方法
- 模板,无向图强连通缩点,tarjan
- 我的日记
- Eclipse - Eclipse CDT配置OpenCV项目