Struts2的粗略小结

  1. 什么是Struts2的框架
    • Struts2是Struts1的下一代产品,是在 struts1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
    • 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
    • Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
    • 虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
  2. Struts2是一个基于MVC设计模式的Web层框架
  3. Web层框架的特点
    • 都是一个特点,前端控制器模式
    • 记住:前端控制器(核心的控制器)
    • Struts2框架前端的控制器就是过滤器

现在struts2的框架已经逐渐被Springmvc替换了,看了structs2的教学然后总结一点小知识,以防要用的时候看看
Strust struts.xml action
Servlet是单实例多线程的,而Action是多实例多线程的。
因为多实例,所有每个请求会产生不同的Action和ActionContext对象,
因此线程是安全的。同时因为Action是多实例的,所以Action中可以有成员变量,
因为多实例不会公用。
而Servlet是单实例多线程,所以一般情况下不会定义成员变量,因为共用同一个成员变量可能出现线程安全的问题。
流程:
jsp根据路径的请求去structs.xml中找类中对应的action方法,封装数据后,逐层请求,然后经过返回值来跳转到相应的界面,以前我们使用Servlet来封装接受数据,现在我们只要Action,然后调用Action中的方法,不需要建议多个。
在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>
		<filter>

封装数据的几种方式
属性驱动
模型驱动(重要)

public class SaveAction extends ActionSupport implements ModelDriven<User> {
	private static final long serialVersionUID = -815170753112346710L;
	private User student=new User();//必须手动实例化,模型封装
	@Override
	public User getModel() {
		return student;
	}
	public String save() {
		new AddService().saveStudent(student);
		return "success1";
	}
}

主要是jsp页面的跳转,关于数据的封装,传数据到后台,获取后台数据返回前端
重点是配置拦截器《自定义拦截器以后,不要忘记配置默认的拦截器》
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>
<!-- 要想用动态开启动态方法访问变量 
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
-->
<package name="demo1" namespace="/" extends="struts-default">
<action name="SaveAction" class="com.edu.Action.SaveAction" method="save">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

jsp界面

<form action="${pageContext.request.contextPath }/SaveAction.action">
请输入id<input type="text" name="id">
请输入账户<input type="text" name="username">
请输入密码<input type="password" name="password">
请输入年龄<input type="text" name="age">
<input type="submit" value="提交">
</form>

关于跳转访问的问题我在前面的博客已经说了,这里就不说
需要在struts.xml中进行拦截器的配置,配置一共有两种方式

关于拦截器的使用

  <!-- 定义了拦截器 第一种方式
    <interceptors>
        <interceptor name="DemoInterceptor" class="com.itheima.interceptor.DemoInterceptor"/>
    </interceptors>
    -->

    <!-- 第二种方式:定义拦截器栈 -->
    <interceptors>
        <interceptor name="DemoInterceptor" class="com.edu.interceptor.DemoInterceptor"/>
        <!-- 定义拦截器栈 -->
        <interceptor-stack name="myStack">
            <interceptor-ref name="DemoInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors>

    <action name="userAction" class="com.edu.demo3.UserAction">
        <!-- 只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈 
        <interceptor-ref name="DemoInterceptor"/>
        <interceptor-ref name="defaultStack"/>
        -->
        <!-- 引入拦截器栈就OK -->
        <interceptor-ref name="myStack"/>
    </action>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值