struts初步探索(一)

来源:互联网 发布:投资网络大电影的风险 编辑:程序博客网 时间:2024/06/07 05:56

1. 前言:struts作为一种框架,最主要的用处,就是大大 简化了

servlet带来的各种繁琐的跳转代码,同时作为一个完整的 框架,它还 很没必要的开发了很多 不必要的 东西,进化的 过滤器--拦截器,类型转化器,国际化,标签

  2. 首先 导包------然后配置 web.xml(会有点点不同,根据struts.xml位置的不同)--3.然后就是 配置 struts.xml文件 

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">    <filter>        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    <init-param>    <param-name>config</param-name>    <param-value>    struts-default.xml,    struts-plugin.xml,    <span style="background-color: rgb(51, 255, 51);">struts.xml --这里 有点点不同, ../config/struts.xml</span>    </param-value>             就是在 web-inf 下建一个文件夹     </init-param>    </filter>    <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping></web-app>
<span style="background-color: rgb(51, 204, 0);">》》》》》》》》》》》》》》》》》》》》》》》》</span>
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="def" namespace="/" extends="struts-default"><!-- 将拦截器配置进来 --><interceptors><interceptor name="checklogin" class="com.xt.utils.CheckLoginIntercepter"></interceptor><!-- 合为一个栈 --><interceptor-stack name="myStack"><interceptor-ref name="checklogin"></interceptor-ref><!-- Struts默认的 --><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 设置默认拦截器 --><default-interceptor-ref name="myStack"></default-interceptor-ref><action name="stuact_*" class="com.xt.action.StudentAction" method="{1}"><result name="input">/index.jsp</result></action><!-- 文件上传  fileuploadact_doUpload --><action name="fileuploadact_*" method="{1}" class="com.xt.action.FileUploadAction"><param name="savePath">/upload</param><interceptor-ref name="fileUpload"><param name="allowedTypes">image/jpeg,image/bmp,image/gif</param>                         限制 类型上传,jsp的form里面 写 enctype=multipart/form-data        </interceptor-ref><interceptor-ref name="myStack"></interceptor-ref><result name="input">/upload.jsp</result></action></package></struts>

4.对于 struts的国际化,我不觉得 以后会用到,这个还需要 配置文件,

  5.  xwork-conversion.propertites  是一个类型转化器,这个以后可能会 用到,适合于 在一个 text里面写上 很多类型的 傻逼,写一下流程,

   1. 一个 装了很多 类型的 class ,一定要把 构造方法 全写上

  2.一个 配置文件 com.entitys.UserInfo (类)=com.utils.userConver(转化器)

  3.   写一个 转换器 class userConver extends StrutsTypeConverter{

public Object convertFromString(Map arg0, String[] arg1, Class arg2) {UserInfo userinfo=new UserInfo();String[] av=arg1[0].split(",");  在 arg1 里面 是很多 的{(1,2),(2,22)}userinfo.setId(av[0]);     先 把第一  拆分成 数组,从 数组里面 取值,赋给 类     userinfo.setPwd(av[1]);return userinfo;

5.但是在 jsp 这边 就是 说   <input name="userinfo" type="text" /></td></tr>    6. action 这边 就是 private userinfo userinfo                                 

?????????????????

5. 拦截器的使用: 

     5-1: 首先 写一个 拦截器,

       public class LogInterceptor extends AbstractInterceptor{

                 

public String intercept(ActionInvocation ink) throws Exception {    System.out.println("进来了"+i);// 首先获取 action 的名字String actionname=ink.getProxy().getActionName();String methodname=ink.getProxy().getMethod();String ipname=ServletActionContext.getRequest().getRemoteAddr();String nowtime=(new Date()).toLocaleString();// 获取 登录名字Map session=ink.getInvocationContext().getSession();System.out.println("进来了 ");String username=(String)session.get("uid");String contexts=actionname+"\t"+ipname+"\t";String paths=ServletActionContext.getRequest().getRealPath("/");this.writes(paths,contexts);i++; // 最后一句 就是说,调回 原来的  action , 你需要执行的 return ink.invoke();}public void writes(String path,String contexts) throws Exception{// 输出流 才可以写入数据           写入 一个文件 ,  文件创建就是  new File(path.txt)FileOutputStream fout=new FileOutputStream(new File(path+"syslog.log"),true);fout.write(contexts.getBytes());// 必须是以  字节数组 写入fout.close();}

 2.  你必须 在 xml 里面配置才行

         

<package name="def" namespace="/" extends="struts-default"><interceptors><interceptor name="checklogin" class="com.utils.LogInterceptor">
    <param name="strattime">20</param> 可以给 拦截器 里面的 属性设置 值 <param name="endtime">21</param>
</interceptor><!-- 合为一个栈 --><interceptor-stack name="myStack"><interceptor-ref name="checklogin"></interceptor-ref><!-- Struts默认的 --><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 设置默认拦截器 --><default-interceptor-ref name="myStack"></default-interceptor-ref>       <action name="test_*" method="{1}" class="com.actions.LogAction" >         <result name="suc">/suc.jsp</result></action></package><package name="desf" namespace="/" extends="struts-default">  <!-- 这个包不会受影响 -->  写在 不是一个包就不会 受到影响,<action name="login"  class="com.actions.UserAction" ><result name="suc">/index.jsp</result><result name="er">/er.jsp</result></action></package>

6.文件上传的 需要 写一个 编码方式的 

      form  里面 enctype=""

<action name="upload" class="com.action.uploadAction" > <interceptor-ref name="fileUpload"> 限制类型的    <param name="allowedTypes">image/jpeg,image/bmp</param> </interceptor-ref>   <interceptor-ref name="default"></interceptor-ref> <param name=savePath">/uploads</param>文件夹 建在 webroot 下面    <result name="suc">/suc.jsp</result></action>
action里面 就是 :public String execute(){
FileUtils.copyDirectory(upload,new File(this.getSavePath()));}
         保存 路径 savepath  

public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath)+"\\"+this.getUploadName();
}

》》》》》》》》》》暂时这些》》》》》》》》》》》》》》》》》》》》》》》》















0 0
原创粉丝点击