1.在浏览器中输入”http://localhost:8080/ch10/index.jsp”进入主页,主页页面如下图所示:左边为树形菜单,右边为手机销售网主页页面图。
代码:index.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<HEAD>
<%@ include file="head.txt" %>
<link rel="StyleSheet" href="dtree.css" type="text/css" />
<script type="text/javascript" src="dtree.js"></script>
</HEAD>
<title>首页</title>
<CENTER>
<h1><font Size=4 color=blue>
欢迎光临“智多星”智能手机销售网
</font>
</h1>
</CENTER>
<meta charset="UTF-8">
<title>树形菜单</title>
<BODY>
<div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'My example tree');
d.add(2,0,'用户');
d.add(8,2,'注册','inputRegisterMess.jsp');
d.add(9,2,'登录','login.jsp');
d.add(3,0,'商品');
d.add(10,3,'浏览手机','lookMobile.jsp');
d.add(11,3,'查询手机','searchMobile.jsp');
d.add(4,0,'我的');
d.add(12,4,'购物车','lookShoppingCar.jsp');
d.add(13,4,'订单','lookOrderForm.jsp');
d.add(5,0,'退出','exitServl');
d.add(6,0,'主页','indexx.jsp');
document.write(d);
//-->
</script>
</div>
<CENTER>
<img src="image/welcome.jpg" width=500 height=400 ></img>
</CENTER>
</BODY></HTML>
2.树形菜单一共五个菜单:用户、商品、我的、退出和主页。
①用户:分两个子菜单,分别是注册和登录。
注册页面:
若输入格式有误、密码为空、两次输入密码不正确或用户名已存在数据库里,则注册失败。
代码:HandleRegister.class
package myservlet.control; import mybean.data.*; import java.sql.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HandleRegister extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e){} } public String handleString(String s) { try{ byte bb[]=s.getBytes("iso-8859-1"); s=new String(bb); } catch(Exception ee){} return s; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String uri="jdbc:mysql://127.0.0.1/mobileshop?"+ "user=root&password=777777&characterEncoding=gb2312"; Connection con; PreparedStatement sql; Register userBean=new Register(); //创建的Javabean模型 request.setAttribute("userBean",userBean); String logname=request.getParameter("logname").trim(); String password=request.getParameter("password").trim(); String again_password=request.getParameter("again_password").trim(); String phone=request.getParameter("phone").trim(); String address=request.getParameter("address").trim(); String realname=request.getParameter("realname").trim(); if(logname==null) logname=""; if(password==null) password=""; if(!password.equals(again_password)) { userBean.setBackNews("两次密码不同,注册失败,"); RequestDispatcher dispatcher= request.getRequestDispatcher("inputRegisterMess.jsp"); dispatcher.forward(request, response);//转发 return; } boolean isLD=true; for(int i=0;i<logname.length();i++){ char c=logname.charAt(i); if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0'))) isLD=false; } boolean boo=logname.length()>0&&password.length()>0&&isLD; String backNews=""; try{ con=DriverManager.getConnection(uri); String insertCondition="INSERT INTO user VALUES (?,?,?,?,?)"; sql=con.prepareStatement(insertCondition); if(boo) { sql.setString(1,handleString(logname)); sql.setString(2,handleString(password)); sql.setString(3,handleString(phone)); sql.setString(4,handleString(address)); sql.setString(5,handleString(realname)); int m=sql.executeUpdate(); if(m!=0){ backNews="注册成功"; userBean.setBackNews(backNews); userBean.setLogname(logname); userBean.setPhone(handleString(phone)); userBean.setAddress(handleString(address)); userBean.setRealname(handleString(realname)); } } else { backNews="信息填写不完整或名字中有非法字符"; userBean.setBackNews(backNews); } con.close(); } catch(SQLException exp){ backNews="该会员名已被使用,请您更换名字"+exp; userBean.setBackNews(backNews); } RequestDispatcher dispatcher= request.getRequestDispatcher("inputRegisterMess.jsp"); dispatcher.forward(request, response);//转发 } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doPost(request,response); } }
Register.class
package mybean.data; public class Register{ String logname="" , phone="", address="",realname="",backNews="请输入信息"; public void setLogname(String logname){ this.logname=logname; } public String getLogname(){ return logname; } public void setPhone(String phone){ this.phone=phone; } public String getPhone(){ return phone; } public void setAddress(String address){ this.address=address; } public String getAddress(){ return address; } public void setRealname(String realname){ this.realname=realname; } public String getRealname(){ return realname; } public void setBackNews(String backNews){ this.backNews=backNews; } public String getBackNews(){ return backNews; } }
登录页面:
代码:Login.class
package mybean.data; import java.util.*; public class Login { String logname="", backNews="未登录"; LinkedList<String> car; //用户的购物车 public Login() { car = new LinkedList<String>(); } public void setLogname(String logname){ this.logname = logname; } public String getLogname(){ return logname; } public void setBackNews(String s) { backNews = s; } public String getBackNews(){ return backNews; } public LinkedList<String> getCar() { return car; } }
HandelLogin.class
package myservlet.control; import mybean.data.*; import java.sql.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class HandleLogin extends HttpServlet{ public void init(ServletConfig config) throws ServletException{ super.init(config); try{ Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e){} } public String handleString(String s){ try{ byte bb[]=s.getBytes("iso-8859-1"); s=new String(bb); } catch(Exception ee){} return s; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ Connection con; Statement sql; String logname=request.getParameter("logname").trim(), password=request.getParameter("password").trim(); logname=handleString(logname); password=handleString(password); String uri="jdbc:mysql://127.0.0.1/mobileshop?"+ "user=root&password=777777&characterEncoding=gb2312"; boolean boo=(logname.length()>0)&&(password.length()>0); try{ con=DriverManager.getConnection(uri); String condition="select * from user where logname = '"+logname+ "' and password ='"+password+"'"; sql=con.createStatement(); if(boo){ ResultSet rs=sql.executeQuery(condition); boolean m=rs.next(); if(m==true){ //调用登录成功的方法: success(request,response,logname,password); RequestDispatcher dispatcher= request.getRequestDispatcher("login.jsp");//转发 dispatcher.forward(request,response); } else{ String backNews="您输入的用户名不存在,或密码不般配"; //调用登录失败的方法: fail(request,response,logname,backNews); } } else{ String backNews="请输入用户名和密码"; fail(request,response,logname,backNews); } con.close(); } catch(SQLException exp){ String backNews=""+exp; fail(request,response,logname,backNews); } } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } public void success(HttpServletRequest request,HttpServletResponse response ,String logname,String password) { Login loginBean=null; HttpSession session=request.getSession(true); try{ loginBean=(Login)session.getAttribute("loginBean"); if(loginBean==null){ loginBean=new Login(); //创建新的数据模型 session.setAttribute("loginBean",loginBean); loginBean=(Login)session.getAttribute("loginBean"); } String name =loginBean.getLogname(); if(name.equals(logname)) { loginBean.setBackNews(logname+"已经登录了"); loginBean.setLogname(logname); } else { //数据模型存储新的登录用户 loginBean.setBackNews(logname+"登录成功"); loginBean.setLogname(logname); } } catch(Exception ee){ loginBean=new Login(); session.setAttribute("loginBean",loginBean); loginBean.setBackNews(logname+"登录成功"); loginBean.setLogname(logname); } } public void fail(HttpServletRequest request,HttpServletResponse response ,String logname,String backNews) { response.setContentType("text/html;charset=GB2312"); try { PrintWriter out=response.getWriter(); out.println("<html><body>"); out.println("<h2>"+logname+"登录反馈结果<br>"+backNews+"</h2>") ; out.println("返回登录页面或主页<br>"); out.println("<a href =login.jsp>登录页面</a>"); out.println("<br><a href =index.jsp>主页</a>"); out.println("</body></html>
②商品:分为浏览和查询两个子菜单
浏览功能:提交手机分类就能获得相应手机的信息
例如:提交iPhone手机
提交Android手机
代码:LookMobile.jsp
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %>
<HTML> <HEAD> <%@ include file="head.txt" %> <link rel="StyleSheet" href="dtree.css" type="text/css" /> <script type="text/javascript" src="dtree.js"></script> </HEAD>
<meta charset="UTF-8"> <title>树形菜单</title> <BODY bgcolor=cyan><font size=2> <div align="center">
<h2>选择某类手机<br>分页显示这类手机</h2> <% try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e){} String uri="jdbc:mysql://127.0.0.1/mobileshop?"+ "user=root&password=777777&characterEncoding=gb2312"; Connection con; Statement sql; ResultSet rs; try { con=DriverManager.getConnection(uri); sql=con.createStatement(); //读取mobileClassify表,获得分类: rs=sql.executeQuery("SELECT * FROM mobileClassify "); out.print("<form action='queryServlet' method ='post'>") ; out.print("<select name='fenleiNumber'>") ; while(rs.next()){ int id = rs.getInt(1); String mobileCategory = rs.getString(2); out.print("<option value ="+id+">"+mobileCategory+"</option>"); } out.print("</select>"); out.print("<input type ='submit' value ='提交'>"); out.print("</form>"); con.close(); } catch(SQLException e){ out.print(e); } %> </div></font> <div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript"> <!--
d = new dTree('d');
d.add(0,-1,'My example tree'); //d.add(2,0,'Node 2','example01.html'); //d.add(4,0,'Node 3','example01.html'); //d.add(5,3,'登录','example01.html'); //d.add(6,5,'Node 1.1.1.1','example01.html'); //d.add(7,0,'Node 4','example01.html'); d.add(2,0,'苹果手机','searchMobile.jsp'); d.add(3,0,'安卓手机','searchMobile.jsp'); d.add(4,0,'微软手机','searchMobile.jsp'); //d.add(5,0,'退出','exitServlet'); //d.add(6,0,'主页','index.jsp'); d.add(7,0,'Recycle Bin','example01.html','','','img/trash.gif');
document.write(d);
//--> </script>
</div> </BODY></HTML>
查询功能:输入关键词查询手机
例如:选择名称搜索,输入“三星”提交
选择手机版号查询,输入“A89S6”
选择价格查询,输入“1000-4000”
代码:SearchMobile.jsp
<%@ page contentType="text/html;charset=GB2312" %> <HTML><HEAD><%@ include file="head.txt" %></HEAD> <BODY bgcolor=#55BBDD><font size=2> <div align="center"> <br>查询时可以输入手机的版本号或手机名称及价格。<br> 手机名称支持模糊查询。 <br>输入价格是在2个值之间的价格,格式是:价格1-价格2<br> 例如 3987-8976 <FORM action="searchByConditionServlet" Method="post" > <br>输入查询信息:<Input type=text name="searchMess"><br> <Input type =radio name="radio" value="mobile_version">手机版本号 <Input type =radio name="radio" value="mobile_name" checked="ok">手机名称 <Input type =radio name="radio" value="mobile_price">手机价格 <br><Input type=submit name="g" value="提交"> </Form> </div> </Font></BODY></HTML>
SearchByCondition.class
package myservlet.control; import mybean.data.DataByPage; import com.sun.rowset.*; import java.sql.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SearchByCondition extends HttpServlet{ CachedRowSetImpl rowSet=null; public void init(ServletConfig config) throws ServletException{ super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e){} } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ request.setCharacterEncoding("gb2312"); String searchMess= request.getParameter("searchMess"); String radioMess= request.getParameter("radio"); if(searchMess==null||searchMess.length()==0) { fail(request,response,"没有查询信息,无法查询"); return; } String condition=""; if(radioMess.equals("mobile_version")) { condition = "SELECT * FROM mobileForm where mobile_version ='"+searchMess+"'"; } else if(radioMess.equals("mobile_name")) { condition = "SELECT * FROM mobileForm where mobile_name LIKE '%"+searchMess+"%'"; } else if(radioMess.equals("mobile_price")) { double max=0,min=0; String regex = "[^0123456789.]"; String [] priceMess =searchMess.split(regex); if(priceMess.length==1) { max =min = Double.parseDouble(priceMess[0]); } else if(priceMess.length==2) { min = Double.parseDouble(priceMess[0]); max = Double.parseDouble(priceMess[1]); if(max<min) { double t = max; max = min; min = t; } } else { fail(request,response,"输入的价格格式有错误"); return; } condition = "SELECT * FROM mobileForm where "+ "mobile_price <= "+max+" AND mobile_price>="+min ; } HttpSession session=request.getSession(false); Connection con=null; DataByPage dataBean=null; try{ dataBean=(DataByPage)session.getAttribute("dataBean"); if(dataBean==null){ dataBean=new DataByPage(); //创建JavaBean对象 session.setAttribute("dataBean",dataBean); } } catch(Exception exp){ dataBean=new DataByPage(); session.setAttribute("dataBean",dataBean); } String uri = "jdbc:mysql://127.0.0.1/mobileshop?"+ "user=root&password=777777&characterEncoding=gb2312"; try{ con=DriverManager.getConnection(uri); Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs=sql.executeQuery(condition); rowSet=new CachedRowSetImpl(); //创建行集对象 rowSet.populate(rs); dataBean.setRowSet(rowSet); //行集数据存储在dataBean中 con.close(); //关闭连接 } catch(SQLException exp){} response.sendRedirect("byPageShow.jsp");//重定向到byPageShow.jsp } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } public void fail(HttpServletRequest request,HttpServletResponse response, String backNews) { response.setContentType("text/html;charset=GB2312"); try { PrintWriter out=response.getWriter(); out.println("<html><body>"); out.println("<h2>"+backNews+"</h2>") ; out.println("返回:"); out.println("<a href =searchMobile.jsp>查询手机</a>"); out.println("</body></html>
③我的:分为购物车和订单两个子菜单
查看购物车
代码:LookShoppingCar.jsp
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import="mybean.data.Login" %> <%@ page import="java.util.*" %> <jsp:useBean id="loginBean" class="mybean.data.Login" scope="session"/> <HTML><HEAD><%@ include file="head.txt" %></HEAD> <BODY bgcolor=yellow><font size=2> <div align="center"> <% if(loginBean==null){ response.sendRedirect("login.jsp");//重定向到登录页面 } else { boolean b =loginBean.getLogname()==null|| loginBean.getLogname().length()==0; if(b) response.sendRedirect("login.jsp");//重定向到登录页面 } LinkedList car =loginBean.getCar(); if(car==null) out.print("<h2> 购物车没有物品.</h2>"); else { Iterator<String> iterator=car.iterator(); StringBuffer buyGoods = new StringBuffer(); int n=0; double priceSum =0; out.print("购物车中的物品:<table border=2>"); while(iterator.hasNext()) { String goods=iterator.next(); String showGoods=""; n++; //购车车物品的后缀是“#价格数字",比如“iPhone手机价格3989 #3989” int index=goods.lastIndexOf("#"); if(index!=-1){ priceSum+=Double.parseDouble(goods.substring(index+1)); showGoods = goods.substring(0,index); } buyGoods.append(n+":"+showGoods); String del="<form action='deleteServlet' method = 'post'>"+ "<input type ='hidden' name='delete' value= "+goods+">"+ "<input type ='submit' value='删除' ></form>"; out.print("<tr><td>"+showGoods+"</td>"); out.print("<td>"+del+"</td></tr>"); } out.print("</table>"); String orderForm = "<form action='buyServlet' method='post'>"+ " <input type ='hidden' name='buy' value= "+buyGoods+" >"+ " <input type ='hidden' name='price' value= "+priceSum+" >"+ "<input type ='submit' value='生成订单'></form>"; out.print(orderForm); } %> </div></font> </BODY></HTML>
查看订单
代码:LookOrderForm
<%@ page contentType="text/html;charset=GB2312" %> <jsp:useBean id="loginBean" class="mybean.data.Login" scope="session"/> <%@ page import="java.sql.*" %> <HTML><HEAD><%@ include file="head.txt" %></HEAD> <div align="center"> <% if(loginBean==null){ response.sendRedirect("login.jsp");//重定向到登录页面 } else { boolean b =loginBean.getLogname()==null|| loginBean.getLogname().length()==0; if(b) response.sendRedirect("login.jsp");//重定向到登录页面 } Connection con; Statement sql; ResultSet rs; try{ Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e){} try { String uri= "jdbc:mysql://127.0.0.1/mobileshop"; String user="root"; String password="777777"; con=DriverManager.getConnection(uri,user,password); sql=con.createStatement(); String cdn= "SELECT id,mess,sum FROM orderform where logname= '"+loginBean.getLogname()+"'"; rs=sql.executeQuery(cdn); out.print("<table border=2>"); out.print("<tr>"); out.print("<th width=100>"+"订单号"); out.print("<th width=100>"+"信息"); out.print("<th width=100>"+"价格"); out.print("</TR>"); while(rs.next()){ out.print("<tr>"); out.print("<td >"+rs.getString(1)+"</td>"); out.print("<td >"+rs.getString(2)+"</td>"); out.print("<td >"+rs.getString(3)+"</td>"); out.print("</tr>") ; } out.print("</table>"); con.close(); } catch(SQLException e){ out.print(e); } %> </div"> </BODY></HTML>
④退出:回到主页
代码:HandelExit.class
package myservlet.control; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HandleExit extends HttpServlet { public void init(ServletConfig config) throws ServletException{ super.init(config); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { HttpSession session=request.getSession(true); session.invalidate(); //销毁用户的session对象 response.sendRedirect("index.jsp"); //返回主页 } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doPost(request,response); } }
⑤主页
