一、struts入门
一、struts入门
swift_hua 发表于6个月前
一、struts入门
  • 发表于 6个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

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


4 struts2版本

struts2.3.24
5 web层常见框架
(1)struts2
(2)springMVC

 

Struts2框架入门
第一步 导入jar包


(1)在lib中有jar包,不能把这些jar都导入到项目中
(2)到apps目录里面,找到示例程序,从示例程序复制jar包
 

第二步 创建action

第三步 配置action类访问路径
(1)创建struts2核心配置文件
- 核心配置文件名称和位置是固定的
- 位置必须在src下面,名称 struts.xml

(2)引入dtd约束

(3)action配置

访问路径:
http://127.0.0.1/struts2_day01/hello.action

第四步 配置struts2过滤器

 

Struts2执行过程
画图分析过程

 

查看源代码

1 过滤器在服务器启动时候创建,创建过滤器时候执行init方法
(1)在init方法中主要加载配置文件
- 包含自己创建的配置文件和struts2自带配置文件
** struts.xml
** web.xml

 

Struts2的核心配置文件
 
1 名称和位置固定的

2 在配置文件中主要三个标签 package、action、result,标签里面的属性

标签package
1 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action

2 package标签属性
(1)name属性
- name属性值根功能本身没有关系的,
- 在一个配置文件中可以写多个package标签,name属性值不能相同的

(2)extends属性
 extends="struts-default"
- 属性值固定的,struts-default
- 写了这个属性之后,在package里面配置的类具有action功能

(3)namespace属性
- namespace属性值和action标签里面的name属性值构成访问路径

标签action
1 action标签配置action访问路径

2 action标签属性
(1)name属性
- namespace属性值和action标签里面的name属性值构成访问路径
- 在package标签里面写多个action标签,但是action的name属性值不能相同的

(2)class属性
- action全路径

(3)method属性
- 比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法
- 让action里面多个方法执行,使用method进行配置

标签result
1 根据action的方法返回值,配置到不同的路径里面

2 result标签属性
(1)name属性
- 和方法返回值一样

(2)type属性
- 配置如何到路径中(转发或者重定向)
- type属性默认值 做转发操作

 

Struts2常量配置
1 struts2框架,帮我们实现一部分功能,struts2里面有常量,在常量里面封装一部分功能

2 struts2默认的常量位置(记住)

3 修改struts2默认常量值
(1)常用的方式
- 在struts.xml中进行配置
 
(2)还有两种方式(了解)
- 在src下面创建 struts.properties,进行修改
- 在web.xml进行配置

4 介绍最常用常量
 
(1)表单提交数据到action里面,在action可以获取表单提交数据,
(2)表单提交数据有中文,有乱码问题,解决:
- post提交直接设置编码
- get提交做编码转换

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

 

分模块开发
1 单独写配置文件,把配置文件引入到核心配置文件中

Action编写方式
1 action编写有三种方式
第一种 创建普通类,这个不继承任何类,不实现任何接口

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


 
 第三种 创建类,继承类 ActionSupport(一般使用)

 

访问action的方法(重点)
1 有三种方式实现
第一种 使用action标签的method属性,在这个属性里面写执行的action的方法

第二种 使用通配符方式实现***

第三种 动态访问实现(不用)

2 演示错误
(1)如果action方法有返回值,在配置文件中没有配置,出现错误

(2)在action里面的方法有返回值,如果有返回值时候类型必须是String
(3)action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置
- 把方法写成void
- 让返回值,返回 ”none”

使用action标签method属性
1 创建action,创建多个方法

2 使用method配置

缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action

使用通配符实现(重点)
1 在action标签里面name属性,name属性值里面写 符号 *  星号
(1)* 理解: 表示匹配任意内容
- 比如访问hello,* 可以匹配到
- 比如访问add,* 可以匹配到
 

 

案例-客户列表
 


 

附录源码:

HelloAction.java

package cn.itcast.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

	/*
	 * (1)每次访问servlet时候,都会执行service方法
	 * - 写类继承HttpServlet,重写类 里面的方法
	 * - 在web.xml中配置servlet访问路径
	 * 
	 * (2)访问action,每次访问action时候,默认执行名称execute方法
	 * - 配置action访问路径
	 * */
	public String execute() {
		System.out.println("action.............");
//		return "none";
		return NONE;
	}
	
}

PersonAction.java

package cn.itcast.action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 继承类
 * @author asus
 *
 */
public class PersonAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
}

UserAction.java

package cn.itcast.action;

import com.opensymphony.xwork2.Action;

/**
 * 实现接口
 * @author asus
 *
 */
public class UserAction implements Action{

	@Override
	public String execute() throws Exception {
//		return "success";
		return SUCCESS;
	}

}

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

	<package name="hellodemo" extends="struts-default" namespace="/">
		<!-- name: 访问名称 -->
		<action name="hello" class="cn.itcast.action.HelloAction">
			<!-- 配置方法的返回值到页面 -->
			<result name="ok">/hello.jsp</result>
		</action>
	</package>
	
</struts>

BookAction.java

package cn.itcast.method;

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

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.i18n.encoding" value="UTF-8"></constant>
	
	<!-- <package name="hellodemo" extends="struts-default" namespace="/">
		name: 访问名称
		<action name="hello" class="cn.itcast.action.HelloAction">
			配置方法的返回值到页面
			<result name="ok">/hello.jsp</result>
		</action>
	</package>  -->
	
	<!-- 引入hello.xml文件 -->
	<!-- <include file="cn/itcast/action/hello.xml"></include> -->
	
	<!-- 配置action的方法访问 -->
	<!-- <package name="methoddemo" extends="struts-default" namespace="/">
		有method属性:写要执行的action里面的方法的名称  
		<action name="addAction" class="cn.itcast.method.BookAction" method="add"></action>
		执行update方法
		<action name="updateAction" class="cn.itcast.method.BookAction" method="update"></action>
	</package> -->
	<!-- 通配符方式实现 -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<!-- 
			name属性值里面写符号 * 
			(1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add
			
			(2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update
			上面两个路径使用 book_* 可以匹配到
			method属性写*值
		 -->
		<action name="book_*" class="cn.itcast.method.BookAction" method="{1}">
		</action>
	</package>
</struts>



web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>struts2_day01</display-name>
    <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>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>hello struts2....</h1>
</body>
</html>

注:jsp页面均是html格式

标签: struts2
共有 人打赏支持
粉丝 0
博文 33
码字总数 20868
×
swift_hua
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: