MVC模式实现用户登录练习中遇到的问题和需要注意的细节



MVC模式实现用户登录练习中遇到的问题和需要注意的细节


1.导入开发工具包
2.建立 package
3.建立User.xml作为数据库
漏掉的id属性
4.建立一个封装数据的javabean (User)
5.建立一个操作数据库的dao(DaoImpl)
5.1通过工具操作(XmlUtils)
注意:a.如何获取xml文件的地址.反射
private static String filepath;
static{
filepath = XmlUtils.class.getClassLoader().getResource("users.xml").getPath();
}
b.工具类中的异常处理
抛出去,在dao中处理,转换成运行时异常再抛出
c.操作数据库的方法是定义在dao中还是utils中
定义在dao中,dao是用来直接操作数据库的,而utils只是提供方法得到document和写入document
d.dom4j解析xml文件的读写还不熟悉
5.2通过xmlutils得到document(数据库user对象),定义方法
add();
User find(String username,String password);数据库中可能没有查找的对象(判断)
 birtyday由String转成Date类型后在封装的方法:
 SimpleDateFormat df = new SimpleDateFormat("yy-MM-dd");
 user.setBirthday(df.parse(date));
boolean find(String username);


6.测试dao,junit.test包中
注意添加@Test debug 模式


7.建立webservice(业务逻辑层)响应web层的需求 
数据在传递过程中都要封装在对象(javabean)中。
层与层之间耦合性要低,独立性要强。(具体怎么实现,没什么经验,以后多注意学习)
7.1 register()方法响应web层注册需求,并反馈结果
a.判断用户是否已经注册过,若已经注册,则通过抛编译时异常来告诉web调用层,用户名已存在,应给用户友好提示
throw new UserExistException();因此要自定义一个异常类(??妹的,又忘记了),继承Ecxeption,初始化构造方法
b.将用户信息传给dao的add()方法.
注意:密码在往数据库中存的时候,要将其进行md5加密
建立一个ServiceUtils工具类,创建加密方法:
public static String md5(String message){
					try {
						MessageDigest md = MessageDigest.getInstance("md5");
						byte[] md5 = md.digest(message.getBytes());
						
						BASE64Encoder encoder = new BASE64Encoder();
						return encoder.encode(md5);				
					} catch (NoSuchAlgorithmException e) {
						throw new RuntimeException(e);
					}		
			    }		


7.2用户登录,即根据用户名和密码查找数据库中用户是否存在,并返回
注意:查找时要将密码加密后传人

8.测试service


9.web层的布置.原则:servlet用来处理请求,jsp用来输出用户显示界面
9.1 用RegisterServlet来处理用户注册请求
9.1.1 RegisterForm (javaBean)用来封装表单数据和校验表单数据
注意:在其中定义一个map集合来封装注册错误信息
验证birthday时,注意birthday这行可以为空,BeanUtils提供了方法
DateLocaleConverter dlc = new DateLocaleConverter();
dlc.convert(this.birthday, "yyyy-MM-dd");
如果格式不正确,则抛异常
9.1.2建立一个WebUtils的工具包,提供的方法有:
方法一:用来将表单数据封装到RegisterForm中(多看几遍)
public static <T> T request2Bean(HttpServletRequest request,Class<T> beanClass){
				//让用户不在new对象(类对象),不需要强转(强转)	
				try {					
					//1.创建要封装数据的bean
					T bean = beanClass.newInstance();					
					//2.把request中的数据整到bean中
					Enumeration e = request.getParameterNames();
					while(e.hasMoreElements()){
						String name = (String) e.nextElement();//username,pass..
						String value = request.getParameter(name);
						BeanUtils.setProperty(bean, name, value);
					}
					return bean;
				} catch (Exception e) {
					throw new RuntimeException(e);
				} 	
			}


方法二:由于birthday的格式为Date要将其转为String
public static void copyBean(Object src,Object dest){
				//注册日期转换器
				ConvertUtils.register(new Converter(){
						public Object convert(Class type, Object value) {
							if(value==null){
								return null;
							}
							String str = (String) value;
							if(str.trim().equals("")){
								return null;
							}
							
							SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
							try {
								return df.parse(str);
							} catch (ParseException e) {
								throw new RuntimeException(e);
							}
						}			
					},Date.class);
					
					try {
						BeanUtils.copyProperties(dest, src);
					} catch (Exception e) {
						throw new RuntimeException(e);
					} 
			}


方法三:每个用户要给其添加一个唯一的id
public static String generateID(){
return UUID.randomUUID().toString();
}
9.1.3在RegisterServlet中,通过WebUtils工具将request中的数据存进formbean中,并返回
formbean中提供校验数据的方法:
如果表单提交的数据不符合格式要求,则跳回到注册页面,回显验证失败消息。
用el表达式回显消息和之前的正确输入
          如果表单验证正确, 将formbean中的数据转到User中封装(代码看不懂?),并加入id.
          调用service处理注册请求
          接受异常则表示,用户已经被注册,转到注册页面,提示用户名已注册
          否则,用户注册成功,转到全局消息显示页面,并提示用户注册成功
          其他不明情况的异常也捕获,并对用户友好提示,后台记录异常


9.2用LoginServlet来处理用户登陆请求
如果用户登陆成功,返回一个user对象,将其存入session中

9.3用Logout来处理注销请求
注销登陆即在session中移除user
     







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值