【JavaEE笔记】Struts2 入门 (一)

一. struts2 概述

1. struts2 框架应用 JavaEE 三层结构中 web 层框架
2. struts2 框架在 struts1 和 webwork 基础之上发展全新的框架
3. struts2 解决的问题:

4. web层其他常用框架:spring MVC

二. Struts2 入门

1. 步骤

i. 导入jar包

ii. 创建action

iii. 配置action类访问路径

1) 配置struts2核心配置文件
a) 核心配置文件名称和位置是固定的
b) 位置必须在src下面,名称 struts.xml
2) 引入dtd约束
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

3) action基本配置


http://localhost:8080/Struts2-a/hello.action

iv. 配置struts2 过滤器

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

2. struts2 基本执行过程


3. struts2 源代码查看


i. 过滤器在服务器启动的时候创建,创建过滤器的时候执行 init() 方法

1) 在init()方法中主要加载配置文件
a) 包含自己创建的配置文件和自带的配置文件
struts.xml
web.xml

三. Struts2 配置

1. Struts2 的核心配置文件:struts.xml

i. 名称和位置是固定的

ii. 主要的三个标签 :package、action、result

package标签
1) 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package标签里面配置action
2) package标签的属性
a) name属性
    • name属性值和功能本身值没有关系
    • 在一个配置文件中可以写多个package标签,name属性值不能相同
b) extends属性
    • 属性值是固定的:struts-default
    • 写了这个属性,它里面的配置才具有acion功能
c) namespace属性
    • namespace属性和action标签里面的 name属性值构成访问路径
action标签
1) action标签配置action访问路径
2) 属性
a) name属性
  • namespace属性值和标签里的name属性值构成访问路径
  • 在package标签里面写多个action标签,name属性值不能相同
b) class属性
  • action全路径
c) method属性
  • 让action里面的多个方法,使用method属性进行配置
result标签
1) 根据action方法里的返回值,配置到不同的路径里面
2) 属性
a) name属性
  • 和方法的返回值一样
b) type属性
  • 配置如何到路径中去(转发或者重定向)
  • 默认做转发操作

2. 分模块开发的配置

i. 单独写配置文件,把配置文件引入到核心配置文件中


3. 常用的常量

<constant name="struts.i18n.encoding" value="UTF-8" />  

i. 表单提交到action 里面,在action可以获取表单提交数据

ii. 表单提交数据有中文,乱码问题时,解决:

1) post提交直接设置编码
2) get提交做编码转换

iii. 如果在action获取表单通过post方式提交中文,中文乱码问题解决了,不需要自己处理

四. Actiond的访问

action编写有三种方式
1. 创建普通类,这个类不继承任何类,不实现任何接口
2. 创建类,实现Action接口
import com.opensymphony.xwork2.Action;
public class UserAction implements Action{
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}
3. 创建类,继承类 ActionSupport(常用)
import com.opensymphony.xwork2.ActionSupport;
public class OtherAction extends ActionSupport{
	public String execute() throws Exception {
			return SUCCESS;
		}
}
//public class ActionSupport implements Action…

五. 访问action的方法(重点)

有三种实现方法

1. 使用action标签的method属性,在这个属性里面写执行action的方法

i. 创建action,创建多个方法

import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport{
	//添加
	public String add() {
		System.out.println("add......");
		return NONE;
	}
	//修改
	public String update() {
		System.out.println("update......");
		return NONE;
	}
}

ii. 使用method配置

<!--配置action的方法访问  -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<!-- 有method属性 写要执行的action里面的方法的名称 -->
		<action name="addAction" class="org.fan.method.BookAction" method="add"></action>
		<action name="updateAction" class="org.fan.method.BookAction" method="update"></action>
	</package>

iii. 缺陷:

action每个方法都需要配置,如果action里面有多个方法,就需要配置很多action


2. 使用通配符方式实现(重点)

i. 在action标签里面name属性,name 属性值里面写 符号”*“

1) “*”理解:表示匹配到任意内容
-访问 hello,*可以匹配到
-访问 add,*可以匹配到
2) 注意:

在 struts2 2.5版本以上 不能直接使用通配符,需要在 package 标签里面 加上   <global-allowed-methods>regex:.*</global-allowed-methods>

<!-- 通配符的方式实现 -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<global-allowed-methods>regex:.*</global-allowed-methods>
		<action name="book_*" class="org.fan.method.BookAction" method="{1}"></action>
	</package>

3. 动态访问实现(一般不用)


4. 常见错误

i. 如果action方法有返回值,在配置文件中没有配置,会出现错误:

404-No result defined for action cn.itcas.acion.HelloAction and result ok

ii. 在action里面的方法有返回值,如果有返回值的时候类型必须是 String 

iii. action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置

-让返回值返回 none
-方法写void(不建议)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值