Struts 学习笔记1

1.建立一个名为struts2web project

 

2.需要引入的包:

    commons-fileupload-1.2.2.jar

    commons-io-2.0.1.jar

    commons-logging-1.1.1.jar

    ognl-3.0.1.jar

    struts2-core-2.2.3.jar

    xwork-core-2.2.3.jar

    -----------------struts2.0要求导入的包,除此以外还要添加以下的包:

    freemarker-2.3.16.jar

    javassist-3.11.0.GA.jar

    commons-lang-2.5.jar

 

    将这些包直接复制到WebRoot/WEB-INF/lib目录下即可,Myeclipse会自动将这些包添加到class path里。

3.新建一个login.jsp

1)修改web.xml, 配置filterorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter),即配置struts过滤器。

配置如下:

<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)添加struts本身的配置文件,在src下建下个struts.xml的文件; struts真正读取的文件是WEB-INF/classes/目录下的struts.xml文件,而当修改了src目录下的struts.xml文件后,MyEclipse会自动src目录下的struts.xml文件拷贝一份到WEB-INF/classes目录下。

 

3)添加struts.xmldtd验证,打开struts-2.2.3-all.zip\struts-2.2.3\apps目录下的 struts2-blank.war\WEB-INF\src\java目录下的struts.xml文件,拷贝dtd那一部分到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>

<package name="struts2" extends="struts-default">

<action name="login" class="com.struts2.LoginAction">

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

</action>

</package>

</struts>

 

4)src目录下建一个包:com.struts2,并在包中建一个类:LoginAction.java,并编辑,如下:

package com.struts2;

public class LoginAction {

private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String execute()

{

return "success";

}

}

5)再修改login.jsp ,如下:

<body>

<form action="login" class="com.struts2.LoginAction">

username:<input type="text" name="username"><br>

password:<input type="password" name="password"><br>

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

</form>

</body>

 

然后再在webRoot目录一添加一个result.jsp页面,编辑如下:

<body>

username: ${requestScope.username }<br>

username: ${username }<br>

username: ${param.username }<br>

<!-- 注意这一种取值方式与上面两种之间的差别,上面两种的取值方式相同 -->

password: ${requestScope.password }<br>

</body>

4.tomcat中添加此应用

struts2项目添加到tomcat应用中,修改Tomcat 6.0\conf目录下的server.xml文件

<server>

............

<Context path="/struts2" docBase="F:\workspace6.5\struts2\WebRoot" reloadable="true"/>

</Host>

</Engine>

</Service>

</Server>

 

关联jar包的源文件 给某一个jar包关联源代码,在工程上点右键 -> builder path -> libaries -> 点开那个指定的包,

选择 Source attachment ,然后再选择Edit,择中源文件所在的文件夹即可。

 

根据源文件生成chm帮助文档

根据源代码,生在struts的帮助文档

1.新建一个struts_docjava project,然后将需要生在doc文件的源文件复制到src目录下,并引入相对应的依赖包

build path中。

2.MyEclipse中选择project -> generate javadoc -> 选中struts_doc工程,并指定目标文件夹 -> 下一步,并给

document取一个title -> next -> finish 3.然后将jd2chm.exe拷贝到刚生成的帮助文档文件夹当中即可。

 

Struts2中类型转换

1.Struts2 的类型转换,对于 8 个原生数据类型以及 DateString 等常见类型,Struts2可以使用内建的类型转换器实现自动的转换;但对于自定义的对象类型来说,就需要我们自己指定类型转换的方式了。

 

2. 对于自定义的类型转换器来说需要提供 3个信息:Action的名字、Action 中待转换的属性名以及该属性对应的类型转换器。其中Action的名字是通过属性文件名来获得的、 Action中待转换的属性名是通过属性文件中的 key来获得的,该属性对应的类型转换器是通过该key所对应的 value来获得的。

例:

<body>

<h1>使用分号隔开用户名与密码信息</h1>

<form action="userAction.action">

    user info:<input type="text" name="user"><br>

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

</form>

</body>

user.java

package com.bean;

public class User {

    private String username;

    private String password;

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

}

        <action name="userAction" class="com.struts2.UserAction">

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

        </action>

编辑userAction.java:

package com.struts2;

 

import com.bean.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport

{

    private User user;

    public User getUser()

    {

        return user;

    }

        public void setUser(User user)

    {

        this.user=user;

    }

    

    @Override

    public String execute() throws Exception {

        System.out.println("username:"+user.getUsername());

        System.out.println("password:"+user.getPassword());

        return SUCCESS;    //SUCCESSActionSupport中的一个常量

    }

}

新建一个com.converter的包,并在包在添加一个类UserConverter,编辑如下:

UserConverter.java

package com.converter;

 

import java.util.Map;

import java.util.StringTokenizer;

 

import com.bean.User;

 

import ognl.DefaultTypeConverter;

 

public class UserConverter extends DefaultTypeConverter

