08创建用户注册页面(2)
8.1 编程题
8.1.1 根据视频讲解,完成用户性别选择功能。
<script type="text/javascript">
$(function(){
//给男单选span添加单击事件
$("#man").click(function(){
//给男span添加选择样式
$("#manSpan").addClass("icon-check");
//将女的选择状态去掉
$("#womanSpan").removeClass("icon-check");
})
//给女单选span添加单击事件
$("#woman").click(function(){
//给女span添加选择样式
$("#womanSpan").addClass("icon-check");
//将男的选择状态去掉
$("#manSpan").removeClass("icon-check");
})
})
</script>
8.1.2 完善注册页面,添加用户年龄和出生日期选项
<!-- 年龄 -->
<div class="form-group">
<div class="label">
<label for="sitename">用户年龄:</label>
</div>
<div class="field">
<input type="password" class="input w50" id="mpass" name="mpass"
size="50" placeholder="请输入年龄" data-validate="required:请输入年龄" />
</div>
</div>
<!-- 出身日期 -->
<div class="form-group">
<div class="label">
<label for="sitename">出身日期:</label>
</div>
<div class="field">
<input type="date" class="input w50" id="mpass" name="mpass"
size="50" />
</div>
</div>
8.1.3 修改注册页面中自带的基础表单校验。
09用户注册功能实现
9.1 编程题
9.1.1 根据视频讲解,继续完成注册页面,修改注册页面表单数据提交的键名。
9.1.2 创建并声明处理注册功能的Servlet
package com.bjsxt.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;
public class RegServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex");
int age = Integer.parseInt(req.getParameter("age"));
String birthday = req.getParameter("birthday");
//处理请求信息
//获取业务层对象
UserService us = new UserServiceImpl();
//处理注册
int i = us.regUserInfoService(uname, pwd, sex, age, birthday);
//响应处理结果
//重定向到登录页面
if(i>0){
resp.sendRedirect("/14project/login.jsp");
}else{
//提示注册失败
resp.sendRedirect("/14project/reg.jsp");
}
}
}
9.1.3 完成注册功能的业务层和数据库层的代码
业务层:
//用户注册
@Override
public int regUserInfoService(String uname, String pwd, String sex,
int age, String birthday) {
//处理注册业务
return ud.regUserInfoDao(uname, pwd, sex, age, birthday);
}
数据库层:
//用户注册
9.1.4 在regServlet中完成注册成功和注册失败的代码逻辑,然后运行项目,点击注册观察运行效果。
if
10注册成功提示语&项目问题引入和解决方案
10.1 编程题
10.1.1 根据视频讲解,完成注册成功提示语功能
10.1.2 视频中目前项目存在的问题是什么?
答:现在一个请求或者一个独立的业务逻辑都单独进行一个Servlet的创建进行请求处理但是一个网站的功能是非常多的,如果每个都创建单独地Servlet进行处理,这样会造成Servlet过多,造成资源浪费
10.1.3 视频中给出的解决方案是什么?
答:服务器在接收到浏览器发送的请求后会调用对应的Servlet进行请求处理然后调用Servlet中的service方法进行处理我们将不同功能的处理封装成对应的方法在service方法中调用其对应的功能处理方法进行请求处理这样我们就只需要一个Servlet
11service中实现动态调用请求处理方法(1)
11.1 编程题
11.1.1 根据视频创建DataServlet,并声明登录,退出,注册三个方法。
//登录处理
public void userLogin(HttpServletRequest req, HttpServletResponse resp){
}
//退出处理
public void userOut(HttpServletRequest req, HttpServletResponse resp){
}
//注册处理
public void userReg(HttpServletRequest req, HttpServletResponse resp){
}
11.1.2 根据视频讲解在DataServlet中的service方法中完成动态调用方法处理请求的反射代码的编写
try
12service中实现动态调用请求处理方法(2)
12.1 编程题
12.1.1 根据视频讲解完善DataServlet中登录,注册,退出方法的中的代码实现。
答:直接把以前的代码粘贴过去即可
12.1.2 修改登录页面在表单中添加隐藏便签,添加请求数据中的方法名,完成登录功能
<!-- 声明请求处理方法 -->
<input type="hidden" name="method" value="userLogin">
12.1.3 修改退出按钮,完成退出功能
12.1.4 修改注册页面,完成注册功能
<!-- 声明请求的方法名 -->
<input type="hidden" name="method" value="userReg">
12.1.5 视频中最后提出的问题是什么?
答:每个servlet中对于编码格式还有方法名的参数的获取是冗余书写的,所以我们可以将之提取出方法
13-向上抽取BaseServlet类
13.1 编程题
13.1.1 根据视频,完成BaseServlet的创建
package com.bjsxt.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String methodName = req.getParameter("method");
//调用方法处理请求信息(动态根据方法名调方法-->反射)
try {
//反射获取方法所在的类的类对象
Class cla = this.getClass();
//反射获取要被调用的方法对象
Method m = cla.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
m.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
13.1.2 根据视频,修改DataServlet继承BaseServlet
然后启动项目重新访问相关功能。
public class DataServlet extends BaseServlet
13.1.3 BaseServlet的使用流程是?
- 直接创建Servlet继承BaseServlet
- 在自己的Servlet中不需要声明service方法,只需要书写请求处理功能方法即可
- 正常访问我们自己的servlet即可
14-项目总结和缺陷
14.1 简答题
14.1.1 视频中项目总结的六个内容是?
- 1、套用模板进行页面快速构建
- 2、MVC的开发流程
- 3、Servlet+jsp+jdbc的功能 开发流程
- 4、request和session作用于的使用
- 5、浏览器发起请求到服务器请求发起的方式
- 6、BaseServlet的抽取和使用
14.1.2 根据视频,项目目前仍然存在的缺陷是?
- 1、在jsp中获取从Servlet流转过来的数据特别麻烦
- 2、在jsp页面中使用java代码块进行逻辑处理和阅读极不方便
- 3、使用session进行数据流转很方便,但是session失效了,所有依赖session的功能都会出问题
- 4、现在所有的响应结果都是覆盖所有内容显示给用户