Struts2第一天

xiaoxiao2021-02-28  26

概述

struts2框架应用于Java ee三成结构中的web层中struts2是在struts1和webwork基础之上发展的全新的框架structs2版本web层常见的框架structs2、springmvc

Struts2开发流程

导入jar包

创建action

public class HelloAction { public String index(){ return "hello"; } }

配置action访问路径

创建Struts2核心配置文件(在src下,名称为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> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="" class="com.eric.demo.action.HelloAction"> <!--配置方法的返回值到不同的页面--> <result name="ok">/hello.jsp</result> </action> </package> </struts>

配置过滤器(web.xml)

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

struts2器基本执行过程

通过过滤器获取到请求的路径,得到路径中的“hello”的值到src下去找到struts.xml,使用dom4j进行解析,得到xml文件中的内容,拿着“hello”的值,到xml中的action标签中匹配name属性的值匹配name属性值一样,都是“hello”,找到class属性的值(action的全路径),使用反射来实现功能 // 反射的实现 // 得到类 Class clazz = Class.forName("action的全路径"); // 的到名称为index的方法 Method m = clazz.getMethod("index"); // 方法执行 Object obj = m.invoke(); 得到action方法的返回值,到struts.xml文件中,找到result标签,匹配其name属性的值是否一样,若是一样的,就跳转到配置的页面中去

学习源码(StrutsPrepareAndExecuteFilter)

过滤器在服务器启动的时候创建,在创建时执行init方法 在init方法中加载配置文件,包含自己创建的和struts2自带的。我们需要关注的文件有,struts.xml和web.xml

Struts2配置介绍

Struts2中核心配置文件 <struts> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="hello" class="com.eric.demo.action.HelloAction"> <!--配置方法的返回值到不同的页面--> <result name="success">/hello.jsp</result> </action> </package> </struts> 名称:struts.xml、位置:src下在配置文件中主要有三个标签package、action、result,标签里的属性 package 类似于代码中的包,用于区分不同的action,必须首先写package标签,在package中才能配置actionname属性:值与功能本身没有关系,在一个配置文件中可以写多个package,但是name属性值不能有相同的extends属性:值是固定的 “struts-default”,只有配置了这个属性,其中的类才能具有action的功能,类似于类的继承的思想namespace属性:名称空间,其值要和action标签中的name属性值构成访问路径,默认值为 “/”,比如:/helloaction(很重要),配置action的访问路径 name属性:和package的namespace值构成访问路径,在一个package中可以有多个action标签,但是name属性值不能相同class属性:其值为action类的全路径,底层用反射来实现调用method属性:比如在action中默认执行的是index方法,使用method进行配置可以实现执行action中的其他方法result,根据action方法的返回值,跳转到不同的路径中去 name属性:配置方法的返回值type属性:配置如何到路径中去,例如转发或重定向,默认为转发。

Struts2常量配置

(重点)在src下创建struts.properties,进行修改(了解)在web.xml进行配置(了解)最常用的常量是struts.i18n.encoding=utf-8 表单提交到action中,在action中可以获取到表单数据表单数据中有中文,解决乱码问题若是post提交,直接可以自动转换编码;get提交需要手动转换编

分模块开发

单独写配置文件,把配置文件单独引入到核心配置文件中 hello.xml <struts> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="hello" class="com.eric.demo.action.HelloAction"> <!--配置方法的返回值到不同的页面--> <result name="success">/hello.jsp</result> </action> </package> </struts> struts.xml <struts> <constant name="struts.i18n.encoding" value="utf-8"/> <!--引入hello.xml--> <include file="com/eric/demo/action/hello.xml"></include> </struts>

Action的编写方式

第一种:创建普通类,这个类不继承任何类,也不实现任何接口

第二种:创建类,让这类实现接口 Action

import com.opensymphony.xwork2.Action; public class UserAction implements Action { @Override public String execute() throws Exception { return null; } }

第三种:创建类,继承 ActionSuport(最常用)

package com.eric.demo.action; import com.opensymphony.xwork2.ActionSupport; public class PersonAction extends ActionSupport { }

访问action的方法(重点)

第一种:使用action标签的method属性,在这个属性里面写执行action的方法第二种:使用通配符方式实现第三种:动态访问实现(不用)
转载请注明原文地址: https://www.6miu.com/read-2150129.html

最新回复(0)