{

    @Override

    public Object convertValue(Map context, Object value, Class toType)

    {

        if(User.class==toType)    //从页面向后台对象转换

        {

            String[] str=(String[])value;

            String firstValue=str[0];

            StringTokenizer st=new StringTokenizer(firstValue,";");    

            

            String username=st.nextToken();

            String password=st.nextToken();

            

            User user=new User();

            

            user.setUsername(username);

            user.setPassword(password);

            

            return user;

        }

        else if(String.class==toType)    //从后台对象向页面转换

        {

            User user=(User)value;

            

            String username=user.getUsername();

            String password=user.getPassword();

            

            String userInfo="username:"+username+", password:"+password;

            return userInfo;

        }

        return null;

    }

}

然后在com.struts2包中建立一个UserAction-conversion.properties文件,并编辑:

user=com.converter.UserConverter

重新启动tomcat,测试。

Output.jsp

<body>

<s:property value="user"/><!-- 获得UserAction当中的user属性 -->

</body>

 

3. 可以使用 Struts2 框架自带的类型转换器 StrutsTypeConverter 简化类 StrutsTypeConverter DefaultTypeConverter convertFromStringconvertToString,分别表示从页面的字符串转换为后台对象以及从后台对象转换为页面的字符串,我们只需实现这两个抽象方法即可实现类型转换。

例:

com.converter包下再新建一个UserConverter2类,并继承StrutsTypeConverter,编辑:

package com.converter;

import java.util.Map;

import java.util.StringTokenizer;

import org.apache.struts2.util.StrutsTypeConverter;

import com.bean.User;

public class UserConverter2 extends StrutsTypeConverter {

    @Override

    public Object convertFromString(Map context, String[] values, Class toClass) {

        User user=new User();

        String value=values[0];

        StringTokenizer st=new StringTokenizer(value,";");

        user.setUsername(st.nextToken());

        return user;

    }

    @Override

    public String convertToString(Map context, Object o) {

        User user=(User)o;

        String username=user.getUsername();

        String password=user.getPassword();

        String userInfo="username:"+username+",password:"+password;

        return userInfo;

    }

}

并修改UserAction-Converter.properties,如下:

#user=com.converter.UserConverter

user=com.converter.UserConverter2

重启tomcat,测试。

效果图:

输入用户信息

 

显示结果图

文件结构图:

 

批量的类型转换

Usertest.jsp

<body>

<h1>使用分号隔开用户名与密码信息</h1>

<form action="usersAction.action">

    user info1:<input type="text" name="users"><br>

    user info2:<input type="text" name="users"><br>

    user info3:<input type="text" name="users"><br>

    user info4:<input type="text" name="users"><br>

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

</form>

</body>

usersAction.java

package com.struts2;

import java.util.ArrayList;

import java.util.List;

import com.bean.User;

import com.opensymphony.xwork2.ActionSupport;

public class UsersAction extends ActionSupport

{

    private List<User> users;

 

    public List<User> getUsers() {

        return users;

    }

 

    public void setUsers(List<User> users) {

        this.users = users;

    }

    @Override

    public String execute() throws Exception {

        for(User u:users)

        {

            System.out.println(u.getUsername()+", "+u.getPassword());

        }

        return SUCCESS;

    }

}

UsersConverter.java

package com.converter;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.StringTokenizer;

import org.apache.struts2.util.StrutsTypeConverter;

import com.bean.User;

public class UsersConverter extends StrutsTypeConverter

{

    @Override

    public Object convertFromString(Map context, String[] values, Class toClass) {

        List<User> list=new ArrayList<User>();

        

        for(String value:values)

        {

            StringTokenizer st=new StringTokenizer(value,";");

            User user=new User();

            user.setUsername(st.nextToken());

            user.setPassword(st.nextToken());

            list.add(user);

        }

        return list;

    }

 

    @Override

    public String convertToString(Map context, Object o) {

        List<User> list=(List<User>)o;

        StringBuffer buffer=new StringBuffer();

        for(User user : list)

        {

            String username=user.getUsername();

            String password=user.getPassword();

            buffer.append("username:").append(username)

                .append(" password:").append(password).append(" ");

        }

        return buffer.toString();

    }

}

 

UsersAction-Converter.properties

users=com.converter.UsersConverter

output.jsp

<body>

<s:property value="user"/><!-- 获得UserAction当中的user属性 -->

<s:property value="users"/><!-- 获得UsersAction当中的users属性 -->

</body>

重启tomcat,测试结果如下图:

输入多个用户信息

 

输出结果

 

全局类型转换

全局类型转换。在src目录下新建xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即 com.shengsiyuan.bean.User=com.shengsiyuan.converter.UserConverter2

这样设置之后,对所有的action中的User对象自动调用UserConverter2全局对象。

posted @ 2012-01-05 10:25  维唯为为  阅读(368)  评论(0编辑  收藏  举报