struts2配置

一、action有几种开发方式?

  (1)继承ActionSupport。如果用struts处理数据校验,必须继承此类。一般采用这种方式。

  (2)实现Action接口。

  (3)不继承任何类,不实现任何接口。

二、通配符(优化action配置)

<action name="user_*" class="#" method="{1}">
    <result name="{1}">/{1}.jsp</result>
</action>

  当字符串为user_login,则调用login.jsp。当字符串为user_register,则调用register.jsp。

注意:加入命名空间后,访问路径需要加上命名空间。

三、struts中的路径匹配原则

<action name="user_*" namespace="/user" class="#" method="{1}">
    <result name="{1}">/{1}.jsp</result>
</action>

路径:http://localhost:8080/mystruts/user/a/b/user_login

  Tomcat解析路径:

    (1)localhost  访问哪一台机器

    (2)8080    访问这台机器的哪个端口,也就是根据此端口找到Tomcat

    (3)mystruts  项目名

    (4)看是否有这个名称空间  /user/a/b  否

    (5)看是否有这个名称空间  /user/a   否 

    (6)看是否有这个名称空间  /user      是,如果否的话,就去匹配默认的/,还没找到就会报错。

    (7)然后去/user下找user_login。

所以,当路径不对的时候,(在名称空间后加路径,是可以找到资源的),可以正确访问。  

四、struts常量

 (1)修改访问的默认后缀名(默认的.action)

  struts.xml文件中。此代码既可以没有后缀访问,也可以.action访问。

<constant name="struts.action.extension" value="action,,"></constant>

(2)只能action访问

<constant name="struts.action.extension" value="action"></constant>

(3)既可以.action访问,也能.do,也能省略。

<constant name="struts.action.extension" value="action,do,"></constant>

五、struts中数据处理几种方式

(1)

//方式1
        HttpServletRequest request =        ServletActionContext.getRequest();//ctrl+2+l
        HttpSession session = request.getSession();
        ServletContext application = ServletActionContext.getServletContext();
        //操作
        request.setAttribute("request_data","request");
        session.setAttribute("session_data", "session");
        application.setAttribute("application_data","application");    

(2)后面两个比较常用(2)(3)。

     ActionContext context = ActionContext.getContext();
        Map<String, Object> request = context.getContextMap();
        Map<String, Object> session = context.getSession();
        Map<String, Object> application = context.getApplication();
        
        request.put("request_data","request");
        session.put("session_data", "session");
        application.put("application_data","application");

(3)实现requestAware/sessionAware/ApplicationAware。优化的项目的时候用。

public class DataAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;
    @Override
    public String execute() throws Exception {
    
        //操作
        request.put("request_data","request_data_Aware");
        session.put("session_data", "session_data_Aware");
        application.put("application_data","application_data_Aware");
        //方式2

        return SUCCESS;
    }

    @Override
    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }

    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    @Override
    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }
}

在jsp界面获取:

${request_data}
${session_data}
${application_data}

遇到的错误:
There is no Action mapped for namespace [/] and action name [Login] associated with context path [/eprint]

做如下检查:


1、确保struts.xml文件名大小写正确:struts.xml


2、确保struts.xml文件在src目录下(很重要!后面就着重说这个)

posted on 2017-01-25 20:59  hgfs瑞  阅读(139)  评论(0编辑  收藏  举报

导航