天天看点

Struts2 入门Struts2 入门

Struts2 入门

Struts2 概叙

Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构。最初,是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后,Webwork框架和Struts社区联合创造了现在流行的Struts2框架。

Struts2 框架的优点

  • POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分。在Struts2框架下,你可以用任何一POJO来接收表单输入,同样的,你可以把任一POJO视为一个Action类。
  • 标签支持 - Struts2 改进了标签表单,而新的标签可让开发人员减少代码编写量。
  • AJAX支持 - Struts2 被认可接收进Web 2.0技术,并创建了功能非常类似于标准的Struts2 标签的AJAX标签,把AJAX支持整合进其结果中。
  • 易于整合 - Struts有多种整合方式可使用,现在与其他类型的框架,如Spring、Tiles、SiteMesh之类的,整合更为容易了。
  • 模板支持 - 支持使用模板生成视图。
  • 插件支持 - 有大量的插件可用于Struts2,而使用插件可以增强和扩大Struts2 核心行为。
  • 性能分析 - Struts2 为调试和配置应用程序提供综合的性能分析,此外,Struts也以嵌入调试工具的形式提供集成调试。
  • 易于修改标签 - 在Struts2 中,可使用Freemarker的模板对标签标记进行调整,而修改标签不需要JSP或是Java知识,基本的HTML、XML和CSS知识就足够了。
  • 促进减少配置 - Struts2 使用各种设置的默认值促进减少配置,而你不需要再配置什么除非是偏离了Struts2 设定的默认设置。
  • 视图技术 - Struts2 为多种视图选项(JSP、Freemarker、Velocity、XSLT等)提供支持。

1. 环境搭建

1.1 struts.xml(核心配置文件)

<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.5.13</version>
  </dependency>
           

复制进来,导入jar包

Struts2 入门Struts2 入门

导入xml 文件

Struts2 入门Struts2 入门

struts-base.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>
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<constant name="struts.devMode" value="true" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<constant name="struts.i18n.reload" value="true" />
	<!-- 动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />

	<package name="base" extends="struts-default" abstract="true">
		<global-allowed-methods>regex:.*</global-allowed-methods>
	</package>
</struts>
           

struts-sy.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>
  <!--  
       相对mvc的差异性
       package:用来将一类子控制器进行分类作用
       http://localhost:8080/web_struts/sy/user_edit.action
                  中/sy对应的namespace="/sy"
                  
       extends : 包的继承
       *的含义:
        *代表仍以方法:只要前台浏览器匹配/user_*这一个是,那么user_add *代表add
    -->
	<package name="sy" extends="base" namespace="/sy">
	</package>
</struts>
           

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>
    <!--struts框架自带的核心配置 -->
	<include file="struts-default.xml"></include>
	<!-- 配置struts全局设置   -->
	<include file="struts-base.xml"></include>
	<!-- 将系统开发的每个模块分们别类,便于模块action 寻找  -->
	<include file="struts-sy.xml"></include>
</struts>
           

配置web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  
  <filter>
  <!-- ctrl+shift+t :查找jar包也是class作用  -->
     <filter-name>struts</filter-name>
     <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
     <filter-name>struts</filter-name>
     <url-pattern>*.action</url-pattern>
  </filter-mapping>
  
</web-app>

           

写一个UserAction 类

测试动态方法调用:

注意;.1 不需要指定父类(ActionSupport) 可要可不要

package com.hyf.one.web;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {

	public String list() {
		System.out.println("查询所有"+SUCCESS);
		return SUCCESS;
	}
	
	public String add() {
		System.out.println("增加");
		return SUCCESS;
	}
	
	public String del() {
		System.out.println("删除");
		return SUCCESS;
	}
	
	public String edit() {
		System.out.println("修改");
		return SUCCESS;
	}
}
           

配置struts-sy.xml

<action  name="/user_*" class="com.hyf.one.web.UserAction" method="{1}">
	     <result name="success">/test.jsp</result>
	   </action>
           
Struts2 入门Struts2 入门

需要调用不同的方法就该下面图片划线的方法名就行了

Struts2 入门Struts2 入门

控制台输出:有值代表成功

Struts2 入门Struts2 入门

参数赋值

jsp传递参数到后台的三种方式

  • 1.set 传参
  • 2.实现modeldriven 接口传参(自定义mvc做法)
  • 3.类实例,属性传参

