MVC解释:
M:Model,由ActionForm和JavaBean组成,ActionForm封装请求参数,所有请求参数封装成ActionForm对象,该对象由ActionServlet转发给Action。而javabean则封装了底层的业务逻辑
V:View,视图,指jsp,html,Velocity模板或Excel 等
C:Control,指servlet控制器,struts的Controller由两部分组成:
系统核心控制器(对应ActionServlet)和业务逻辑控制器(对应Action部分),其中ActionServlet由struts提供,继承了HttpServlet,因此需要位置,负责拦截所有Htttp请求,若需要调用业务逻辑逻辑器,转发给Action,否则,转向JSP页面
MVC流程图如下:
MVC特点:
1.一个模型对应多个视图,减少代码量,易于维护
2.模型返回数据与显示逻辑分离,降低了模块之间的耦合性
struts2创建web应用程序:
要求:
1.Servlet API2.4或更高版本
2.JSP 2.0或更高版本
3.Java 7或更高版本
4.tomcat8或更高版本
搭建过程:
1.使用eclipse先创建maven应用程序:
点击next完成创建
2.eclipse添加tomcat:
参考:
https://www.baidu.com/link?url=xX2IB8AESQcQ6HovygDL67ToVuZxrToNtRT0RPhHulilTrRy3zRhZ99-s0PWeQigviYk7DwEh2oW78Et-M_v-K&wd=&eqid=a6945119000a490d000000065d070e40
3.pom文件添加版本变量和依赖:
<properties>
<struts2.version>2.5.17</struts2.version>
</properties>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
4.在src/main/resources下添加log4j2.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.opensymphony.xwork2" level="debug"/>
<Logger name="org.apache.struts2" level="debug"/>
<Root level="warn">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
在pom文件添加版本变量和依赖:
<properties>
<log4j2.version>2.11.2</log4j2.version>
</properties>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
5.添加struts2 Servlet过滤器
要让Struts2框架能够与web应用程序一起使用,需要添加Servlet过滤器和过滤映射web.xml,web.xml在src/main/webapp/WEB-INF文件夹下配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Basic Struts2</display-name>
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
6.创建struts.xml
struts可以使用xml配置文件或注释指定URL,Java类或者视图之间的关系,文件名是struts.xml,在src/main/resources下,struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="ssh" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
</package>
</struts>
如果URL结束,index.action将浏览器重定向到index.jsp
7.构建并运行应用程序:
右键项目->Run As->Run on Server,tomcat启动完成后
输入http://localhost:8080/ssh/index.action,显示如图:
应用程序启动了,好了,接下来我们就可以更加详细介绍struts的应用:
struts工作原理:
当在struts web应用中单击超链接或者提交HTML表单时,并不会发送到另一个服务器页面,而是发送到提供的Java类,这些java类称为Actions,触发Action后,Result会选择一个资源呈现相应,这些可以是jsp页面,pdf文件,Excel表格或者java小程序窗口,以最简单的hello world为例,工作流程为:
1.创建一个类来存储欢迎消息(模型)
2.创建服务器页面显示消息(视图)
3.创建Action类(控制器)控制用户、模型和视图之间的交互
4.创建一个mapping(struts.xml)来耦合Action类和视图
创建流程为:
1.在src/main/java下创建模型类MessageStore.java
//模型层
public class MessageStore {
private String message;
public MessageStore(){
this.message="Hello Struts User";
}
public String getMessage(){
return this.message;
}
}
2.创建Action控制器类
//控制层
public class HelloWorldAction extends ActionSupport{
//使用组合模式声明MessageStore模型
private MessageStore messageStore;
//创建MessageStore模型实例
public String execute(){
messageStore=new MessageStore();
return SUCCESS;
}
//返回模型实例
public MessageStore getMessageStore(){
return messageStore;
}
}
struts框架将创建HelloWorldAction 类的对象并调用excute()方法响应用户的url超链接,
3.在src/main/webapp下创建helloWorld.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!--taglib指令告诉servlet容器该页面使用struts2标签,标签前有s-->
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World!</title>
</head>
<body>
<!--s:property标签显示通过helloWorldAction控制器方法getMessageStore返回的值
该方法返回一个MessageStore对象,通过.message获得值作为value属性 -->
<h2><s:property value="messageStore.message" /></h2>
</body>
</html>
4.在struts.xml中添加Struts配置
<struts>
<constant name="struts.devMode" value="true" />
<package name="ssh" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<action name="hello" class="action.HelloWorldAction" method="execute">
<result name="success">/helloWorld.jsp</result>
</action>
</package>
</struts>
该映射将HelloWorldAction 类(控制器)和HelloWorld.jsp (视图)绑定在一起,映射告诉Struts2框架哪个类将响应用户操作,该类哪个方法将被执行,以及该方法返回的String结果呈现什么视图
5.创建URL操作,修改index.jsp为:
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Basic Struts 2 Application - Welcome</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<p><a href="<s:url action='hello'/>">Hello World</a></p>
</body>
</html>
6.构建并运行应用程序:
右键项目->Run As->Run on Server,tomcat启动完成后
输入http://localhost:8080/ssh/index.action,显示如图:
点击紫色hello world,图片显示为:
至此:
归纳下struts如何运行的:
1.浏览器向Web服务器发送URL http:// localhost:8080 / helloworld / hello.action的请求
2.容器从Web服务器接收资源请求hello.action,根据web.mxl加载设置,容器中所有请求被org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter拦截
3.StrutsPrepareAndExecuteFilter过滤器查找名为"hello"的动作映射,发现该映射对应类 HelloWorldAction,实例化该类并调用excute方法
4.excute方法返回字符串success,然后查找该字符串对应的加载页面为helloWorld.jsp
5.解析helloWorld.jsp,其中<s:property value=“messageStore.message” />标记调用Action 的getter getMessageStore,将调用getMessageStore返回的对象,在调用message属性合并到helloWorld.jsp中
6.将响应浏览器的helloWorld.jsp发送回浏览器