编译工具: MyEclipse2016
数据库: MySQL
服务器: TomCat
浏览器: fox browser
HTML:组成基本的前台页面
css:控制页面布局与色彩
JavaScript:嵌入到静态的HTML中的脚本
ajax:用来与后台进行连接完成异步访问
jQuery:集成JavaScript的框架
JSP:负责前台数据的动态显示
el:负责展示数据
jstl负责处理页面的数据逻辑
Servlet:与前台进行交互负责接收和请求数据
c3p0:负责创建数据库的连接池
BeanUtils:负责将数据封装到JavaBean中
JavaBean:用来建立用户模型,描述用户行为
反射:有效的解耦方便通过配置文件来控制
BeanHandler:封装JavaBean
service:处理服务器发来的请求逻辑
dao:处理服务器与数据库服务器内部数据等交互式用到的逻辑
single pattern:单利模式用来实现单一实例为了工厂模式
factory pattern:工厂模式
properties:外部的实例化集合,用来存放可替换数据
验证码:负责生成页面的验证码
${pageContext.request.contextPath }/img/index/adv1.jpg
注册就是为了实现将页面的数据通过浏览器存入到服务器中
通过jQuery进行验证在页面进行数据验证如果有数据为空则在鼠标离开选框的时候进行提示.
通过ajax与后台数据库连接进行用户名是否存在的验证.
详情见regist.jsp页面中的script
通过获取前台传过来的数据,经数据整合校验之后与数据库进行交互,对数据的处理一定要认真仔细包括乱码,数据是否可用,是否为垃圾数据等等
// 3.获取请求参数, 并将数据封装到JavaBean中
User user = new User();
/* 千万不要导错包!!! */
try {
BeanUtils.populate(user, request.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
// >>非空校验
if (WebUtils.isNull(username)) {
// 将提示消息存入request域中,通过转发将消息带到regist.jsp进行提示
throw new MsgException("用户名不能为空111");
}
if (WebUtils.isNull(password)) {
// 将提示消息存入request域中,通过转发将消息带到regist.jsp进行提示
throw new MsgException("密码不能为空");
}
// 5.实现注册(将用户信息保存进数据库)
UserService service = BasicFactory.getFactory().getInstance(UserService.class);
String className=prop.getProperty(clazz.getSimpleName());
//2.根据类的权限定名称获取该类的Class对象
Class clz=Class.forName(className);
//3.利用反射技术根据该类的class对象创建该类的实例
Object obj=clz.newInstance();
return (T)obj;
service.registUser(user);
private UserDao dao=BasicFactory.getFactory().getInstance(UserDao.class);
public void registUser(User user) throws MsgException{
boolean result=dao.findUserByUsername(user.getUsername());
}
User user = JDBCUtils.query("select * from user where username=?", new BeanHandler(User.class), username);
/* 获取抛出异常信息, 存入request域, 并转发regist.jsp */
request.setAttribute("msg", e.getMessage());
request.getRequestDispatcher(request.getContextPath() + "/regist.jsp").forward(request, response);
return;
// 6.提示用户注册成功, 3秒之后跳转到首页!
response.getWriter().write("恭喜您注册成功, 3秒之后将会跳转到首页...
");
response.setHeader("refresh", "3;url=" + request.getContextPath() + "/index.jsp");
处理请求参数乱码
获取请求参数(用户登陆信息)
String username = ..
String password = ..
String remname = …
调用UserService层的loginUser方法检查用户名密码是否正确
User user = service.loginUser(username, passsword);
if(user != null){//表明用户名密码正确, 进行登陆
//是否需要记住用户名
if(“true”.equals(remname)){
//记住用户名
}else{
//取消记住用户名
}
request.getSession().setAttribute(“user”, user);
//登陆成功, 跳转回主页
response.sendRedirect(request.getContextPath+“/index.jsp”);
}else{
//用户名密码不正确
//转发回登陆页面, 提示用户用户名或密码不正确
//xxx
}
public User loginUser(String username, String password) {
return dao.findUserByUsernameAndPassword(username,password);
}
JDBCUtils.update("insert into user values(null,?,?,?,?)", user.getUsername(), user.getPassword(),user.getNickname(), user.getEmail());
if ("true".equals(remname)) {
Cookie cookie = new Cookie("remname", URLEncoder.encode(username,"utf-8"));
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
} else {
Cookie cookie = new Cookie("remname", "");
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
window.onload=function(){
var oInp=document.getElementsByName("username")[0];
oInp.value=decodeURI(oInp.value);
}
value="true" ${empty cookie.remname? "":"checked='checked'" }