Struts 2入门

Struts 2入门

Struts 2及其优势

  • Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点
  • Struts 2拥有更加广阔的前景,自身功能强大

Struts 2初体验

  • 使用Struts 2开发程序的基本步骤

    1. 加载Struts 2类库
    2. 配置web.xml文件
    3. 开发视图层页面
    4. 开发控制层Action
    5. 配置struts.xml
    6. 部署、允许项目
  • 加载Struts 2类库

    文件名说明
    struts2-core-xxx.jarStruts 2框架的核心类库
    xwork-core-xxx.jarXWork类库,Struts 2的构建基础
    ognl-xxx.jarStruts 2使用的一种表达式语言类库
    freemarker-xxx.jarStruts 2标签模块使用类库
    javassist-xxx.GA.jar对字节码进行处理
    commons-fileupload-xxx.jar文件上传是需要使用
    commons-io-xxx.jarJava IO扩展
    commons-lang-xxx.jar包含了一下数据类型的工具类
  • 配置web.xml

    <filter>
    	<filter-name>struts2 </filter-name>
    	<filter-class>					
            org.apache.struts2.dispatcher.ng.filter.
            	StrutsPrepareAndExecuteFilter
    	</filter-class>
    </filter>
    
    <!--将全部请求定位到指定的Struts 2过滤器中-->
    <filter-mapping>
    	<filter-name>struts2 </filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
  • 编写输出页面

    ...
    	<div>
    		<h1>
                <!--显示Struts Action中message的属性内容-->
    			<s:property value="message"/><!--输出显示语句-->
    		</h1>
    	</div>
    	<div>
    		<form action "helloWorld.action" method="post">
    			请输入您的姓名:
    			<input name="name" type="text" />
    			<input type="submit" value:"提交" />
    		</form>
    	</div>
    ...
    
  • 编写Action

    public class HelloWorldAction implements Action 
    {    
    	//用户输入的姓名,属性名与jsp中的name属性相同
    	private String name = ""; 
    	//向用户显示的信息
    	private String message = "";
    	public String execute() {
    		//根据用户输入的姓名,进行"Hello,XXXX!"的封装
    		this.setMessage("Hello,"+this.getName()+"!");
    		//处理完毕,返回导航结果的逻辑名
    		return "success";
    	}
        
    	//省略setter、getter 方法
    }       
  • 配置Struts 2配置文件(struts.xml)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    	<package name="web" extends="struts-default">
            <action name="helloWord" class="cn.strutsdemo.HelloWorldAction">
                <result name="success">helloWorld.jsp</result>
            </action>
        </package>
    </struts>
  • 部署、运行项目

Struts 2再体验

  • 数据验证

    • 开发控制层

      public class LoginAction implements Action{
          private String userName = "";
          private String password = "";
          public String execute(){
              if("jason".equals(username)&&"2010".equals(password)){
                  return "success";
              }else{
                  return "error";
              }
          }
          
          //省略setter、getter 方法
      }
    • 配置Struts 2配置文件(struts.xml)

      <package name="default" namespace="/" extends="struts-default">
              <action name="login" class="cn.strutsdemo.LoginAction">
                  <!--结果为“success”时,跳转至success.jsp页面-->
                  <result name="success">success.jsp</result>
                  <!--结果为“error”时,跳转至fail.jsp页面-->
                  <result name="error">fail.jsp</result>
              </action>
      </package>

