struts2

来源:互联网 发布:think in java第五版 编辑:程序博客网 时间:2024/06/06 04:20


第 1 章 Servlet应用
 本章所学内容大部分前面已经讲过了。重复的不再编写,就写没有的
 1.获取初始化参数
   在Web.xml中。 配置如下代码
   <init-param>
     <param-name>viewType</param-name>
     <param-value>Excel</param-value>
   </init-param>


   在Servlet中重写init()方法,调用 String type = this.getInitParameter("viewType");
   就可以获得初始化参数Excel了


 2. 设置以Excel方式显示数据,如果是Servelt的request转发,则下载xsl文件,否则下载jsp文件
    <%@ page 省略代码 contentType="application/vnd.ms-excel;charset=utf-8"%>


第 2 章 JSP+Servlet+JavaBean
   1.设计模式和框架,
     1.1 设计模式是一套被反复使用,成功代码设计经验的总结,模式必须是典型问题的解决方案。
         类似于建筑物的设计图纸
     
     1.2 框架是一种可重用,半完成的应用程序,开发者可以利用它快速开发需要。定制的程序,框架
     最大的好处就是重用,面向对象系统获得最大的复用方式就是框架,
         类似于建筑物的框架,已经搭建好了。


   2.MVC设计模式
     MVC设计模式是一种流行的软件设计模式,它分为三个部分。
     1.模型(Model):表示数据和业务处理。
     2.视图(view):是用户看到并与之交互的页面,如JSP或者HTML
     3.控制器(Controller):接收用户的输入并调用模型和视图去完成用户的请求,它
     不输出任何东西,也不做任何业务处理,只负责接收请求并决定调用哪个模型组件
     去处理请求。然后确定用哪个视图来显示模型处理返回的数据。


第 3 章 自定义MVC框架(myStruts)
   关于本章详细内容请看项目struts(框架),lesson3(实例),其中
   1.Action接口: 有一个public String execute(HttpServletRequest request,HttpServletResponse 


response)方法,
   所有的业务操作都得实现这个接口。必须返回一个字符串,就是处理结果。


   2.ActionMapping类: 有三个属性, name , className , resultMap 哈希表,
   其中name表示请求要对应的名字,如login.action,则是login , className则是
   保存Action接口对应操作的实现类的全限定名,resultMap哈希表是处理结果的集合。


   3.Result类:有三个属性,name , value , redirect ,其中 ,name是execute的返回结果对应的字符串,
   如success,value表示一个路径,可以根据这个路径转发或重定向,redirect 布尔值。true 和false表示
   重定向和转发。


   4.ActionMappingManager类,有一个 Map<String, ActionMapping> 的静态哈希表。表示全部的配置信息。
     包括方法 init() 解析xml读取配置信息;getActionMapping()截取传过来的路径,然后从Map找到对应的
     ActionMpping返回回去。


   5.获取发出请求的路径,String actionName = request.getRequestURI();
   
   6.xml配置
   <actions>
    <action class="com.sword.servlet.actionimpl.LoginAction" name="login">
   <result name="success" redirect="true">success.jsp</result>
   <result name="input" redirect="false">register.jsp</result>
  </action>
    <action class="com.sword.servlet.actionimpl.RegisterAction" name="register">
   <result name="success" redirect="true">success.jsp</result>
   <result name="input" redirect="false">register.jsp</result>
   <result name="error" redirect="false">register.jsp</result>
  </action>
   </actions>


第 5 章 Struts2 初体验
   1.Struts2的资源获取。
     http://archive.apache.org/dist/struts/binaries/ 有下载。本章使用struts-2.1.6-all.zip


   2.添加Struts到项目中,
     可以点击项目右键。选择MyElipse - add Struts 方式添加,也可以手动把
     commons-fileupload-1.2.1.jar, ognl-2.6.11.jar,
     freemarker-2.3.13.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,
     添加到项目中。
   
   3.实例.
     3.1第一步。页面:
     页面表单:
      <h1>${message}</h1>
      <form action="helloWorld.action">
         请输入您的姓名:<input name="name" type="text"/>
      <input type="submit"></form> 


     3.2第二步。创建 HelloWorldAction类,
      这个类实现 com.opensymphony.xwork2.Action  里面的Action接口。
       public String execute() throws Exception {
this.setMessage("hello,"+this.getName()+"!");
return SUCCESS;  //返回静态常量SUCCESS ,
}
       
private String message;   //保存信息,在页面使用
private String name;    //声明name属性,保存表单提交过来的name,
public String getMessage() {   在页面使用${message} 的时候,自动调用这个方法
return message;
}
public void setMessage(String message) { //设置message的值
this.message = message;
}
public String getName() {              //在页面使用${name} 的时候,自动调用这个方法
return name;
}
public void setName(String name) {     //通过setName 内部在进入这个Action类的时候就给name


属性填充了值。
this.name = name;
}


注意:这个类的属性name,声明之后并且提供set,get方法,就可以获取表单提交的name的值了,也可以


供el表达式使用了.
在Struts2中,可以直接使用Action实现类的属性来接收用户的输入,通过Struts2的数据绑定机制。传


递name请求参数,
实际上等于调用了setName方法。同样在页面中调用${message}等于调用了getMessage()方法


        经验:也可以用类保存信息,比如在这个类中有个user对象,user对象里有username和password, 那么


