oa_13:
实现登录功能
- LoginAction
- IndexAction
- BaseAction [让其它所有需要登录之后才能执行的操作继承此Action]
添加一个InitServlet,主要是用来注册日期类型转换器(UtilDateConverter)
重点理解:
- Action的抽象(统一进行登录认证的控制)
- 页面框架的运用:frameset
- javascript中的try{}catch(e){}的使用
package com.bjsxt.oa.web.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.bjsxt.oa.model.User;
public class BaseAction extends DispatchAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
//添加权限判断的代码
User user = currentUser(request);
if(user == null){
return mapping.findForward("login");
}
//继续父类的职责,即将请求分发到不同的方法中!
return super.execute(mapping, form, request, response);
}
protected User currentUser(HttpServletRequest request){
return (User)request.getSession().getAttribute("login");
}
}
package com.bjsxt.oa.web.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.bjsxt.oa.manager.UserManager;
import com.bjsxt.oa.model.User;
import com.bjsxt.oa.web.forms.UserActionForm;
public class LoginAction extends DispatchAction {
private UserManager userManager;
@Override
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserActionForm uaf = (UserActionForm)form;
String username = uaf.getUsername();
String password = uaf.getPassword();
User user= userManager.login(username, password);
if(user != null){
request.getSession().setAttribute("login", user);
}
return mapping.findForward("back_index");
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
package com.bjsxt.oa.web.actions;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.bjsxt.oa.manager.AclManager;
import com.bjsxt.oa.model.User;
public class IndexAction extends BaseAction {
private AclManager aclManager;
public ActionForward outlook(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//需要根据当前登录用户,查询能够有读取权限的模块列表
User user = currentUser(request);
if(user != null){
List modules = aclManager.searchModules(user.getId());
request.setAttribute("modules", modules);
}
return mapping.findForward("outlook");
}
public ActionForward main(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("main");
}
public void setAclManager(AclManager aclManager) {
this.aclManager = aclManager;
}
}
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@include file="/common/common.jsp" %>
<HTML>
<!--
---------------------------------------------------------------------------
this script is copyright (c) 2001 by Michael Wallner!
http://www.wallner-software.com
mailto:dhtml@wallner-software.com
you may use this script on web pages of your own
you must not remove this copyright note!
This script featured on Dynamic Drive (http://www.dynamicdrive.com)
Visit http://www.dynamicdrive.com for full source to this script and more
---------------------------------------------------------------------------
-->
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GBK">
<TITLE>Outlook Like Bar</TITLE>
<!--
you need this style or you will get an error in ns4 on first page load!
-->
<STYLE>
div {
position:absolute;
}
</STYLE>
<script language="JavaScript" src="crossbrowser.js" type="text/javascript">
</script>
<script language="JavaScript" src="outlook.js" type="text/javascript">
</script>
<SCRIPT>
// ---------------------------------------------------------------------------
// Example of howto: use OutlookBar
// ---------------------------------------------------------------------------
//create OutlookBar
var o = new createOutlookBar('Bar',0,0,screenSize.width,screenSize.height,'#606060','white')//'#000099') // OutlookBar
//根据授权列表创建父模块
<c:forEach items="${modules}" var="m">
<c:if test="${empty m.parent}">
var p${m.id} = new createPanel('id_${m.id}','${m.name}');
o.addPanel(p${m.id});
</c:if>
</c:forEach>
//根据授权列表创建子模块
<c:forEach items="${modules}" var="s">
<c:if test="${!empty s.parent}">
try{
p${s.parent.id}.addButton('netm.gif','${s.name}','parent.main.location="${s.url}"');
}catch(ignore){}
</c:if>
</c:forEach>
o.draw(); //draw the OutlookBar
//-----------------------------------------------------------------------------
//functions to manage window resize
//-----------------------------------------------------------------------------
//resize OP5 (test screenSize every 100ms)
function resize_op5() {
if (bt.op5) {
o.showPanel(o.aktPanel);
var s = new createPageSize();
if ((screenSize.width!=s.width) || (screenSize.height!=s.height)) {
screenSize=new createPageSize();
//need setTimeout or resize on window-maximize will not work correct!
//ben鰐ige das setTimeout oder das Maximieren funktioniert nicht richtig
setTimeout("o.resize(0,0,screenSize.width,screenSize.height)",100);
}
setTimeout("resize_op5()",100);
}
}
//resize IE & NS (onResize event!)
function myOnResize() {
if (bt.ie4 || bt.ie5 || bt.ns5) {
var s=new createPageSize();
o.resize(0,0,s.width,s.height);
}
else
if (bt.ns4) location.reload();
}
</SCRIPT>
</head>
<!-- need an onResize event to redraw outlookbar after pagesize changes! -->
<!-- OP5 does not support onResize event! use setTimeout every 100ms -->
<body onLoad="resize_op5();" onResize="myOnResize();">
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.bjsxt.oa.web.InitServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>pagerFilter</filter-name>
<filter-class>com.bjsxt.oa.web.PagerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>pagerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
package com.bjsxt.oa.web;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.commons.beanutils.ConvertUtils;
public class InitServlet extends HttpServlet {
@Override
public void init() throws ServletException {
//注册日期类型的转换器
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}