怎样在eclipse中添加struts框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在eclipse中添加struts框架相关的知识,希望对你有一定的参考价值。

步骤如下:

一、下载struts包

百度直接搜“struts2”,进入Apache官网下载,此处下载的是struts-2.3.20-all.zip。


二、新建web项目

打开Eclipse新建一个Dynamic Web Project,项目名为:struts2。


三、向Web项目中添加struts2框架

1、解压struts-2.3.20-all.zip,在lib文件加下找到以下jar文件:

commons-fileupload-1.3.1.jar

commons-io-2.2.jar

commons-lang3-3.2.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

ognl-3.0.6.jar

struts2-core-2.3.20.jar

xwork-core-2.3.20.jar


2、把以上文件,复制粘贴到第二步新建的Web项目下的WebContent/WEB-INF/lib路径下。


3、修改WebContent/WEB-INF路径下的web文件:

<?xml version="1.0"encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>struts 2</display-name>
 <welcome-file-list>
   <welcome-file>index.html</welcome-file>
   <welcome-file>index.htm</welcome-file>
   <welcome-file>index.jsp</welcome-file>
   <welcome-file>default.html</welcome-file>
   <welcome-file>default.htm</welcome-file>
   <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>
 
 <!-- 以下是添加struts2框架 -->
 <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>
</web-app>


四、建立struts2项目文件

         1、在项目中的JavaResources/src路径下新建RegisterCheck.java跟RegisterAction.java文件(属于com.struts2包):

RegisterCheck.java代码:

package com.struts2;
 
publicclassRegisterCheck

    publicboolean check(String psd,String repsd)
    
        if (psd.equals(repsd))
        
            returntrue;
        
        else
        
            returnfalse;
        
    


RegisterAction.java代码:

package com.struts2;
 
publicclassRegisterAction

    private String usernaem;
    private String psd;
    private String repsd;
    public String getUsernaem()
    
        returnusernaem;
    
    publicvoid setUsernaem(Stringusernaem)
    
        this.usernaem = usernaem;
    
    public String getPsd()
    
        returnpsd;
    
    publicvoid setPsd(String psd)
    
        this.psd = psd;
    
    public String getRepsd()
    
        returnrepsd;
    
    publicvoid setRepsd(String repsd)
    
        this.repsd = repsd;
    
    
    public String execute() throws Exception
    
        RegisterCheckrc=newRegisterCheck();
        if (rc.check(getPsd(),getRepsd()))
        
            return"success";
        
        else
        
            return"failure";
        
    


2、在项目中的JavaResources/src路径下新建一个struts.xml文件,并在此文件中对项目的Action进行配置:

struts.xml文件内容:

<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="struts2" extends="struts-default">
        <action name="register" class="com.struts2.RegisterAction">
            <result name="success">/success.jsp</result>
            <result name="failure">/failure.jsp</result>
        </action>
    </package>
</struts>


3、在项目下的WebContent目录下新建register.jsp、success.jsp和failure.jsp文件:

register.jsp代码:

<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
    <form action="register" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="psd"><br>
        确认密码:<input type="password" name="repsd"><br>
        <input type="submit" value="提交">
        <input type="reset">
    </form>
</center>
</body>
</html>


success.jsp代码:

<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
    <h1>注册成功</h1>
</center>
</body>
</html>


failure.jsp代码:

<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
    <h1>注册失败</h1>
</center>
</body>
</html>


五、运行Web项目

         部署好web项目后,在浏览器输入“http://localhost:8080/struts2/register.jsp”,即可运行项目,输入数据测试是否配置好。