直接声明user对象,
提供get,set就可以了。然后在页面上表单元素的name属性使用 "user.username","user.password"
那么进入的Action类的时候,自动填充好这个user 对象


     3.3第三步。配置web.xml
       <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
  2.1和之后的版本使用


它//org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
2.0版本使用它//org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
       </filter>
       <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
       </filter-mapping>


     3.4第四步.编写配置文件
       在src目录下创建struts.xml文件。内容如下。
       <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 


"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" extends="struts-default">
           //我们主要编写的就是action,每多一个操作,就添加一个Action.
  <action name="helloWorld" class="action.HelloworldAction">
    <result name="success">index.jsp</result>
  </action>


</package>
</struts>
       在Struts 2配置文件中,
       package元素用于定义 Struts 2处理请求的逻辑单元,
       name属性为必须的并且唯一,用来指定包的名称(被其他包引用),
       extends属性类似Java的extends,用于指定要扩展的包。
       
       action元素用于配置Struts 2框架的工作单元Action类,action元素将以个请求的URL(action的名字)对


应到一个Action类,
       name属性是必须的,用来表示action的名字,
       class属性可选用于设定Action类的全限定名,


       result元素用来设定Action类处理结束后,系统下一步做什么,
       name属性表示result的逻辑名,用于与Action类返回的字符串进行匹配,
       result的值用来指定这个结果对应的资源的位置


     3.5 Action接口常量字符逻辑含义
     常量          逻辑含义
     SUCCESS       表示程序处理正常,并成功给用户成功后的结果
     NONE          表示处理正常结束,但不返回给用户任何显示
     ERROR         表示处理结果失败
     INPUT         表示需要更多用户输入才能顺利执行
     LOGIN         表示需要用户正确登录后才能顺利执行


   4.Struts 2 访问Servlet API
     4.1 与Servlet API解耦访问方式
       Struts 2框架对Servlet API中的HttpServletRequest,HttpSession,ServletContext进行了封装,
       构造了三个Map对象来替代这三种对象。 如下代码案例:


       4.1.1获取request
         ActionContext ac = ActionContext.getContext();
Map request = (Map)ac.get("request");
       4.1.3获取request
         ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
       4.1.3获取request
         ActionContext ac = ActionContext.getContext();
Map application = ac.getApplication();


       4.1.4 使用
         比如之前是request.setAttribute("score",50);
现在就是  request.put("score",50);
     4.2 与Servlet API耦合访问方式


       要直接获取Servlet API对象可以使用 org.apache.struts2.ServletActionContext类,
       该类是AcationContext类的子类,该类有下面的方法来获取Servlet API对象
       public static HttpServletRequest getRequest();
       public static ServletContext getServletContext();
       public static HttpServletResponse getResponse();


       session对象的话。 在request里可以获取, 你懂的。
       


   5.Struts 2 标签与数据校验
     5.1 UI标签
       1.表单标签
         <s:form></s:form>  相当于<form>标签
<s:textfield></s:textfield> 文本输入框
<s:password></s:password> 密码输入框
<s:textarea></s:textarea> 文本域输入框
<s:radio></s:radio>  单选框
<s:checkbox></s:checkbox> 多选框
<s:submit/> 提交按钮
<s:reset/> 重置按钮
<s:hidden/> 隐藏域标签


2.使用实例
       导入标签库
         在页面上方 :<%@ taglib uri="/struts-tags" prefix="s" %>


       <s:form action="register.action" method="post">
<s:textfield cssClass="text" label="用 户 名 " name="user.name" />
<s:password cssClass="text" label="密  码" name="user.password" />
<s:password cssClass="text" label="确认密码" name="repassword" />
<s:textfield cssClass="text" label="电  话" name="user.telephone"></s:textfield>
<s:textfield cssClass="text" label="用户姓名"  name="user.username" ></s:textfield>
<div class="buttons"><s:submit name="submit" value="立即注册" /></div>
       </s:form>


       注意:web.xml的请求拦截 。必须配置成 /* 才能起作用。否则出错


     5.2 数据校验
         我们不实现Action类,而是继承ActionSupport类,完成Action的开发,
     ActionSupport类全限定名为com.opensymphony.xwork2.ActionSupport;其中不仅
     对ACtion接口进行了简单的实现,如果在Action配置中省略了class属性,则代表
     访问ActionSupport类,其execute方法直接返回SUCCESS,同时ActionSupport类还
     增加了对验证和本地化等的支持。
     
     一般情况下的Action类开发,都会选择继承此类,他提供一个 validate方法。
     在进入execute方法之前就会进入这个方法。则可以这样验证,如下代码
        /**
* 执行验证操作
* 一旦验证失败,要求必须提供一个名为input的result配置
*<result name="input" type="dispatcher">/login.jsp</result>
* 只做一些非空,格式等等的表单的验证
*/
public void validate() {
if (name == null || name.length() == 0) {
super.addFieldError("name", "用户名不能为空");
}

if (pwd == null || pwd.length() == 0) {
super.addFieldError("pwd", "密码不能为空");
}


}





在页面中可以直接用<s:fielderror name="name" fieldName="name"></s:fielderror>
可以获取到失败之后的字符串. 或者<s:actionerror/>


0 0
原创粉丝点击