Struts2学习教程之入门小白的开始基础

 更新时间:2018年04月27日 11:06:34   作者:bgzyy  
struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。下面这篇文章主要给各位想要学习Struts2的小白们详细介绍了关于Struts2入门的一些开始基础,需要的朋友可以参考下

Struts2 概述:

Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性的验证,统一的布局,国际化等,既然有 Struts2 那么肯定有 Struts1,但是从本质上讲 Struts2 不是从 Struts1 扩展而来的,更应该说是一种换了品牌标签的 WebWork 更合适。

struts1 VS struts2

  • struts1 里使用 ActionServlet 作为控制器,Struts2 使用过滤器作为控制器
  • Struts1 中每个 HTML 表单都对应一个 ActionForm 实例,Struts2 中 HTML 表单将被直接映射到一个 POJO
  • Struts1 的验证逻辑编写在 ActionForm 中,Struts2 中的验证逻辑编写在 Action 中
  • Struts1 中 Action 类必须继承 org.apache.struts.action.Action 类,Struts2 中任何一个 POJO 都可以是一个 Action 类
  • Struts2 在页面里使用 OGNL 来显示各种对象模型,可以不再使用 EL 和 JSTL

Struts2 环境搭建

新建 Model,并勾选 Struts2 ,之后选择 Struts2 所要使用的 library,你可以直接在新建页面中选择 Download 进行下载,也可以提前下载好 Struts2 所需要的 jar 包自己构建(这里我选择自己构建的 library)

http://struts.apache.org/download.cgi#struts2516 在此页面可以选择自己所要使用 Struts2 版本,同样大家也可以在脚本之家进行本地下载:https://www.jb51.net/softs/539810.html

点击下一步之后为自己的 struts2 项目命名(在命名的时候建议在第二栏 Content Root 的路径后改名,若在第一栏中更改只是更改第一栏的,其余两栏不会被更改)

点击 Finish 完成 Struts2 项目的创建,所创建的项目如下

IDEA VS Eclipse

  • 若我们使用 Eclipse 去创建 Struts2 项目则需要在下载的 Struts2 包中已有的项目中去拷贝 struts2 文件的格式和 web.xml 文件的配置;IDEA 会为我们自动构建好
  • web.xml 文件在 struts2 包下的 struts\apps\struts2-blank1\WEB-INF\web.xml
  • struts.xml 文件在 struts2 包下的 struts\apps\struts2-blank\WEB-INF\classes,将其创建于 src 目录下

Struts2 HelloWorld

  搭建好 Struts2 的开发环境之后我们开始第一个 Struts2 程序的编写,其要求为在一个表单中输入用户的基本信息点击提交后跳转到另一个页面显示用户所输入的信息,在没有学习 Struts2 之前这对于我们来说非常简单,仅需要将页面请求发送到 Servet 中响应请求到另一个页面,使用 EL 和 JSTL 将信息显示即可。对于 Struts2 这当然也算是一个 HelloWorld,我们将借此实例开始 Struts2 各方面的知识讲解。

在 index.jsp 中编写页面代码,供用户输入基本信息,如下:

依据表单 name 属性编写实体类,并创建 getXxx 和 setXxx 方法,Customer.java

在 struts.xml 文件中编写代码处理 struts2 请求

返回显示页面 show.jsp

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="helloWorld" extends="struts-default">
<action name="input" class="com.struts2.hello.test.Customer" method="print">
<result name="print">/show.jsp</result>
</action>
</package>
</struts>

Customer.java

package com.struts2.hello.test;

/**
* Created by shkstart on 2018/03/24.
*/
public class Customer {
private String userName;
private String email;
private String address;

/*
* getXxx() setXxx() 方法
**/
public String print() {
System.out.println(new Customer());
return "print";
}

@Override
public String toString() {
return "Customer{" +
"userName='" + userName + '\'' +
", email='" + email + '\'' +
", address='" + address + '\'' +
'}';
}
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Input</title>
</head>
<body>
<table>
<form action="input.action" method="post">
<tr>
<td>UserName</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>Address</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td><input type="submit" value="Submit"></td>
</tr>
</form>
</table>
</body>
</html>

show.jsp(只展示 Body 标签内容)

UserName: ${userName}<br>
Email: ${email}<br>
Address: ${address}<br>

代码详解

Customer.java 中成员变量和 index.jsp 中的属性一一对应,不忽略大小写;

show.jsp 中用于显示的和 Customer.java 中的成员变量一致,否则无法显示

index.jsp 中的 form 表单 action 值应该设置为struts.xml 文件中的 action 的name 属性

struts.xml 文件中的 action 节点的 method 属性应 Custome.java 中的 String print() 方法,result 节点的 name 属性为

String print() 方法的返回值

result 节点的值为处理了该 struts2 请求后所响应的页面

