struts2学习笔记1

来源:互联网 发布:淘宝如何设置分类 编辑:程序博客网 时间:2024/05/19 13:09

1.struts.xml必须存放在src目录下,这样生成到tomcat中,才能位于classes目录下。
2.web.xml中使用Struts2的配置(使用filter拦截器,拦截所有请求):
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern如果是“/*”,则form表单中的action=*.action,如<form action="Login.action"></form>
如果使用的是struts表单form,这form中的action="Login",如<s:form action="Login"></s:form>
3.在Action接口中,如果想要访问HttpSession对象,可以使用ActionContext.getContex().getSession()方法,不过该方法返回的是一个Map对象,Structs2的

系列拦截器会将Map对象与HttpSession关联起来。

public String execute()    {        if("lisi".equals(Name)&&"123456".equals(Password))        {            ActionContext.getContext().getSession().put("name", Name);            ActionContext.getContext().getSession().put("password", Password);            return SUCCESS;        }        else        {            return INPUT;        }    }

其中ActionContext.getContext().getSession()得到的对象为Map<String,Object>

几种获取Servlet API的方法:

(1)使用ActionContext类。

(2)继承ServletContextAware ---获取WebContext对象。

  继承ServletResponseAware --获取HttpServletResponse对象。

  继承ServletRequestAware --获取HttpServletRequest对象。

(3)使用ServletActionContext类的静态方法,获取PageContext,HttpServletRequest,HttpServletResponse,ServletContext对象。

4.struts2中的valueStack是放在request对象中的,如可以使用ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack")获得ValueStack对象。

  • 利用脚本获取传入值:

在struts2中action传递给jsp中的数据是保存在OgnlValueStack中的,所以在jsp页面中如果想利用脚本而不是sturts标签获取传入值的话,尽量使用OgnlValueStack的值获得,例如:

<%...OgnlValueStack stack = (OgnlValueStack) request.getAttribute("struts.valueStack");

Article article = (Article)(stack.findValue("article"));%> 

  • sturts2标签自动转换Html标签

    在使用struts2标签<s:property value="">来显示传递值的时候,会将字符串中的html标签转换,所以可以利用java脚本直接获取传入值,使用方式见第一条

5. FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。如果用户请求一action结尾,该请求将被转入Struts2框架处理。

  Struts2框架提供了系列拦截器,该系列拦截器负责将HttpRequest请求中的参数解析出来,传入到Action中,并回调Action的execute()方法来处理用户请求。

6.如果配置<result />结果时没有使用location参数,则系统会把<result>..</result>之间的字符串作为location值。如果result中没有指定type类型,则系统会使用默认的type值:dispatcher(jsp视图),如果没有指定name值,则默认的name为success。

 7.全局结果:<result/>结果放在了<global-result />元素中。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" ><struts>    <package name="struts2" extends="struts-default">        <global-results>            <result>${target}.jsp</result>        </global-results>        <action name="Login" class="com.demo.action.LoginAction">            <result name="login">/index.jsp</result>            <result name="register">/Register.jsp</result>        </action>    </package></struts>

如果一个Action中的result值与global-result中的result值一样,则Action中的结果会覆盖全局的结果,请求会访问Action中result对应的视图结果。只有当在Action中找不到相应的result值,才会使用全局result。

 

 

0 0
原创粉丝点击