目录
2-1-5 BaseServlet extends HttpServlet{}(编写父类)
2-1-6 在baseservlet中重写service方法
3-1-1 在index.jsp上点击 注册页面 跳转到register.jsp
3-1-3 在userservlet中编写一个registUI 方法
3-7 收件箱安装 Foxmail 并创建用户---接受邮件的服务器为本机
5-1-1 在index.jsp上登录连接 点击 跳转到login.jsp
5-1-2 修改页面上的form表单 action method 每个标签添加name属性
-
一、商城的实体
用户
订单
商品
分类
-
1-1 准备工作
-
1-1-1 数据库和表
create database store28;
use store28;
CREATE TABLE `user` (
`uid` varchar(32) NOT NULL,
`username` varchar(20) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`email` varchar(30) DEFAULT NULL,
`telephone` varchar(20) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`code` varchar(64) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
1-1-2 项目
包结构
com.itheima.web.servlet
com.itheima.web.filter
com.itheima.service ---service 的接口
com.itheima.service.impl ---service 的实现类
com.itheima.dao ---dao的接口
com.itheima.dao.impl ---dao 的实现类
com.itheima.domain
com.itheima.utils
com.itheima.constant
jar包
驱动
c3p0
dbuitls
beanutils
jstl
邮件
工具类和配置文件
datasourceutils 和 c3p0配置文件
uuidutils
uploadutils
md5uitls
mailutils
前台页面
将页面拷贝到项目中
-
二、用户模块
注册
发送邮件的方式发送激活码
激活
登录
退出
-
2-1 通用servlet设计
只定义一个Userservlet
重写doget和dopost
-
2-1-1 添加用户的时候
以前: /store/addUser
现在: /store/user?method=add
-
2-1-2 修改用户的时候
以前: /store/updateUser
现在: /store/user?method=update
-
2-1-3 在userservlet中doget方法中
Stirng m=request.getParameter("method");
if("add".equals(m)){
add(HttpServletRequest,HttpServletResponse)
}else if("update".equals(m)){
update(HttpServletRequest,HttpServletResponse)
}else if(){
}
-
2-1-4 我们可以直接重写service方法即可
在service方法中写上面的判断代码即可
但对于每个servlet都要写 重复的 判断代码——结构一样
-
2-1-5 BaseServlet extends HttpServlet{}(编写父类)
其他的servlet继承baseServlet
-
2-1-6 在baseservlet中重写service方法
1.获取请求的方法
2.找到相应的子类 父类中的this代表的是子类
Class clazz=this.getClass()
3.子类调用方法 ——所有都 if else,不能全包含,太麻烦,反射——可以获取所有方法
通过方法名称 获取一个指定的方法
Method m=clazz.getMethod(方法名,HttpServletRequest.class,HttpServletResponse.class)
方法执行
m.invoke(this,HttpServletRequest,HttpServletResponse);
-
2-1-7 完善请求转发
以前在servlet中 我们执行方法之后无非 请求转发 重定向 打印数据
请求转发 reuqest.getRequestDispatcher().forward()
继续完善我们baseservlet中service
在第3步,方法执行返回值,
现在我让所有的方法都返回一个字符串 add update
字符串代表的是请求转发的路径
若该方法不转发只需要返回一个null
String s=(String)m.invoke(this,HttpServletRequest,HttpServletResponse);
if(s!=null){
reuqest.getRequestDispatcher(s).forward(...);
}
-
2-1-8 BaseServlet实现
/**
* 通用的servlet
*/
public class BaseServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 1.获取子类 创建子类或者调用子类的时候 this代表的是子类对象
@SuppressWarnings("rawtypes")
Class clazz = this.getClass();
//System.out.println(this);
// 2.获取请求的方法
String m = request.getParameter("method");
if(m==null){
m="index";
}
//System.out.println(m);
// 3.获取方法对象
Method method = clazz.getMethod(m, HttpServletRequest.class, HttpServletResponse.class);
// 4.让方法执行 返回值为请求转发的路径
String s=(String) method.invoke(this, request,response);//相当于 userservlet.add(request,response)
// 5.判断s是否为空
if(s!=null){
request.getRequestDispatcher(s).forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public String index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
return null;
}
}
-
三、案例1-用户注册
-
3-1 步骤实现
-
3-1-1 在index.jsp上点击 注册页面 跳转到register.jsp
<body>
<jsp:forward page="/index"></jsp:forward>
</body>
-
3-1-2 点击注册
<a href="/store/user?method=registUI"></a>
<li><a href="${pageContext.request.contextPath }/user?method=loginUI">登录</a></li> <li><a href="${pageContext.request.contextPath }/user?method=registUI">注册</a></li>
-
3-1-3 在userservlet中编写一个registUI 方法
请求转发到 register.jsp即可.
/** * 跳转到 注册页面 * @param request * @param response * @return * @throws ServletException * @throws IOException */ public String registUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { return "/jsp/register.jsp"; }
-
3-2 完成注册