探索与发现

研究java技术

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  83 随笔 :: 0 文章 :: 109 评论 :: 0 Trackbacks

阅读struts MailReader文档笔记:
MailReader应用程序基于struts 1.2.0开发。
1:主页是index.jsp。由于struts的Action不能指定欢迎页面
,而首次会从服务器配置的欢迎列表去查找出相应的页面返回给用户,
那么我们怎么来用struts的actions而不是普通的jsp页面返回给用户呢,
一个解决方案是在一个页面写上要转发到我们的欢迎页面,代码:
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:redirect action="/Welcome"/>
在相应的struts-config.xml配置文件加上
<!-- Display welcome page -->
<action path="/Welcome" forward="/welcome.jsp" />
但其它页面还不能保证用户不能访问到,我们在应用当中一般会把所有的
jsp页面放到WEB-INF目录下面,然后在struts-config.xml做一下映射就可以了,以保证用户不能直接访问到。

2:<message-resources parameter="org.apache.struts.webapp.example.MessageResources" />
在同一个struts里面只能有一个默认的存放本地化的消息文本(Resource Bundle)
那很我们指定多个的时候可以用它的一个属性key指定
例如:
<message-resources parameter="org.apache.struts.webapp.example.AlternateMessageResources" key="alternate" />
那么我们在页面用的时候这样出别
<bean:message key="key0"/>;
<bean:message key="key1" bundle="alternate"/>

