黑马程序员_Struts2部分笔记

来源:互联网 发布:俄罗斯方块软件 编辑:程序博客网 时间:2024/05/07 12:26
 

一.Struts2的开发环境和配置

1.     在MyEclipse中新建一个工程,在工程的src目录中新建一个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>

    <!-- Add packages here -->

 

</struts>

2.     在WebRoot/WEB-INF/lib目录中添加

struts2-core2-2.x.x.jar,

xwork.x.x.jar,

freemarker-2.3.x.jar,

commons-logging-1.1.x.jar,

commons-fileupload-1.2.1.jar

ognl-2.6.x.jar

至少这六个jar文件(可从http://struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip文件)

3.     配置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>

现在struts2的环境配置已经完成了。

二.简单的struts2程序

2.1.建立action

在src下建立一个包org.hwh.action,在包中建立一个java类Login

package org.hwh.struts2;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class Login extends ActionSupport

{

   private String name;

   private String pass;

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getPass() {

      return pass;

   }

   public void setPass(String pass) {

      this.pass = pass;

   }

   public String execute() throws Exception

   {

      if("123".equals(name)&&"hwh".equals(pass))

      {

        return SUCCESS;

      }

      else

        return "fail";

   }

}

 

程序说明:执行execute方法,返回success或fail

 

2.2.将此action配置到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>

<constant name="struts.action.extension" value="action"></constant>

    <package name="org.hwh.struts2" namespace="" extends="struts-default">

        <action name="login" class="org.hwh.struts2.Login">

        <result name="success">/ok.jsp</result>

        <result name="fail">/fail.jsp</result>

        </action>

       

    </package>

    <!-- Add packages here -->

 

</struts>

程序解释:package节点中的name可以随便起,但是多个package的name不能重复

namespace作为访问此action时的路径,可以没有也可以是空字符,extends为继承的package名。

Action节点中的name是访问此action时的名字,class为action的包名,默认为ActionSupport,method默认执行execute方法。

Result节点中的name为execute方法的返回值,根据name的值跳转到不同页面,默认为success。

编写hello.jsp,ok.jsp,fail..jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

    <title>-_-+</title>

  </head>

  <body>

  <form action="login" method="post">

   <input type="text" name="name" value="${name }"><br>

   <input type="password" name="pass" value="${pass }"><br>

   <input type="submit" value="ok">

  </form>

  </body>

</html>

 

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

  </head>

  <body>

  <h1>OK!</h1>

  </body>

</html>

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<html>

  <head>

  </head>

  <body>

  <h1>FAIL!</h1>

  </body>

</html>

 

 

部署到tomcat中后在浏览器中输入

http://localhost:8080/Struts2/login或http://localhost:8080/Struts2/login.action 可以直接访问此action。如果不想.action想.xxx怎么办呢?

<constant name="struts.action.extension" value="xxx"></constant>

这样就可以.xxx了。

在浏览器中输入http://localhost:8080/Struts2/hello.jsp输入123,hwh提交给action页面显示OK!否则FAIL!

constant节点的其他属性

 

<!--指定请求action的后缀,默认为action -->

<constant name="struts.action.extension" value="hou"></constant>

<!--指定编码集  -->

<constant name="struts.i18n.encoding" value="GBK"></constant>

<!--设置浏览器是否缓存静态内容,默认为true,开发阶段最好为false -->

<constant name="struts.serve.static.browserCache" value="false"></constant>

<!--当struts的配置文件修改后,系统是否自动重新加载该文件(不用重启服务器),默认为false,开发阶段最好为true-->

<constant name="struts.configuraction.xml.reload" value="true"></constant>

<!--开发过程中打印更详细的错误信息-->

<constant name="struts.devMode" value="true"></constant>

<!--默认的试图主题-->

<constant name="struts.ui.theme" value="simple"></constant>

<!--与spring集成时,指定有spring负责action对象的创建-->

<constant name="struts.objectFactory" value="spring"></constant>

<!--设置struts2是否支持动态方法调用,默认为true -->

<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>

<!-- 文件上传总大小限制 -->

<constant name="struts.multipart.maxSize" value="10701096"></constant>

 

2.3.action名称的搜索顺序

<package name="org.hwh.struts2" namespace="" extends="struts-default">

现在的namespace为空,即使你在访问的时候在浏览器中输入

http://localhost:8080/Struts2/sss/224/waa/login.action也没有问题,也可以执行此action

如果namespace=”/hou”那么访问此action时就要输入http://localhost:8080/Struts2/hou/login

在/hou下可以再加n层不存在的目录也能访问到action,但是如果/hou不存在就不行了。如果该namespace不存在则会去找默认的namespace(为空的),如果没有定义为空的namespace的package则会出错。

2.4. result配置的各种视图转发类型

<result type=””> </result>

Type的类型有dispacher(默认),redirect(客户端跳转),redirectAction(跳转到action),plainText(可显示源码的跳转)

其中跳转到的action在同一个package配置中直接用就可以,如果不在同一package下

<result type=”redirectAction”>

  <param name=”actionName”>actionName</param>

  <param name=”namespace”>namespace</param>

</result>

2.5. 为Action属性注入值

<package name="org.hwh.struts2" namespace="/hou" extends="struts-default">

        <action name="login" class="org.hwh.struts2.Login">

        <param name="name">123</param>

        <param name="pass">hwh</param>

        <result name="success">/ok.jsp</result>

        <result name="fail">/fail.jsp</result>

        </action>

    </package>

说明:action下的param节点可为action中的属性赋值。赋值之后跳转到的jsp页面中可以用${name},${pass}获得值。注意:param中的name的值应该与action中属性的名称一致。

 

三.Struts2的处理流程

说明:当用户请求到达时,filter会过滤用户请求。默认情况下,请求无后缀或后缀名为

.action时(请求为一个action)这个请求会被转入struts2框架中处理,否则struts2则会略过此请求。当请求进入框架时会先进过一系列的拦截器,然后到action,根据action的返回值返回到jsp或html页面。Struts1与struts2不同的地方在于struts2中的action是线程安全的。

四.Struts2中使用多个配置文件

在struts.xml文件中使用include:

<struts>

  <include file="a.xml"></include>

  <include file="b.xml"></include>

</struts>

注意:被包含的文件中<package>的name是唯一的。