Struts 2访问Servlet API

  • Struts 2访问Servlet API的方式

    • 与Servlet API解耦的访问方式

      • 对Servlet API进行封装
        • 提供了三个Map对象访问request、session、application作用域
      • 通过ActionContext类获取这三个Map对象
        • Object get(“request”)
        • Map getSession()
        • Map getApplication()
      public class LoginAction implements Action{
          private static final String CURRENT_uSER = "CURRENT_USER";
          private String userName = "";
          private String password = "";
          public String execute(){
              if("jason".equals(username)&&"2010".equals(password)){
                  //从ActionContext中获取session
                  Map<String,Object> session = null;
                  session = ActionContext.getContext().getSession();
                  if(session.containsKey(CURRENT_USER)){
                      session.remove(CURRENT_USER);
                  }
                  session.put(CURRENT_USER,username);
                  return "success";
              }else{
                  return "error";
              }
          }
          
          //省略setter、getter 方法
      }

      页面显示

      <body>
          <h1>读取Session中保存的用户名</h1>
          <div>欢迎您,$(sessionScope.CURRENT_USER)!</div>
      </body>
    • 与Servlet API耦合的访问方式

      • 通过ServletActionContext类获取Servlet API对象
        • ServletContext getServletContext()
        • HttpServletResponse getResponse()
        • HttpServletRequest getRequest()
        • 通过request.getSession()获取session对象
      • 通过xxx.setAttribute()和xxx.getAttribute()方法不同的页面或Action中传递数据
      public class LoginAction implements Action{
          private static final String CURRENT_uSER = "CURRENT_USER";
          private String userName = "";
          private String password = "";
          public String execute(){
              if("jason".equals(username)&&"2010".equals(password)){
                  //获取session
                  HttpSession session = null;
                  session = ServletActionContext.getRequest().getSession();
                  if(session.containsKey(CURRENT_USER) != null){
                      session.removeAttribute(CURRENT_USER);
                  }
                  session.setAttribute(CURRENT_USER,username);
                  return "success";
              }else{
                  return "error";
              }
          }
          
          //省略setter、getter 方法
      }

Struts 2的数据校验

  • Struts 2提供了数据验证机制

    • 继承ActionSupport类来完成Action开发
    • ActionSupport类不仅对Action接口进行简单实现,同时增加了验证,本地化等支持
  • 修改LoginAction

    public class LoginAction extends ActionSupport{
        //......省略代码
        public void validate(){
            if(this.getUsername().length()==0){
                addFieldError("name","用户名不能为空");
            }
            if(this.getPassword().length()==0){
                addFieldError("pwd","用户密码不能为空");
            }
        }
        
        //......省略代码
    }

Struts 2标签

Struts 2标签分为UI标签和通用标签

使用Struts 2标签需要在页面引入Struts 2的标签库

<%@ taglib prefix="s" uri="/struts-tags"%>

Struts 2 UI标签

  • 常用表单标签

    标签说明
    < s:form>…< /s: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/>隐藏域标签
  • 常用非表单标签

标签说明
< s:actionerror/>显示Action错误
< s:actionmessage/>显示Action消息
< s:fielderror/>显示字段错误

修改jsp页面

<%@ taglib prefix="s" uri="/struts-tags"%>
...
<div>
    <s:fielderror/>
</div>
<s:form action="/login.action">
	<div>
        用户名:<s:textfield name="userName"/>
    </div>
    <div>
        密码:<s:password name="password"/>
    </div>
    <div>
        <s:submit value="登录"/>
    </div>
</s:form>

Struts 2通用标签

名称标签说明
条件标签< s:if>…< /s:if>根据表达式的值,
< s:elseif>…< /s:elseif>判断将要执行的内
< s:else>…< /s:else>
迭代< s:iterator>…< /s:iterator>用于遍历集合
  • 条件判断标签

    <s:if test="表达式">
    	需要执行的代码
    </s:if>
    <s:elseif test="表达式">
    	需要执行的代码
    </s:elseif>
    <s:else>
    	需要执行的代码
    </s:else>
    
  • 迭代标签

    <s:iterator value="集合对象" status="status" id="name">
    	读取集合对象并输出显示
    </s:iterator>
    
    • value属性:需要进行遍历的集合对象
    • status属性:当前迭代元素的IteratorStatus实例
    • id属性:当前迭代元素的id,可直接访问元素,该参数可选
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值