3:<html:link>有两个优点:
(1)允许在url中以多种方式包含请求。
(2)当用户关闭cookie时,会自动重写url,把sessionid作为请求参数包含在url当中,用于跟踪用户的session状态,而不像servlet,jsp还要
自己硬编码实现
它有几个重要的属性:
*forward:指定全局转发链接(只适用于(flobal-forwards>forward,而不能引用action forward子元素)
*href:指定完整的url链接(<html:link url="http//www.sina.com"/>)
*page:指定相对于当前网页的url(<html:link page="/test.do"/>

4:PlugIn(struts插件)
在struts-config.xml要加上相应的描述语句
<plug-in className="org.apache.struts.webapp.example.memory.MemoryDatabasePlugIn">
  <set-property property="pathname" value="/WEB-INF/database.xml"/>
</plug-in>
其中MemoryDatabaseplugIn是自己开发的一个插件,它必须org.paache.struts.action.PlugIn接口,包含两个方法init,destroy
init在struts加载时自动被调用,destroy当应用关闭时调用,可以放一些释放资源的语句(如关闭数据库连接的语句等)
并且这个里面还包含属性pathname,也要相应的get,set方法,以便在struts框架在加载插件时,会自动调用setPathname()方法,把
<set-property>子元素的pathname设置成MemoryDatabasePlugIn里对应属性的值value="/WEB-INF/database.xml"
还要注意就是<plug-in>必须位于其它配置元素后面,出现多个按顺序加载

5:
<!-- Process a user logon -->
<action    path="/SubmitLogon"
                  type="org.apache.struts.webapp.example.LogonAction"
                  name="LogonForm"
                 scope="request"
                 input="logon">
 <exception
                   key="expired.password"
                  type="org.apache.struts.webapp.example.ExpiredPasswordException"
                  path="/ExpiredPassword.do"/>
       </action>
scope推荐使用request,当然也可以用session,一个ActionForm只对应一次请求,不要越过request,
如果我们使用type="org.apache.struts.validator.DynaValidatorForm"
那么它会自动创建一个ActionForms与之对应
exception子元素,当一个用户登录以后,有可能 "ExpiredPasswordException"(超时) 会抛出.
 如果发生了的话 Struts 会捕获exception 并发送到 "ExpiredPassword" action.

6:
自己开发一个定制标记<app:checkLogon/>用户检查用户是否登录
package org.apache.struts.webapp.example;
import ...

public final class CheckLogonTag extends TagSupport {

    private String name = Constants.USER_KEY;
    private static String LOGIN_PATH = "/Logon.do";
    private String page = LOGIN_PATH;

    public int doStartTag() throws JspException {
    return (SKIP_BODY);
    }

    public int doEndTag() throws JspException {
     boolean valid = false;
     HttpSession session = pageContext.getSession();
     if ((session != null) && (session.getAttribute(name) != null)) {
         valid = true;
        }
        if (valid) {
            return (EVAL_PAGE);
        } else {
            ModuleConfig config =
                (ModuleConfig) pageContext.getServletContext().getAttribute(
                    org.apache.struts.Globals.MODULE_KEY);

                try {
                    pageContext.forward(config.getPrefix() + page);
                } catch (ServletException e) {
                    throw new JspException(e.toString());
                } catch (IOException e) {
                    throw new JspException(e.toString());
                }

            return (SKIP_PAGE);
        }
    }

    public void release() {
        super.release();
        this.name = Constants.USER_KEY;
        this.page = LOGIN_PATH;
    }
}
但如果比较大的应用还是用标准的jaas验证

7
<html:link action="/EditRegistration?action=Edit">
-------
///////////////////////////////////
<logic:equal
name="RegistrationForm"
property="action"
scope="request"
value="Edit"
>
<app:checkLogon/><!--如果action与Edit相等就执行这里,否则不会执行-->
</logic:equal>
1)////
<logic:present name="test">
如果在action中设置了test就执行到这儿。如:request.setAttribute("test","test")或session.setAttribute("test","test")
<bean:write name="test"/>
</logic:present>

package org.apache.struts.webapp.example;
public final class EditSubscriptionAction extends Action
{

    public EditSubscriptionAction()
    {
        log = LogFactory.getLog("org.apache.struts.webapp.Example");
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
        throws Exception
    {
        HttpSession session = request.getSession();
        String action = request.getParameter("action");
        if(action == null)
            action = "Create";
        String host = request.getParameter("host");
        if(log.isDebugEnabled())
            log.debug("EditSubscriptionAction:  Processing " + action + " action");
        User user = (User)session.getAttribute("user");
        if(subscription == null && !action.equals("Create"))///create
        {
            if(log.isTraceEnabled())
                log.trace(" No subscription for user " + user.getUsername() + " and host " + host);
            return mapping.findForward("failure");
        }
        else //edit
       --------------------
}
8 MailReader源码<struts 1.2 webapps下struts-mailreader.war并且包含说明文档,是每一个初学者和有经验的,应该要看的文章

posted on 2006-05-21 01:33 蜘蛛 阅读(2137) 评论(5)  编辑  收藏 所属分类: struts

评论

# re: 阅读struts MailReader文档小记 2006-05-22 14:38 绿色使者、绿色心情
使用jstl很多时候比自定义标签效果要更好一些,比如上面的需求  回复  更多评论
  

# re: 阅读struts MailReader文档小记 2006-11-19 08:10 成人用品
常乐集团成立于2004年9月。我们主要经营成人用品性用品的批发和零售,本着诚信第一的原则,我们不断扩大销售范围,产品不断走向全国各个城市。我们的目标是让更多的人用我们的产品,让更多的人能提高生活质量!
电话:13605487249
QQ:609797387
网址:http://www.sex0539.com/ 常乐成人用品性用品批发商城  回复  更多评论
  

# re: 阅读struts MailReader文档小记 2006-11-19 08:11 成人用品
常乐集团成立于2004年9月。我们主要经营成人用品性用品的批发和零售,本着诚信第一的原则,我们不断扩大销售范围,产品不断走向全国各个城市。我们的目标是让更多的人用我们的产品,让更多的人能提高生活质量!
电话:13605487249
QQ:609797387
网址:http://www.sex0539.com/ 常乐成人用品性用品批发商城  回复  更多评论
  

# re: www.e68d.com 2007-02-16 10:34 liang
hello  回复  更多评论
  

# 北京千源网站建设 2007-03-30 22:56 北京千源网站建设
千源设计一家是以设计为主导、专业为企业提供网站建设,网页设计,平面设计,标志设计,Flash动画设计服务的设计工作室。
http://www.websdesign.cn  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问