oa_13

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);


}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值