书城项目第三阶段:
a)首先进行jsp页面动态化:
1、在 html 页面顶行添加 page 指令。
2、修改文件后缀名为:.jsp
3、使用 IDEA 搜索替换.html 为.jsp(快捷键:Ctrl+Shift+R)
b)抽取页面中相同的格式和内容:
1.head中css、jquery、base标签
<%
//request.getScheme()表示http
//request.getServerName()表示主机名/ip地址(服务器ip地址)
//request.getServerPort()表示端口号
//request.getContextPath()表示工程路径
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()
+request.getContextPath()+"/";
%>
<base href="<%=basePath%>">
<link type="text/css" rel="stylesheet" href="static/css/style.css" >
<script type="text/javascript" src="static/script/jquery-1.7.2.js"> </script>
2.每个页面的页脚
<div id="bottom">
<span>
尚硅谷书城.Copyright ©2015
</span>
</div>
3.登录成功后的菜单
<div>
<span>欢迎<span class="um_span">韩总</span>光临尚硅谷书城</span>
<a href="../order/order.jsp">我的订单</a>
<a href="../../index.jsp">注销</a>
<a href="../../index.jsp">返回</a>
</div>
4.manage模块的菜单
<div>
<a href="book_manager.jsp">图书管理</a>
<a href="order_manager.jsp">订单管理</a>
<a href="../../index.jsp">返回商城</a>
</div>
c)登录,注册错误提示,及表单回显
以登录回显为示例:
Servlet 程序端需要添加回显信息到 Request 域中
注意:这是一次请求,所以可以将信息传到request域中进行保存。
d)使用反射,优化代码
第一步:首先给表单项添加隐藏域并且修改请求地址
第二步:抽取BaseServlet类
public abstract class BaseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过请求得到当前方法名
String action = req.getParameter("action");
try {
//通过反射获取是哪种方法,action表示是方法名 req.getClass()表示参数类型
Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
//通过这种方法进行调用 this表示当前对象,后面的表示参数。
method.invoke(this,req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
第三步:
public class UserServlet extends BaseServlet {
UseService useService = new UseServiceImpl();
//实现用户登录功能:
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//通过用户名和密码验证是否存在此用户
User login = useService.login(new User(null, username, password, null));
if(login!=null){
//则证明存在此用户
request.getRequestDispatcher("/pages/user/login_success.jsp").forward(request,response);
}else{
request.setAttribute("msg","用户名或密码错误,请重新输入!");
request.setAttribute("username",username);
request.getRequestDispatcher("/pages/user/login.jsp").forward(request,response);
}
}
//2.实现用户的注册功能:
protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取用户信息
String username = req.getParameter("username");
String password = req.getParameter("password");
String email = req.getParameter("email");
String code = req.getParameter("code");
//2.先检查验证码是否正确
if("abcde".equalsIgnoreCase(code)) {
//验证码正确:
if(useService.existsUsername(username)){
req.setAttribute("msg","用户名已经存在,请适当更改!");
req.setAttribute("username",username);
//用户名存在
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
}else{
//用户名不存在
useService.registUser(new User(null,username,password,email));
req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);
}
}else {
//验证码不正确:
req.setAttribute("msg","验证码不正确,请重新输入");
// "/"表示: http://localhost:8080/book/ 映射到web目录下
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
}
}
}