文档章节

一、struts入门

swift_hua
 swift_hua
发布于 2017/07/22 16:13
字数 1846
阅读 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格式

© 著作权归作者所有

共有 人打赏支持
swift_hua
粉丝 0
博文 33
码字总数 20868
作品 0
成都
程序员
Struts2知识点小结(一)

一、struts2简介   1、Struts2是一个基于MVC设计模式的Web应用框架 只要是web层框架 一般就会遵守MVC设计模式 2、struts2与struts1的关系? 没关系 WebWork基于xwork 3、struts2是一个可插拔...

it~沃克尔
08/08
0
0
MVC 框架 - Apache Struts

Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web...

匿名
2008/09/07
0
8
细谈Spring(十一)深入理解spring+struts2整合(附源码)

Spring和struts2是我们在项目架构中用的比较多的两个框架,怎么才能把这两个框架用好,怎么来整合是我们掌握运用这两个框架的关键点,下面我们就怎么来整合,从哪来整合,为什么要整合,从这...

youyu2299
2013/12/06
0
0
常用的 default.properties 文件 + 常用的 struts-default.xml 文件 + 常用的 struts-plugin.xml 文件 + 常用的 struts.xml 文件 + 常用的 struts.properties文件 + 常用的 web.xml 文件

常用的 default.properties 文件,所在位置:struts-2.3.15.3-allstruts-2.3.15.3appsstruts2-blankWEB-INFlibstruts2-core-2.3.15.3.jarorgapachestruts2default.properties $Id: default.p......

黑泽明军
06/22
0
0
Struts 源码学习之ActionServlet ( 一)

Struts 源码最新版本为 struts-1.3.8-src.zip ( 12-Mar-2007 00:06 ) 学习笔记使用struts-1.3.5-src.zip 的源码, 下载地址:http://archive.apache.org/dist/struts/source/ 1. 在web.x......

xiahuawuyu
2012/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
14
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
4
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部