Struts

Struts
一,搭建一个Struts2项目的步骤:
1.引入Struts2依赖的jar包
2.在web.xml文件中配置一个Filter拦截所有的请求,让转入Struts2工作体系
StrutsPrepareAndExecuteFilter是Struts2的核心的控制器

<filter>
                   <filter-name>struts2</filter-name>
                   <filter-class>                       org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.class
                   </filter-class>
          </filter>
          <filter-mapping>
                   <filter-name>struts2</filter-name>
                   <url-pattern>/*</url-pattern>
          </filter-mapping>
3.在src文件下新建一个struts.xml 文件    ,这是Struts2的核心配置文件,配置如下例子
eg:

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
          <package name="/" extends="struts-default" namespace="/">
//package 的name自己取名,只要是唯一的就行;namespece是构成访问路径的一部分
                   <action name="reg" class="com.zt.action.RegAction">
                             <result>/success.jsp</result>
                   </action>
//reg也是访问路径的一部分
                   <action name="login" class="com.zt.action.LoginAction">
                             <result>/success.jsp</result>
                   </action>
          </package>

</struts>

4.编写一个处理用户请求的Action类
     Struts2的action可以是一个简单的java类,
也可以继承ActionSupport 类。
注意1.类名的全路径必须是3步骤中配置的类路径com.zt.action.RegAction
       2.访问Action时候根据namespace+Action name来访问的
例如如果配置如下,
<struts>
          <package name="user" extends="struts-default" namespace="/user">
//package 的name自己取名,只要是唯一的就行
                   <action name="hello" class="com.zt.action.HelloAction">
                             <result name="success">/success.jsp</result>
                             <result name="error">/error.jsp</result>
                   </action>
          </package>
</struts>
则访问HelloAction 就需要工程名+/user/hello

4.Action中获取表单值
     1:字段驱动
          Action中属性名与页面表单中的input name进行一一对应,给上set方法,就会自动注入页面传递过来的值
eg:
public class RegAction extends ActionSupport{
  private String name;
  private String pass;
  public void setName(String name) {
          this.name = name;
    }
  public void setPass(String pass) {
          this.pass = pass;
  }

          @Override
          public String execute() throws Exception {
                   System.out.println("name-->"+name);
                   System.out.println("pass-->"+pass);
                   return SUCCESS;
          }

}
     2.模型驱动
   需要编写一个模型类,  Action中模型类的属性名与页面表单的name进行一一对应 ,Action中提供一个模型类属性, 实现 ModelDriven<User>接口并指定类名,实现getModel()方法,创建并返回一个类对象
eg:
public class LoginAction extends ActionSupport
      implements ModelDriven<User>{
   private User user;

          @Override
          public String execute() throws Exception {
                     System.out.println(user.getName());
                     System.out.println(user.getPass());
                   return SUCCESS;
          }

          @Override
          public User getModel() {
                   user=new User();
                   return user;
          }

}
5.Action中如何传值:
struts如何传值
     一、 Map
          1:

          public String execute() throws Exception {
                   Map request = (Map) ActionContext.getContext().get("request");
                   Map session = (Map) ActionContext.getContext().getSession();
                   Map application = (Map) ActionContext.getContext().getApplication();
                   request.put("name", "admin");
                   session.put("sessionname", "sessionadmin");
                   application.put("applicationname", "applicationadmin");
                   return SUCCESS;
          }
          2:

public class UserAction extends ActionSupport implements RequestAware,
                   SessionAware, ApplicationAware {
          Map request;
          Map session;
          Map application;
          @Override
          public String execute() throws Exception {
                   request.put("name", "admin");
                   session.put("sessionname", "sessionadmin");
                   application.put("applicationname", "applicationadmin");
                   return SUCCESS;
          }

     二、HttpServletRequest
     1:

public String execute() throws Exception {
                   HttpServletRequest request = ServletActionContext.getRequest();
                   HttpSession session = request.getSession();
                   ServletContext application = session.getServletContext();
                   request.setAttribute("name", "admin");
                   session.setAttribute("sessionname", "sessionadmin");
                   application.setAttribute("applicationname", "applicationadmin");
                   return SUCCESS;
          }
     2:

public class UserAction extends ActionSupport implements RequestAware,
                   SessionAware, ApplicationAware {
          Map request;
          Map session;
          Map application;
          @Override
          public String execute() throws Exception {
                   request.put("name", "admin");
                   session.put("sessionname", "sessionadmin");
                   application.put("applicationname", "applicationadmin");
                   return SUCCESS;
          }
          @Override
          public void setRequest(Map<String, Object> arg0) {
                   request = arg0;
          }
          @Override
          public void setApplication(Map<String, Object> arg0) {
                   application = arg0;
          }
          @Override
          public void setSession(Map<String, Object> arg0) {
                   session = arg0;
          }
}
六,struts2动态方法的调用
     namespace+Action name!方法名
     完全匹配namespace+Action name 如果找不到会忽略namespace 找“/”+Action name

七、struts中的文件上传
     表单<form action="upload" method="post" enctype="multipart/form-data">
     表单的<input  type =“file”name=“”>
单个文件的上传:

public class FileUploadAction extends ActionSupport {
          private String name;
          private File photo;
          private String photoFileName; // file属性名+Name
          private String photoContentType;// file属性名+ContentType
          public void setName(String name) {
                   this.name = name;
          }
          public void setPhoto(File photo) {
                   this.photo = photo;
          }
          public void setPhotoFileName(String photoFileName) {
                   this.photoFileName = photoFileName;
          }
          public void setPhotoContentType(String photoContentType) {
                   this.photoContentType = photoContentType;
          }
          public String execute() throws Exception {
                   String path = ServletActionContext.getRequest().getRealPath(
                                      "/uploadFiles");
                   long curr = System.currentTimeMillis();
                   System.out.println(path);
                   File file = new File(path, curr
                                      + photoFileName.substring(photoFileName.lastIndexOf(".")));
                   FileUtils.copyFile(photo, file);
                   return SUCCESS;
          }
}
多个文件的上传:

public class FileUploadAction extends ActionSupport {
          private String name;
          private File photo;
          private String photoFileName; // file属性名+Name
          private String photoContentType;// file属性名+ContentType
          public void setName(String name) {
                   this.name = name;
          }
          public void setPhoto(File photo) {
                   this.photo = photo;
          }
          public void setPhotoFileName(String photoFileName) {
                   this.photoFileName = photoFileName;
          }
          public void setPhotoContentType(String photoContentType) {
                   this.photoContentType = photoContentType;
          }
          public String execute() throws Exception {
                   String path = ServletActionContext.getRequest().getRealPath(
                                      "/uploadFiles");
                   long curr = System.currentTimeMillis();
                   System.out.println(path);
                   File file = new File(path, curr
                                      + photoFileName.substring(photoFileName.lastIndexOf(".")));
                   FileUtils.copyFile(photo, file);
                   return SUCCESS;
          }
}

八、struts2异常处理
     1.配置   log4j
     log4j -》log for java
     log4j等级 error-》waring -》info
九:struts2拦截器Interceptor
     struts的拦截器两种实现方式
          1。实现Interceptor接口
          2.继承AbstractInterceptor 抽象类
拦截器多个拦截器采取栈的思想,先进后出
十、Action 跳转jsp和跳转action

Action 跳转jsp:
     1.默认type=“dispatcher”, 是请求转发,一次请求,地址栏不发生变化,可以传递request范围值
     2.action中加入type=“redirect”变为请求重定向,两次请求,地址栏会发生变化,不可以传递request范围值

Action跳转action  :
       type="chain"
                      请求转发   一次请求   地址栏不发生变化
           <result name="index" type="chain">
     <param name="namespace">/user</param>
     <param name="actionName">user</param>
     </result>
    
     type="redirectAction" 请求重定向           
      <result name="index" type="redirectAction">user/user</result> 
十一:struts2 国际化(I18N) Internationalization
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值