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的优缺点
优点
- 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
- 丰富的标签库,大大提高了开发的效率。
- Struts2提供丰富的拦截器实现。
- 通过配置文件,就可以掌握整个系统各个部分之间的关系。
- 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。
- Struts2的可扩展性高。
- 面向切面编程的思想在Strut2中也有了很好的体现。
缺点
- Struts2中Action中取得从jsp中传过来的参数时还是有点麻烦。
- 校验还是感觉比较繁琐,感觉太烦乱,也太细化了,如果校验出错的只能给用户提示一些信息。
- 安全性有待提高。
优缺点来自这里
拦截器和过滤器
过滤器(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的功能。
另外,继续学习,如果文中有错误请多多指教。