Struts2的基本原理与实现

版权声明:本文为Banana原创文章,未经Banana允许不得转载。评论请留下你认真观看后的想法或者意见,非常感谢! https://blog.csdn.net/qq1515312832/article/details/85253488

Struts2是什么

百度说的

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

我说的

    上面这是百度写的,百度写的太啰嗦了,简单的来说,Struts2就是一个框架,它是属于web层的一个框架,是Struts1的一个升级版,但是它和Struts1来相比,提供了太多的增强和改进,怎么运行的呢,就是实现了Servlet的功能,来进行控制页面跳转
    同时这也是基于MVC设计模式的Web应用框架,Struts2的控制功能就相当于MVC中的Controller的功能,用来控制页面的转向。

为什么说Struts2实现了Servlet的功能?

因为Struts2可以理解为下图,这里介绍了前端控制器模型,形象的体现了Struts2实现了Servlet的功能
在这里插入图片描述

Struts2的优缺点

优点

  1. 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
  2. 丰富的标签库,大大提高了开发的效率。
  3. Struts2提供丰富的拦截器实现。
  4. 通过配置文件,就可以掌握整个系统各个部分之间的关系。
  5. 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。
  6. Struts2的可扩展性高。
  7. 面向切面编程的思想在Strut2中也有了很好的体现。

缺点

  1. Struts2中Action中取得从jsp中传过来的参数时还是有点麻烦。
  2. 校验还是感觉比较繁琐,感觉太烦乱,也太细化了,如果校验出错的只能给用户提示一些信息。
  3. 安全性有待提高。

优缺点来自这里

拦截器和过滤器

过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。

拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。

这里不做详细介绍,百度一下

Struts执行流程图

在这里插入图片描述
图片来自这里(这篇博客写的非常的好,强烈推荐!!)

Warning!!!

千万不要错过!!!具体详细的Struts2的详细介绍参考网站:tutorialspoint
别说英文网站我看不懂,我四级都没过的渣渣靠着翻译都没问题!!!

这个Demo可以运行的起来

在这里插入图片描述

导入jar包

在这里插入图片描述

配置Struts2核心过滤器:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.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>

编写Action类:HelloAction.java

package com.banana.struts.demo1;
/*
 * Struts2的Action类
 */
public class HelloAction {
	public String execute(){
		System.out.print("HelloAction执行了......");
		return "success";
	}
}

编写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>
	<!-- Struts2为了管理Action的配置,通过包进行管理 -->
	<!-- 配置Struts2的包 -->
	<package name="hello" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="hello" class="com.banana.struts.demo1.HelloAction">
		<!-- 页面的跳转 -->
			<result name="success">/demo1/success.jsp</result>
		</action>
	</package>
</struts>

添加页面:demo1.jsp、success.jsp

demo1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'demo1' starting page</title>
  </head>
  
  <body>
    <h1>Struts2的入门</h1>
    <h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门</a></h3>
  </body>
  
</html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>success page</title>
  </head>
  
  <body>
    跳转成功 <br>
  </body>
</html>

页面跳转逻辑

在这里插入图片描述

总结一下

其实我感觉Struts2,就是实现了页面的转向,转到该转的地方,不要转到不该转的地方,取代了Servlet的功能。
另外,继续学习,如果文中有错误请多多指教。

猜你喜欢

转载自blog.csdn.net/qq1515312832/article/details/85253488