果不其然,软件开发进度和预计时间存在出入,而且是很大出入,在开发前预计某某功能按照自己的自愿能很快实现,就算是自己非常熟悉的方面,在开发期间同样也会面临各种问题。今天解决了一个问题,另外又进一步学到ExtJs。
一:关于防止未登录直接访问。这个其实是很好解决的问题,就session问题,但是在之前一直没有去解决这个问题,应该算是web安全最最最简单的安全了。如果是采用传统JSP+Servlet应该是很好解决的,不过到用了各种框架后也许就会显得力不从心无从下手。这次前台是采用ExtJs,后台则是Struts2。仅login.jsp和index.jsp两个界面,数据交互采用Ajax,昨天有提到ExtJs大部分接受的JSON,所以跳转在ExtJs中,为什么不在Struts配置文件中进行跳转呢?因为我想给给登陆界面login.jsp返回一个flag表示时候登陆成功,这个地方一定是可以在Struts配置文件中进行跳转的,不过目前还不知道。回到重点,我需要在登陆成功后将用户名、密码保存在session中,所以我在login.jsp对应的LoginAction.java中用到了ActionContext,代码如下:
//保存session,防止未登录进行访问 ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); session.put("username", name); session.put("userpass", password);
这样就讲用户名和密码保存在了session里,当然必须是验证成功后才保存。
同样在index.jsp需要取出session值,因为没有判断用户类型,所以仅做了是否为空判断,代码如下:
<% String username = (String)session.getAttribute("username"); String userpass = (String)session.getAttribute("userpass"); if (username == null || userpass == null){ response.sendRedirect("login.jsp"); } %>
OK!
二:这个问题之前没有仔细深究过,是关于ExtJs与后台的交互问题,将前台数据提交到服务器端,简单点说,对于form表单提交有两种方式(目前所知),第一:采用this.up('form').getForm().submit({//code}),这种方式有点类似于JSP传递方式会将表单数据中的数据一一进行传递,而不是通过转换成JSON(但是也可以进行JSON传递),此种方式有的地方会比较简便,因为不需要对JSON解析,服务器端Struts2由于已经封装好所以只需要声明和前台一样的字段;第二:则是Ext.Ajax.request({//code})此种方式没有上一种将字段一一进行传递而是将其封装为JSON字符串,服务器端再进行解析。至于何种用哪种,必定两者都有其用武之地。