struts2初试

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的优势

  • 自动封装参数
  • 参数校验
  • 结果的处理(转发、重定向)
  • 国际化
  • 显示等待页面
  • 表单防止重复提交

搭建struts2的环境

1、导包

首先在项目的 lib 目录下导入struts2相关的包

2、书写Action类

 在 src 下书写Action类,该类不需要继承任何的类,就是一个普通的java类

package com.jinxin.action;

public class HelloAction {
	
	
	public String hello() {
		System.out.println("hello world");
		return "success";
	}
}

3、书写struts.xml配置文件

1. 导入约束

在 struts2核心包  -->  struts2.3.dtd导入约束

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

2. 进行配置

<struts>
	<package name="hello" namespace="/hello" extends="struts-default">
		<action name="helloAction" class="com.jinxin.action.HelloAction" method="hello">
			<result name="success">/hello.jsp</result>
		</action>
	</package>	
</struts>

3. 完整配置

<?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="hello" namespace="/hello" extends="struts-default">
			<action name="helloAction" class="com.jinxin.action.HelloAction" method="hello">
				<result name="success">/hello.jsp</result>
			</action>
		</package>	
	</struts>

4、将struts2核心过滤器配置到web.xml文件中

<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>

5、进行测试

在浏览器中输入指定的URL访问相应页面    http://127.0.0.1:8080/struts2test/hello/helloAction

流程分析

struts2完整的架构

在struts2的核心是拦截器

拦截器:

  • 表面上,拦截器帮我们封装了很多功能
  • 拦截器具有可插拔的优秀设计,何为可插拔?就是在需要哪个拦截器就用哪个拦截器,不需要哪个就不用,如果觉得功能少了,还可以自定义拦截器
  • 使用了AOP思想

 

面向切面编程(AOP)

何为面向切面编程?以servlet中设置编码为例子,为了解决编码问题,在每一个servlet中都需要设置编码,而设置编码的代码都是一样的,这样就会造成很多代码的重复,那么既然是重复的,能不能只写一遍呢,当然是可以的,如果在每个请求到Servlet之前,现在Filter中就将编码设置了,那样不就可以只写一遍就能解决所有的编码问题了吗。如果将一个个Servlet纵向排列,那么Filter就好像从中切了一刀,这就是面向切面编程

 

posted @ 2018-07-06 23:10  Jin同学  阅读(147)  评论(0)    收藏  举报