   对于 show.jsp 页面的显示我们在后面会详细讲解有关知识,至此我们 Struts2 的 HelloWorld 就到这里,我相信和我一样的小白跟着做下去应该不会出什么大的差错!!

struts.xml 文件节点

package 属性 --- struts2 使用 package 来组织模块

  • name 属性为必须的,用于其他包应用当前包;
  • extends 表示当前包所继承的包,即可以继承其中所有的配置,通常为 struts-default;
  • nameSpace默认值为 /,当设置此属性的时候应在 URL中的 servletPath 前加上所设置的值

action 属性 --- 一个 struts2 请求就是一个 action

  • result (action 的子标签)标签体表示响应结果
  • name 对应 struts2 请求的名字,不包含扩展名(扩展民默认为 .action);
  • class 为该 struts2 请求将要去的类的全类名;
  • method 为所要去执行的该类的方法,该方法返回值必须为 String,且需要和 result 节点的 name 属性一致
  • result 的 name 属性值默认为 SUCCESS,class 默认属性为 ActionSupport,method 默认值为 execute

一个 action 可以有多个 result 子节点,多个 result 子节点使用 name 属性区分

result 节点的 type 属性默认为 dispatcher(转发),表示结果的响应类型

Action VS action

  • 在此案例中 Customer.java 就是 struts2 中所说的 Action 类,index.jsp 发送的请求为一个 action 请求;
  • action 代表一个 struts2 请求,Action 类代表能够处理该 struts2 请求的类
  • Action 类的成员变量必须遵循与 JavaBean 属性名相同的命名规则,属性的类型可以是任意类型,需与表单的 name 属性相同
  • 至少有一个供 struts2 执行这个 action 请求时所要调用的方法
  • 同一个 Action 也可以包含多个 action 方法
  • Action 类必须有一个无参的构造器,因为会用到反射赋值

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 深入理解java的异常情况

    深入理解java的异常情况

    在本篇文章里小编给大家分享了关于Java的异常类型的相关知识点内容,有需要的朋友们跟着学习下,希望能够给你带来帮助
    2021-09-09
  • Java 自定义注解及利用反射读取注解的实例

    Java 自定义注解及利用反射读取注解的实例

    下面小编就为大家带来一篇Java 自定义注解及利用反射读取注解的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringBoot使用JSP作为视图模板的方法

    SpringBoot使用JSP作为视图模板的方法

    这篇文章主要介绍了SpringBoot使用JSP作为视图模板的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java的Hibernate框架中的组合映射学习教程

    Java的Hibernate框架中的组合映射学习教程

    组合映射即是指主对象和子对象关联且拥有相同的生命周期的映射关系,这里我们将举一些数据操作的实例,来讲解Java的Hibernate框架中的组合映射学习教程
    2016-07-07
  • mybatis拦截器无法注入spring bean的问题解决

    mybatis拦截器无法注入spring bean的问题解决

    本文主要介绍了mybatis拦截器无法注入spring bean的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • 使用JWT创建解析令牌及RSA非对称加密详解

    使用JWT创建解析令牌及RSA非对称加密详解

    这篇文章主要介绍了JWT创建解析令牌及RSA非对称加密详解,JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌,一种情况是webapi,类似之前的阿里云播放凭证的功能,另一种情况是多web服务器下实现无状态分布式身份验证,需要的朋友可以参考下
    2023-11-11
  • IDEA Spring Boot 自动化构建+部署的实现

    IDEA Spring Boot 自动化构建+部署的实现

    这篇文章主要介绍了IDEA Spring Boot 自动化构建+部署的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • SpringBoot+Vue项目部署实现传统方式

    SpringBoot+Vue项目部署实现传统方式

    我们在进行前后端分离开发的时候,一般是将前端项目部署到nginx服务器上,与后端项目分开部署,这篇文章主要给大家介绍了关于SpringBoot+Vue项目部署实现传统方式的相关资料,需要的朋友可以参考下
    2024-01-01
  • Logback动态修改日志级别的方法

    Logback动态修改日志级别的方法

    这篇文章主要介绍了Logback动态修改日志级别的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java加密解密工具(适用于JavaSE/JavaEE/Android)

    Java加密解密工具(适用于JavaSE/JavaEE/Android)

    这篇文章主要介绍了Java加密解密工具,适用于JavaSE/JavaEE/Android,感兴趣的小伙伴们可以参考一下
    2016-04-04

最新评论