struts2学习1 笔记

来源:互联网 发布:软件销售代理协议 编辑:程序博客网 时间:2024/05/27 20:51

java.lang.IllegalArgumentException:Javassist library is missing in classpath! Please add missed dependency!我们缺少这样一种依赖,这依赖的名字是Javassist

因为XWork 或  ognl  他们是属于opensimple下面的项目,从struts2开始,这两个项目已经被归并到apache(struts)下了。以前javassist是被ognl这个库所依赖的,直接放在ognl这个包里,现在ognl不存在。Javassist依赖被OGNL排除,要记得将其包含进来。除非在Jboss服务器上加载应用。

 

Struts2,是通过filter(过滤器)将请求接管到struts框架中的,


 

然后读取struts自己的配置文件struts.xml,进行具体的请求分发和后续操作。

 

 

 

 

 

在idea中进行struts项目配置遇到的问题!!!

1.struts配置web.xml提示StrutsPrepareAndExecuteFilter' is not assignable to 'javax.servlet.Filter

出现这种原因是因为我的struts项目中报红色的StrutsPrepareAndExecuteFilter类关联的servlet.filter是位于运行的tomcat的jar包中的,所以,只要找到添加上即可。(这里之所以运行不会报错的原因是因为项目在tomcat中运行,tomcat中lib中包含了所需的jar包而已。)


当添加完后,报错消失,

2.struts配置文件中的struts-default报红,只要添加上struts默认的依赖格式就可:


 

public class StrutsPrepareAndExecuteFilterimplements StrutsStatics, Filter {}底层实现了Filter,所以,在项目启动的时候,会在filter的inti方法中进行一些信息的初始化,而在dofilter中进行处理请求。对request进行了一定的封装(比如进行编码格式的统一了)。然后传递给后续的action等进行使用处理。

 

public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {

       HttpServletRequest request = (HttpServletRequest)req;

       HttpServletResponse response = (HttpServletResponse)res;

       try {

           String uri = RequestUtils.getUri(request);

           if(this.excludedPatterns != null &&this.prepare.isUrlExcluded(request, this.excludedPatterns)) {

                LOG.trace("Request {} isexcluded from handling by Struts, passing request to other filters", uri);

                chain.doFilter(request,response);

           } else {

                LOG.trace("Checking if {}is a static resource", uri);

                boolean handled =this.execute.executeStaticResourceRequest(request, response);

                if(!handled) {

                   LOG.trace("Assuminguri {} as a normal action", uri);

                   this.prepare.setEncodingAndLocale(request, response);

                   this.prepare.createActionContext(request, response);

                   this.prepare.assignDispatcherToThread();

                    request =this.prepare.wrapRequest(request);

                    ActionMapping mapping =this.prepare.findActionMapping(request, response, true);

                   if(mapping == null) {

                     LOG.trace("Cannotfind mapping for {}, passing to other filters", uri);

                        chain.doFilter(request,response);

                   } else {

                        LOG.trace("Foundmapping {} for {}", mapping, uri);

                       this.execute.executeAction(request, response, mapping);

                   }

                }

           }

       } finally {

           this.prepare.cleanupRequest(request);

       }

}

 

struts-default.xml//struts默认

struts-plugin.xml//struts支持插件

struts,xml

 

struts提供的jar包中凡是后面带有plugin的都是插件jar。

struts2每一次请求都会生成一个action对象

 

struts2的类型转换,对于8个原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转换器实现自动的转换;但对于自定义的对象类型来说,就需要我们自己指定类型转换的方式了。

 

对于自定义的类型转换器来说需要提供3个信息:Acton的名字,Action中待转换的属性名以及该属性对应的类型转换器。其中Actin的名字是通过属性文件名来获得的,Action中待转换的属性名师通过属性文件中的key来获得的,该属性对应的类型转换器是通过该key所对应的value来获得的。

 

 

可以使用struts2框架自带的类型转换器StrutsTypeConverter简化类型转换代码的编写,StrutsTypeConverter继承于DefaultTypeConverter父类,并且提供了两个抽象方法:convertFormString和 convertToString,分别别表示从页面的字符串转换为后台对象以及从后台对象转为页面的字符串,我们只需要实现这两个抽象方法即可实现类型转换。

 

Struts2页面中的参数是通过action中的setXXX方法名称进行给action中的属性赋值的。所以,只要页面上元素name值在action中有对应的set方法,就要进行赋值。

而转换配置文件中的key-value中的key就是action中的属性名称。

 

全局类型转换,在src目录下新建,该文件的内容是待转换的类(全路径)===转换器的名字,即:

bean.User=bean.UserConverter2

 

 

原创粉丝点击