DemoAction 类

package com.hyf.one.web;

import com.hyf.one.entity.User;
import com.opensymphony.xwork2.ModelDriven;

public class DemoAction implements ModelDriven<User> {
	
	private  String sex;
	
	private  User user1 = new User();
	
	private  User user2;

	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public User getUser2() {
		return user2;
	}
	public void setUser2(User user2) {
		this.user2 = user2;
	}

    
	/**
	 * set 传参
	 * @return
	 */
	public  String  test1() {
		System.out.println("set 传参"+sex);
		return "rs";
	}
	
	/**
	 * .实现modeldriven 接口传参
	 * @return
	 */
	public  String test2() {
		System.out.println("接口传参"+user1);
		return "rs";
	}
	
	/**
	 * 类实例,属性传参
	 * @return
	 */
	public  String test3() {
		System.out.println("类实例,属性传参"+user2);
		return "rs";
	}

	public User getModel() {
		return user1;
	}

}

           

配置struts-sy.xml

<action  name="/demo_*" class="com.hyf.one.web.DemoAction" method="{1}">
	     <result name="rs">/rs.jsp</result>
	   </action>
           

写一个jsp 使用a标签进行调用测试

demo.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>
<a href="${pageContext.request.contextPath}/sy/demo_test1.action?sex=nv">set传参</a>
<a href="${pageContext.request.contextPath}/sy/demo_test2.action?uname=zs&&upwd=123456">接口传参</a>
<a href="${pageContext.request.contextPath}/sy/demo_test3.action?user2.uname=ls&&user2.upwd=123">类实例传参</a>
</body>
</html>
           
Struts2 入门Struts2 入门

成功

Struts2 入门Struts2 入门

struts 与tomcat容器交互(将后台数据传到jsp)

1.注入

a.耦合 (使用较多)

b.解耦

2.非注入

a.耦合 (使用较多)

b.解耦

3.struts传参:值栈传参

换个说法就是,只要该action有get方法,那么他就能直接在结果集种获取参数值

package com.hyf.one.web;

import java.util.Map;

import javax.servlet.Servlet;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.hyf.one.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;

public class TomcatAction implements ModelDriven<User>,ServletRequestAware/*RequestAware*/{
	
    private  String sex;
	
	private  User user1 = new User();
	
	private  User user2;
	
	HttpServletRequest request;

	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public User getUser2() {
		return user2;
	}
	public void setUser2(User user2) {
		this.user2 = user2;
	}
   
	public String demo() {
      //  1.非注入 耦合
	  //  HttpServletRequest request = ServletActionContext.getRequest();
	  //  request.setAttribute("rs", "非注入耦合");
		
	  // 2.注入 耦合  它需要实现 ServletRequestAware
	  // this.request.setAttribute("rs", "注入耦合");
		
	  // 3.非注入 解耦
	  // ActionContext context = ServletActionContext.getContext();
	  //HttpServletRequest requset = (HttpServletRequest) context.get("rquest全路径名");
		
		  return "rs";
	}
	public User getModel() {
		return null;
	}
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	//注入 解耦
	/*public void setRequest(Map<String, Object> request) {
		this.request= (HttpServletRequest) request.get("rquest全路径名");
	}*/

}


           
<%@ 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>
<%-- <a href="${pageContext.request.contextPath}/sy/demo_test1.action?sex=nv">set传参</a>
<a href="${pageContext.request.contextPath}/sy/demo_test2.action?uname=zs&&upwd=123456">接口传参</a>
<a href="${pageContext.request.contextPath}/sy/demo_test3.action?user2.uname=ls&&user2.upwd=123">类实例传参</a> --%>

<h3>struts与tomact容器交互</h3>
<a href="${pageContext.request.contextPath}/sy/tomcat_demo.action">测试四</a>
<a href="${pageContext.request.contextPath}/sy/tomcat_demo.action?sex=nan">测试五</a>
<a href="${pageContext.request.contextPath}/sy/tomcat_demo.action?uname=zs&&upwd=123">测试六</a>
<a href="${pageContext.request.contextPath}/sy/tomcat_demo.action?user2.uname=ls&&user2.upwd=12">测试七</a>
</body>
</html>
           
Struts2 入门Struts2 入门

有get 方法

Struts2 入门Struts2 入门