struts搭建简单web工程步骤

来源:互联网 发布:java fast paxos算法 编辑:程序博客网 时间:2024/06/05 04:34
如果web项目需要采用Struts,则需进行以下步骤;
1.保证项目是web项目
2.导入相关jar包(13)(http://pan.baidu.com/s/1nvIAnaD)
3.web.xml配置为(在原有的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>
4.写好log4j.xml文件(http://pan.baidu.com/s/1eRRvJgA)以及struts.xml文件
5.根据传统的mvc模式即可进行项目设计(DBHelper(http://pan.baidu.com/s/1nv80QyX))






Struts.xml配置文件的注意事项:
I、关于Struts发送请求时action的基本内容;
第一种:
a、form表单处action的值为A!B.action(<form action="info!login.action"></form>)
b、struts.xml文件的package下的aciton的name值为A,class为方法的全路径,但不需要给method赋值
(<action name="info" class="cn.linkey.action.InfoAction">
<result name="first">/first.jsp</result>
<result name="second">/second.jsp</result>
 </action>)
第二种;
a、form表单处action的值为A_B.action(<form action="info_login.action"></form>)
b、struts.xml文件的package下的aciton的name值为A_B,class为方法的全路径,method的值为B
 (<action name="info_login" class="cn.linkey.action.InfoAction" method="login">
<result name="first">/first.jsp</result>
<result name="second">/second.jsp</result>
  </action>)
第三种:
a.form表单处action的值为A_B.action(<form action="info_login.action"></form>)
b.struts.xml文件的package下的aciton的name值为*_*,class为方法的全路径,method的值为{2}
 (<action name="*_*" class="cn.linkey.action.InfoAction" method="{2}">
 <result name="{1}">/first.jsp</result>
 <result name="second">/second.jsp</result>
</action>)
II、标签属性:
1.package标签属性:(<package name="default" namespace="/" extends="struts-default">)
name: 就package的名字,区分不同的package
extends:继承别的package,通过package的名字继承
namespace:命名空间,"/"表示发布名的后面,匹配发布名后面的前缀
2.action标签属性:(<action name="*_*" class="cn.linkey.action.InfoAction" method="{2}">)
name:请求资源的后缀,不带action
class:请求处理类,默认是AcitonSupport类处理
method:请求处理方法,默认是execute,方法在请求处理类中,
3.result标签属性:(<result name="success" type="redirect"><param name="location">foo.jsp</param></result>)
(绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;
相对路径不以斜杠(/)开头,相对于当前执行的action的路径,也就是namespace指定的路径)
name:为action方法中的返回值,缺省为success
type:(在struts2-core.jar/struts-default.xml中可以找到){
chain:用来处理Action 链
dispatcher(默认值):用来转向页面,通常处理 JSP
redirect:重定向到一个URL
redirectAction:重定向到一个 Action
plainText:显示源文件内容,如文件源码
freemarker:处理 FreeMarker 模板
httpheader:控制特殊 http 行为的结果类型
stream:向浏览器发送 InputSream 对象,通常用来处理文件下载,还可用于返回 AJAX 数据
velocity:向浏览器发送 InputSream 对象,通常用来处理文件下载,还可用于返回 AJAX 数据
xslt:处理 XML/XLST 模板
}
另外,Dispatcher结果类型的实现是org.apache.struts2.dispatcher.ServletDispatcherResult,
该类的二个属性(property):location和parse,这两个属性可以通过struts.xml配置文件中的result元素的param子元素来设置。
param元素的name属性指定结果类型实现类的属性名,param元素的内容是属性的值
例如:
<result name=“success”  type=“dispatcher”>
<param name=“location” >/success.jsp</param>
<param name=“parse” >true</param>
</result>
与<result>/success.jsp</result>默认情况下是等效的。
说明:
A、location参数用于指定action执行完毕后要转向的目标资源,parse属性是一个布尔类型的值,
  如果为true,则解析location参数中的OGNL表达式;如果为false,则不解析。parse属性的默
  认值就是true.location参数是默认的参数,在所有的Result实现类中,都定义了一个字符串
  类型的DEFAULT_PARAM静态常量,专门用于指定默认的参数名。 
  DEFAULT_PARAM常量的定义:public static final String DEFAULT_PARAM=“location”;
B、在设置location参数时,可以在参数值中使用OGNL表达式。(<param name=“location” >/viewNews.jsp?id=${id}</param>)
关于中文乱码:String username = URLEncoder.encode("张三","utf-8");//先进行编码
III、传参方式(重点):
如需在jsp页面赋值;
*<%@ page contentType="text/html;charset=UTF-8" language="java" %>  
*<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  同时需要导入jstl的jar包(1)

<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
1.普通的传值方式(Action类中要写非常多的属性以及对应的get/set方法,必然是封装一个JavaBean,则会采用第2种方式)
在Action类中通过get/set方法进行前台参数值的获取,同时实体类中的属性名和input中的name值必须保持一致
jsp页面取值采用${属性名}
2.DomainModel传值
首先创建实体类JavaBean,但input中的name值必须为对象.属性名进行设置
然后用实际的Action类去继承ActionSupport类(com.opensymphony.xwork2.ActionSupport),
可进行实体类显示实例化,进行对象属性打印输出便于测试,但
实际上User类不需要显式的实例化,struts会自动帮你实例化,但前提条件是,传值时需要使用对象.参数名的方式进行传递
jsp 页面取值采用${对象名.属性名}
3.ModelDriven传值
依然要创建User的JavaBean,
然后用实际的Action类去实现ModelDriven<实体类名>接口(com.opensymphony.xwork2.ModelDriven)
重写public  实体类名  getModel(){}  方法
这种方式可以不用在Action类中编写对应的get/set方法,但是需要实例化User类(可采用单例模式)
jsp 页面取值采用${属性名}
Tip:可以去ValueStack当中观察参数的存储,更透彻的理解Struts2的参数传递。
原创粉丝点击