系列文章目录
前言
为什么要配置登录拦截器,因为有些东西必须要登录之后才能操作
登录一般我们不用自己写,直接导入前端模板即可
模板套用问题
1、公司中一般的界面都会由前端排版好,我们只需要套入项目中
2、前端给我们的是一个html页面,我们套用时把html改成jsp项目,然后修改css/js/图片的的引用路径
3、一般在jsp中前面加入${pageContext.request.contextPath } 上下文路径即可
一、登录功能
登录一般我们不用自己写,直接导入前端模板即可
拷贝进来就行
然后直接使用就行了
直接看一下页面
以前我们写验证码是用的servlet
实际上我们也可以用小框架或者引用其它的jsp
验证码问题
1、普通的验证码一般套用网上写的即可,可用用jsp或者servlet实现
2、生成的验证码是一个字符串,然后会存储在session中,方便用于以后的校验
3、验证码的更新是点击图片,再次发送访问验证码的jsp页面
验证码的实现
:
实现登录的Action方法
首先我们写一个功能肯定要从三个点去考虑
那就是三层
Dao-Service-Action
我们先看dao怎么写
dao里面要执行sql或者hql
找到Dao之后,登录是根据用户名和密码去查找有没有这条记录,很明显是特有的(不是增删查改)
所以我们要在IUserDao里面去声明这个抽象的方法
然后再去对应的实现类里面去实现这个方法(然后去service里面去调用dao,然后Action再调用service,思路就是这样)
实现类
这里先改一下基础的BaseDaoIpml里面模板的权限,虽然提供一个get也可以,但是这样更简单
这里注意public也可以,只是public可能权限又太大了,不够安全
做好前提工作之后,我们就可以去实现它了
我们可以猜一下这个hql写得对不对
一定要注意这个hql写得对不对,hql和sql是有区别的
再看service怎么写
跟dao大同小异,理解了dao service自然也就很好理解了
接口
实现类
完了之后找Action
注意这里的验证码,没有必要写在模型里面,
因为模型(model)里面我们要跟数据库对应
并且我们还有更好的办法
因为直接这样写有点乱套了,我们可以用request对象去获取
把上面的“2”删改,改成这样
注意这里的服务端验证码Code获取为什么要用到key,这里可以看validatecode.jsp,是将服务端的Code放进session了
然后再判断服务端的随机验证码是否与客户端用户输入的验证码一致即可
如果验证码不一样,不能直接service操作,这块怎么写
我们要注意,验证码应该忽略大小写,优化用户体验,不需要用户频繁的大小写切换
接下来就可以测试了
先测试看一下
根据我们代码里面写的逻辑,控制台会打印出来
没有按照我们预想的来,报了空指针错误
猜测就是SessionFactory没有值
一旦有请求就把session打开
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重新启动,再测试看看,还是不行
再看一遍代码发现是hql写错了所以其实跟这个没关系
这里跟跟延时加载没有必然的关系
下面我们接着看、登录成功之后就直接进入到后台页面了
完善登录的页面跳转配置
成功之后跳转到主页面
第一步:把资料中的pages文件侠放在WEB-INF中Pages/common/index.jsp是主界面
这些都是后台页面,已经准备好的(需要可以随时找我)
接下来是看页面的路径之类的有没有错误,有错误就改一改
因为太多页面都是用这个jquery-1.8.3.js了,我们每个页面去改还不如直接放一个,就不用改页面了
注意查看index.jsp页面的js&css导入路径有无问题,如果有问题要修改
主界面没显示正确,有可能是ztree,jquery版本和路径问题
接下来我们就是来改我们的struts配置文件和action
然后再struts里面配置就行了
配置struts.xml
<action name="userAction_*" class="com.gyf.bos.web.action.UserAction" method="{1}">
<result name="home">/WEB-INF/pages/common/index.jsp</result>
<result name="loginfailure">/login.jsp</result>
</action>
测试成功页面
接下来是完善登录失败的提示
这里注意,在我们没有用框架之前我们是怎么处理的?
没有使用框架之前我们是将错误信息放到request域里面的,需要的时候再去获取request的信息即可
现在我们使用SSH框架可以把错误信息放到值栈里面去
具体操作如下
userAction逻辑跳转完善
登录失败的页面提示
通过ActionSupport的addActionError(“用户名或者密码不正确”);方法
然后在jsp页面,使用 struts-tag标签
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:actionerror/>
原理如下:
然后就可以调出debug
这样就可以看debug了
根据debug的信息,我们可以知道错误信息的原理
取值可以用el表达式,或者我们在框架里面直接可以这样
测试看一下
也可以改个颜色
总结
在一个成型的项目上写一个项目的具体功能,应该从三层去入手
即Dao层写什么、Service层写什么、Action层写什么