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);
}
}
⑤主页