参考技术A 1.框架搭建
1.1 将struts2中的jar文件导入到项目中
commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,freemarker-2.3.15.jar,ognl-2.7.3.jar
struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar
1.2 将struts.xml文件拷贝到项目的src目录下
1.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>
2.action中方法的调用方式
2.1 自动方法调用(只能调用execute)
2.2 指定方法调用(通过设置action标签中的method属性)
2.3 动态方法调用(在调用时,在action后加!方法名称,如:login!deletUser)
注意:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
2.4 通配符调用
3. action接收客户端参数的方式
3.1 直接在action中定义参数变量,并生成set和get方法
3.2 定义接收参数的类
注意:都要为action的成员变量提供get和set方法
3.3 让action实现ModelDriven接口,并实现里面的getModel方法
4.获取request,session,application的方式
4.1 用ActionContext获取,实际上获取到的都是Map对象
4.2 用ServletActionContext获取,获取到的是基于Servlet API的对象
4.3 让action实现RequestAware,SessionAware,ApplicationAware接口,并实现里面的方法
5.四种转向
5.1 action转发到页面(默认)
5.2 action重定向到页面 <result type="redirect">
5.3 action转发到action <result type="chain">
<param name="actionName">login</param>
<param name="nameSpace">/login</param>
<param name="method">login</param>
</result>
5.4 action重定向到action <result type="redirectAction">login</result>
参考技术B 直接将struts需要的jar包放到WEbRoot下的WEB-INF下面的lib包,并加进去就可以了。本回答被提问者采纳 参考技术C 1添加Struts1
选中项目,右键--->MyEclipse-->Add Struts Catabilities就行了
2添加Struts2
将Struts2的jar包拷贝包WEB-INF下的lib目录就行了
参考技术D eclipse——help——SoftWareUpdates 运行向导添加、

基于初学者Struts框架

---恢复内容开始---

Struts相关知识点

    Struts是什么?   是基于MVC模式的web应用框架,它本质上相当于一个servlet

Struts的配置

     在eclipse中创建一个项目 然后在当前项目中WEB-INF文件夹下的lib文件中导入有关Struts的jar文件,接着在src里面创建一个struts.xml文件 在当前项目中找到Libraries→Web App Libraries点击→有一个struts2-core-2.3.24.jar文件里面有一个struts-default.xml文件点击有一下

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

这段复制到在src里面创建一个struts.xml文件中 接着写配置文件 如:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6   <package name="mypackage" extends="struts-default">
 7         <!-- 通用符 ! login!add.action * -->
 8         <action name="login*" class="com.action.LoginAction" method="{1}">
 9         <result name="success">/success.jsp</result>
10         </action>
11       </package>
12 </struts>

接着在web.xml文件里面写个过滤器,不写会在网页是报个404找不到路径的错 web.xml文件写 如图:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 3     <display-name>struts01</display-name>
 4     <welcome-file-list>
 5         <welcome-file>index.html</welcome-file>
 6         <welcome-file>index.htm</welcome-file>
 7         <welcome-file>index.jsp</welcome-file>
 8         <welcome-file>default.html</welcome-file>
 9         <welcome-file>default.htm</welcome-file>
10         <welcome-file>default.jsp</welcome-file>
11     </welcome-file-list>
12 
13     <!-过滤器->
14          <filter>
15       <filter-name>struts2</filter-name>
16 <!-Ctrl+Shift+T 输入StrutsPrepareAndExecuteFilter->
17 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
18 </filter> 18 <filter-mapping> 19 <filter-name>struts2</filter-name>
19 <url-pattern>*.action</url-pattern>
20 </filter-mapping>
21 </web-app>

 

      

知识点一

     数据封装: 属性封装    模型驱动封装   表达式封装 (注意:在一个action中不能给对同一个表单使用属性封装和模型驱动封装,如果使用只会执行模型驱动封装)

       模型驱动封装的实现步骤:

                01:创建实体类(属性名必须和表单的name属性值一致)

                02:action实现ModelDriven接口

                03:实现ModelDriven的接口的getModel方法 如:private 实体类 实体类对象名=new实体类();   public 实体类 getModel(){ return 实体类对象名;}

实体类

 1 package com.entity;
 2 
 3 public class ELogin {
 4    
 5     public ELogin(String uname, String upassword) {
 6         super();
 7         this.uname = uname;
 8         this.upassword = upassword;
 9     }
10     
11     public ELogin() {
12         super();
13         // TODO Auto-generated constructor stub
14     }
15     private String uname;
16     private String upassword;
17     
18     public String getUname() {
19         return uname;
20     }
21     public void setUname(String uname) {
22         this.uname = uname;
23     }
24     public String getUpassword() {
25         return upassword;
26     }
27     public void setUpassword(String upassword) {
28         this.upassword = upassword;
29     }
30     
31     
32 }

Action类

 

 1 public class LoginAction extends ActionSupport implements ModelDriven<ELogin> {
 2 
 3     public String admin() {
 4         System.out.println(elogin.getUname() + "_____________" + elogin.getUpassword());
 5         return NONE;
 6     }
 7     
 8     //实例化实体
 9     private ELogin elogin = new ELogin();
10 
11     /**
12      * 模型驱动封装
13      */
14     @Override
15     public ELogin getModel() {
16         // TODO Auto-generated method stub
17         return elogin;
18     }
19 
20 }

 

