文档章节

一、struts入门

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

© 著作权归作者所有

共有 人打赏支持
swift_hua
粉丝 0
博文 33
码字总数 20868
作品 0
成都
程序员
ST2-045 For POC

转载请注明: 转载自Legend‘s BLog 本文链接地址: ST2-045 For POC 利用方法: 漏洞说明: Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于J...

apachecn_飞龙 ⋅ 2017/03/18 ⋅ 0

MyEclipse 2017 整合SSH三大框架 到登录功能的实现(附源码)

本来以为学完Java EE之后用个三大框架没什么难度,结果昨天搭环境就搞了一晚上,还是靠室友找了半天才找出错误在哪,为了避免重复踩坑,而且目前网上用myeclipse2017做环境的教程还是蛮少的,...

xp731574722 ⋅ 03/02 ⋅ 0

企业未修复Apache Struts 2漏洞致Web服务器被批量入侵

  0×1 概述   腾讯御见威胁情报中心监控发现,近期有大批企业网站的Web服务器遭到入侵并被植入挖矿木马。   安全人员分析发现被攻击网站服务器多存在Apache Struts 2 Jakarta Multipa...

FreeBuf ⋅ 04/29 ⋅ 0

[Struts]Token 使用及原理

Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。 2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提...

thinkyoung ⋅ 2014/12/17 ⋅ 0

Java 模板引擎 Beetl 2.8.0 发布,增加根对象支持

Java 模板引擎 Beetl 2.8.0 发布了,改进内容包括: #348 beetl 默认配置DefaultTemplateEngine #347 增加根对象支持 #346 允许设置全局 ClassLoader #345 支持struts2.5, 由于struts升级不...

闲大赋 ⋅ 04/23 ⋅ 0

SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论

  典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层...

thinkyoung ⋅ 2014/12/17 ⋅ 0

开源产业不断发展,软件安全问题亟需得到关注

近日 Sonatype 发布了“2018年开源安全与风险分析”报告,该报告显示开源应用有大幅增长,在检测的应用中有96%包含开源组件,同时包含漏洞的软件数量也在不断增加。随着开源产业不断发展,目...

雨田桑 ⋅ 05/18 ⋅ 0

org.hibernate.ObjectNotFoundException: No row with the given identifier exists产生的原因和解决方法

解决方法:改成单项关联,或者把不对应的数据改对! 产生此问题的原因: 有两张表,table1如用户表user,和table2角色表role.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-on...

冯莉莉莉莉 ⋅ 05/25 ⋅ 0

闲谈“如何优化SSH框架的项目”

使用struts框架的好处之一就是所有action类继承一个基类,将访问控制在基类中处理.2.所有的action类都继承自baseaction,一个资源对应一个action类. 1.实现一个继承自struts的action的baseact...

thinkyoung ⋅ 2014/12/30 ⋅ 0

书单丨5本Java后端技术书指引你快速进阶

一名Java开发工程师 不仅要对Java语言及特性有深层次的理解 而且需要掌握与Java相关的 框架、生态及后端开发知识 本文涉及多种后端开发需要掌握的技能 对于帮助提高开发能力非常有帮助 NO.1...

Java高级架构 ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部