Java Web入门之Struts2和MVC基础的详解及实战

简介: Java Web入门之Struts2和MVC基础的详解及实战

前言


Struts2是一个非常出色的MVC框架 它得到的广大程序开发人员的认可


一、理解MVC原理


MVC(Model-View-Controller) 模式-视图-控制器 是一种程序设计理念 目前在Java Web应用方面MVC框架有很多 常见的流行框架有Struts JSF Tapestry Spring MVC等等 在这些框架中Struts框架的应用最为广泛


1:控制器


使用中央控制器ActionServlet充当控制层 将请求分发信息 配置在struts.cfg.xml中 当客户端发送一个HTTP请求时 将由Struts的中央控制器对请求进行分发处理 在处理之后返回ActionForward对象 将请求转发到指定的JSP页面 也客户端进行回应


2:模型


模型层主要由Struts中的ActionFrom及业务JavaBean实现 其中ActionForm对象对表单数据进行封装 它能够与网页表单进行交互并传递数据 业务JavaBean用于处理真正的业务请求 由Action进行调用


3:视图


视图主要指用户看到并与之交互的界面 即Java Web应用程序的外观


二、Action对象


Action对象是Struts2框架中的重要对象 它主要用于对HTTP请求进行处理 在Struts2 API中 Action对象是一个接口 它位于com.opensymphony.xwork2包中 在Struts2项目开发中 创建Action对象都要直接或者间接实现此对象  声明代码如下

public interface Action{
 public static final String SUCCESS="success";
 public static final String NONE="none";
 public static final String ERROR="error";
 public static final String INPUT="input";
 public static final String LOGIN="login";
 public String execute()throws Exception;
}


SUCCESS:Action执行成功时的返回值


NONE:也是Action执行成功的返回值 但不需要返回到成功页面


ERROR:Action执行失败时的返回值


INPUT:代表需要返回到某个输入信息的页面的返回值


LOGIN:代表需要用户登录的返回值


Action的基本流程

当浏览器向Web容器发送一个HTTP请求时 Web容器就要调用Struts2过滤器的doFilter()方法 此时Struts2就接受到了HTTP请求,通过Struts2的内部处理机制 它会判断整个HTTP请求是否与某个Action对象相匹配 如果找到了与整个HTTP请求匹配的Action 就会调用Action对象的execute()方法。并根据处理结果返回相应的值,然后Struts2就会通过Action的返回值找返回值所映射的页面  最后通过一定的视图回应给浏览器


流程时序图如下

1666441128026.jpg

动态Action

动态Action时通过请求Action对象中的一个具体的方法来实现动态操作的,其具体的操作方式是:


在请求Action的URL地址后方加上请求字符串(方法名称) 与Action对象中的方法进行匹配 需要注意的是 Action地址与请求字符串之间需要以!进行分割

/userAction!add
/userAction!update


三:Struts2的配置文件


1:Struts2的包配置


在struts.xml文件中存放一个包的概念 它类似于Java中的包 配置文件struts.xml中的包使用<package>元素声明 主要用于放置一些项目中的相关配置 可以理解成配置文件中的一个逻辑单元 已经配置好的包可以被其他包继承 从而提高配置文件的重用性

<struts>
 <!--声明包-->
<package name="user" extends="struts-default" namespace="/user">
  ......
</package>
</struts>


2:名称空间配置


在Java Web开发中 Web文件目录通常以模块进行划分 在Struts2配置文件提供了名称空间的功能,用于指定一个Action对象的访问路径,它的使用方法是通过在配置文件struts.xml的包声明中


使用namespace属性进行声明

<struts> 
<!--声明包-->
<package name="book" extends="struts-default" namespace="/bookmanager">
 ...
</package>
</struts>


3:Action相关配置


Struts2框架中的Action对象是一个控制器的对象 Struts2框架通过Action对象处理HTTP请求,其请求地址映射需要配置在sturts.xml文件中 它的配置方法使用<action>元素进行配置

<action name="userAction" class="com.lyq.action.UserAction" method="save">
 <result>success.jsp</result>
</action>


4:通配符实现简化配置


通过一定的命名约定 使用通配符来配置Action对象 从而达到一种简化配置的效果 主要有以下两个


* 匹配0或多个字符


\ 是一个转义字符 如需要匹配 \ 则使用\ /进行匹配


5:返回结果的配置


在MVC的设计思想中 业务逻辑处理需要返回一个视图View Struts2框架中通过Action结果映射配置返回视图


在配置文件struts.xml中 结果映射使用<result>元素进行映射

<action name="user" class="com.lyq.action.UserAction">
 <result>/user/Result.jsp</result>
 <result name="error">/user/Error.jsp</result>
 <result name="input" type="dispatcher">/user/Input.jsp</result>
</action>


相关文章
|
2月前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
45 3
|
3月前
|
前端开发 JavaScript Python
Python Web应用中的WebSocket实战:前后端分离时代的实时数据交换
在前后端分离的Web应用开发模式中,如何实现前后端之间的实时数据交换成为了一个重要议题。传统的轮询或长轮询方式在实时性、资源消耗和服务器压力方面存在明显不足,而WebSocket技术的出现则为这一问题提供了优雅的解决方案。本文将通过实战案例,详细介绍如何在Python Web应用中运用WebSocket技术,实现前后端之间的实时数据交换。
119 0
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
60 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
18天前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
|
20天前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
207 45
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
60 1
|
2月前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
81 1
|
2月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
74 2