struts2自学

一、轻量级的MVC框架,主要解决请求分发问题,重心在控制层和表现层。

 

二、主要配置文件:web.xml配置filter,struts.xml配置action路径,其他插件配置logback.xml...

 

三、web.xml

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

四、struts.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"    "http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- START SNIPPET: xworkSample -->
<struts>
    <package name="up" namespace="/learning" extends="struts-default">
        <action name="sayhi" class="action.HelloAction" method="SayHello">
            <result name="fail" >
                /index.jsp
            </result>
            <result name="success" >
                /succ.jsp
            </result>
        </action>
        <action name="login">
            <result name="success">/index.jsp</result>
        </action>
    </package>
    <!-- <package name="day1" namespace="/learning" extends="struts-default">
        <interceptors >// 注册拦截器
            <interceptor name="fistInter" class="interceptor.FirsrInterceptor"></interceptor>
            <interceptor name="secondInter" class="interceptor.SecondInterceptor"></interceptor>
            <interceptor-stack name="myInterceptorStack">// 拦截器栈
                <interceptor-ref name="fistInter"></interceptor-ref>
                <interceptor-ref name="secondInter"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="defaultStack"></default-interceptor-ref>
        <default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref>
    <constant name="struts.multipart.maxSize" value="50000"></constant>
    <package name="up" namespace="/upload" extends="struts-default">
        <default-interceptor-ref name="defaultStack"></default-interceptor-ref>// 引用拦截器
        <action name="upload">
            <result name="success">/WEB-INF/upload.jsp</result>
        </action>
        <action name="toupload" class="action.UpLoadAction" method="execute">
            <result name="upsuccess">/WEB-INF/upsuccess.jsp</result>
            <result name="upunsuccess">/WEB-INF/upfail.jsp</result>
        </action>
     <action name="xx_*" class="action.UpLoadAction" method="{1}">// 表示action接收页面通过通配符传过来的值,如book_add会调用action中的add方法,如此可以不用为每一个方法写一个action路径了
            <result name="upsuccess">/WEB-INF/upsuccess.jsp</result>
            <result name="upunsuccess">/WEB-INF/upfail.jsp</result>
        </action>
</package> --> 
</struts>

 

  

五、Action编写

  1.获取页面参数  基本属性注入和域模型注入(对象属性注入),action中有该属性的set方法,或其他传值方式

  2.action返回参数  action返回的参数为string类型,且与struts中result的name一致  

  3.页面获取返回参数   通过el表达式(${user.name})或者ognl语言(<s:property value="user.name"/>),使用ognl语言时要引入标签<%@taglib uri="/struts-tags" prefix="s"%>,或者引入其他标签使用其他展现返回参数的方式

 

六、拦截器

  适合封装一些通用处理,便于重复利用。

  1.创建拦截器  创建class实现Interceptor接口,并实现intercept方法

  2.注册拦截器

  3.引用拦截器

  struts2默认引用defaultStack拦截器,一旦在action下配置了其他拦截器则默认的拦截器失效,需加上该拦截器

  多个拦截器遵循先进后出的原则,挡执行到拦截器中的invoke()方法时会确认之后是否还有拦截器,若有则继续执行后面的拦截器,没有则执行action方法

   4.FileUpload 拦截器  默认拦截器,用于文件上传:将表单中提交的文件以临时文件的形式保存到服务器临时路径下,此拦截器将该临时文件对象注入给action,action自助处理该文件后,拦截器将删除该临时文件

  
// jsp文件中代码
  <form action="/struts222/upload/toupload" method="post" enctype="multipart/form-data"> <h2>选择文件:<input type="file" name="wedefine"/></h2> <input type="submit" value="上传文件"/> </form>
  
// action中代码
   private
File wedefine;// 注入文件对象 private String wedefineFileName;// 从jsp获取文件的名称:name属性+FileName public String execute() { String copyPath = "WEB-INF/"+wedefineFileName; copyPath = ServletActionContext.getServletContext().getRealPath(copyPath);// 新文件路径 File finalFile = new File(copyPath);// 创建新文件 System.out.println("创建文件路径"+copyPath); if(!finalFile.exists()){ try { finalFile.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } boolean flag = FileUtil.copyFile(wedefine, finalFile); if(flag) return "upsuccess"; else return "upunsuccess"; } public File getWedefine() { return wedefine; } public void setWedefine(File wedefine) { this.wedefine = wedefine; } public String getWedefineFileName() { return wedefineFileName; } public void setWedefineFileName(String wedefineFileName) { this.wedefineFileName = wedefineFileName; }

 

posted @ 2017-06-09 16:18  一叶依然  Views(164)  Comments(0)    收藏  举报