struts怎么进行数据交互?struts文件如何上传?

Struts是一个开源框架,主要就是实现了MVC设计模式,使用此框架能够提高程序的规范,开发效率也会得到提高,那struts怎么进行数据交互?下面来我们就来给大家讲解一下。

我们可以在服务器端的Java类中直接声明一个和前台发送数据的同名变量即可,然后生成它的set/get方法即可以实现前后台数据的交互。

假如我们在前台页面中的表单如下:

<form method="post" action="demo!register.action">
    username:<input type="text" name="username"><br />
    password:<input type="password" name="password"><br />
    <input type="submit" value="注册">
</form>

在服务器端的Java类中我们直接声明私有的同名变量就可以获取到前台发送到服务器端的参数

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;
}

set/get方法不需要们自己写可以通过右键Java类——>Source——>Generate Getter And Setter来自动生成

通过这种方式我们就可以实现数据的交互,在使用过程我们要注意

1.在Java类中声明的变量名称要和前台发送数据的名称互相对应

2.在Struts2中方法不要带有参数

3.在前台数据访问服务器是通过set方法来实现数据的获取,服务器通过get方法向前台页面返回数据,数据返回前台之后我们可以通过EL表达式来同名获取

一个完整示例

index.html内容如下:

<form method="post" action="demo!register.action">
    username:<input type="text" name="username"><br />
    password:<input type="password" name="password"><br />
    <input type="submit" value="注册">
</form>

新建一个success.jsp内容如下:

hello ${username} your password is ${password}.

struts.xml内容如下:

<package name="demo" extends="struts-default">
    <action name="demo" class="Action.Handler">
        <result name="success">success.jsp</result>
    </action>
</package>

新建包,包名Action在包中新建Java类,类名Handler,总之Java文件要和struts.xml中action的class互相对应。Handler.java如下:

private String username;
private String password;
public String register() throws Exception
{
    return "success";
}
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;
}

register方法中return的"success"通过struts.xml配置可以知道显示success.jsp页面,在页面中我们EL表达式显示我们输入的信息。

struts文件如何上传?

文件上传是指将本地文件上传到服务器的指定目录下。使用 Struts2 框架进行文件上传时,首先需要对 form 表单进行设置,将其 enctype 属性设置为 multipart/form-data,method 属性设置为 post,并在 标签中使用 标签作为文件选择框上传文件。

文件上传页面的示例代码如下所示:

<s:form action ="xxx" method ="post" enctype = "Multipart/form-data">
    <s:file name ="xxx" label = "xxx" />
    <s:submit value ="上传"/>
</s:form>

在上述代码中, 标签的 action 属性用于指定表单提交时对应的 action 方法,method 属性用于指定表单的提交方式(包括 GET 和 POST 两种提交方式,默认提交方式是 GET),而 enctype 属性的取值决定了表单数据的编码方式。通常 enctype 属性有三个属性值,具体如下。

1)application/x-www-form-urlencoded

该值为默认的编码方式,它只处理表单域中的 value 属性,采用这种编码方式的表单会将表单域的值处理成 URL 编码方式。这种编码方式按 ISO-8859-1 的编码方式将表单上传到服务器,只是此种编码方式上传不了文件。

2)multipart/form-data

这种编码方式会以二进制流的方式处理表单数据,并且它会把文件域指定文件的内容也封装到请求参数中。在进行文件上传时,采用的就是此种方式。

3)text/plain

主要作用是直接通过表单发送邮件,目前已不再采用。

设置完 form 表单后,还需要在 Action 类中编写相应的代码。文件上传 Action 类的示例代码如下所示:

public class FileUploadAction extends ActionSupport
{
    private File xxx; // 用户上传的文件
    private String xxxContentType; //上传文件的类型
    private String xxxFileName; //上传文件的名称
    //此处省略三个属性的getter和setter方法
    public String execute() throws Exception
    {
        //此处省略具体执行的方法
        return SUCCESS;
    }
}

在上述代码中,包括三个类型的属性,具体如下。

File 类型的属性 xxx:该属性用于指定上传文件的内容。这里将该属性假设指定为 xxx。

String 类型的属性 xxxFileName:该属性名称必须为 xxxFileName,其中 xxx 表示 File 类型的属性名称,该属性用于指定上传文件名。

String 类型的属性 xxxContentType:该属性名称必须为 xxxContentType,其中 xxx 表示 File 类型的属性名称,该属性用于指定上传文件的文件类型。

需要注意的是,上述代码中的 xxx 指 JSP 页面中 file 标签的名字。

最后,在 struts.xml 中需要对 Action 进行配置,其配置方式与其他 Action 的配置相似,只是一般要在 Action 的配置中加入文件过滤拦截器 fileUpload。fileUpload 拦截器在 struts-default 中已经配置,使用时需要重新配置。struts.xml 配置信息的示例代码如下所示:

<package name="struts2" extends="struts-default" namespace="/" >
    <action name="xxx" class="com.mengma.xxx">
        <result name="success">/result.jsp</result><!--返回结果-->
        <interceptor-ref name="defaultStack"><!--引用拦截器-->
            <param name="maximumSize">4194304</param><!-- 设置每一个action允许的上传文件的大小 -->
            <param name="allowedExtensions">bmp,txt</param><!-- 设置上传文件允许的后缀名,多个使用逗号分开 -->
            <param name="fileUpload.allowedTypes">
                    text/plain,application/msword,image/jpeg
            </param><!--设置上传允许的文件的mimeType类型,多个使用逗号分开-->
        </interceptor-ref>
    </action>
</package>

在上述配置代码中,使用了 fileUpload 的 maximumSize、allowedExtension 和 allowedTypes 三个参数,分别对上传文件进行了限制。

其中 maximumSize 用于指定允许上传文件的文件大小,单位是字节;allowedExtension 用于指定上传文件的扩展名;allowedTypes 用于指定允许上传文件的类型,当有多个文件类型时,用逗号隔开即可。

按照这样的方法就可以进行struts文件上传,但是在上传文件的时候,也要注意文件的大小哦!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java线程池面试题有哪些?java线程池常见面试题

java写excel文件后缀名不对怎么解决?java如何导入excel?

springmvc如何工作?springmvc工作流程图