JSP页面

1 <body>
2    <form action="loginadmin.action" method="post">
3     用户名:<input name="uname">
4     密&nbsp;码:<input type="password" name="upassword">
5     <input type="submit" value="提交">
6   </form>
7 </body>

 

 

      表达式封装的实现步骤:

                01:在Action类中声明实体类:private 实体类 实体类对象名;

                02:生成实体类对象名的set和get的方法

                03:修改表单属性值:name="实体类对象名.属性名"(users.username)

     Action类     

package com.action;

import com.entity.ELogin;
import com.opensymphony.xwork2.ActionSupport;

public class Login2Action extends ActionSupport{
    public String admin() {
        System.out.println(elogin.getUname() + "_____________" + elogin.getUpassword());
        return NONE;
    }

    /**
     * 表达式封装
     */
    private ELogin elogin;

    public ELogin getElogin() {
        return elogin;
    }

    public void setElogin(ELogin elogin) {
        this.elogin = elogin;
    }
    
    
}

   讲了这么多肯定有人在想表达式封装和模型封装之间有什么区别 下面就讲讲它们之间的区别:   

       表达式封装和模型封装的相同点以及不同点

        相同点:简单的说都可以把数据封装到实体类中

        不同点:模型驱动封装只能够把数据封装到一个实体类中,在一个action里面只能实现一次ModelDriven的接口所以模型封装只会封装一个到一个实体类中,而表达式封装可以把数据封装到多个对象中.

 知识点二          

        OGNL表达式写法 

           说道ognl表达式,我们可能会想到El表达式,对它们都是很强的表达式语言,但是El表达式在Struts1中比较常用的,Struts2则默认使用了OGNL表达式,结合Struts2的标签库,完成了页面的数据绑定.说道这就给大家简单说说Struts1和Struts2的区别

           Struts1和Struts2的区别?

                都是MVC的WEB框架,Struts1是一个老的框架,当应用很广泛,有很好的群众基础,使用它开发风险很小,成本低,那为什么要用Struts2呢?Struts2毕竟是站在前辈的基础设计出来,它会改善Struts1中的一些缺陷,Struts1中一些问题在Struts2中能得到解决.

          回归正题 OGNL表达式的使用    先导入Struts2的标签库  <%@ taglib uri="/struts-tags" prefix="s"%>   使用标签库 <s:property value="‘haha‘.Length()"/>

 

 知识点三    值栈

         什么是值栈?

                    Struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值.

             action和servlet区别?

                    每次访问action的时候,都会创建一个新的action对象,而servlet只能有一个对象.

             怎么获取值栈的对象 如图:    

   action类

package com.action;

import java.security.KeyStore.PrivateKeyEntry;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.entity.Person;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class IndexAction extends ActionSupport{

private String name;


public String getName() {
return name;
}

@Override
public String execute() throws Exception {
// // 1 获取值栈对象
  ActionContext actionContext=ActionContext.getContext();
  //v1值栈对象 存于action对象中
  //每一次访问action就会产生一个新的action对象
  ValueStack v1=actionContext.getValueStack();
  v1.push("PUSH的值");
  v1.set("zking", "set的值");

}

}

         Jsp 页面  

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     <%@ taglib prefix="s" uri="/struts-tags" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11     <s:property value="zking"/>
12    <s:debug></s:debug> 
13 </body>
14 </html>

         值栈的结构?root 结果是list集合   context  结果是map集合

   简单讲一下struts2标签库+ognl表达式

         基础数据  <s:property value="放入的变量名"/>

             对象  <s:property value="对象名.属性名"/>(不要在属性名前面加上get或者set)

             List集合三种方法   第一种:<s:property value="集合变量名[下标].属性名"/>

                                             第二种:<s:iterator value="集合变量名">
                                                          <s:property value="集合对象的属性名"/>
                                                              </s:iterator>

                                              第三种:<s:iterator value="集合变量名" var="元素变量名">

                                                           <s:property value="#元素变量名.属性名"/>
                                                               </s:iterator>

 

 

 

 

 

---恢复内容结束---































以上是关于怎样在eclipse中添加struts框架的主要内容,如果未能解决你的问题,请参考以下文章

怎样在intellij idea 上开发struts应用

struts2 Eclipse 中集成strust2开发框架实例

基于Struts1框架的简单工程搭建

怎样使用Eclipse开发Web项目

第3章 Struts2框架--1Struts2环境搭建

Eclipse配置Struts2.x