Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

struts的初步使用

1、创建一个maven项目

1.1Java代码

1.1.1  User.java

 package com.yuan.entity;

 public class User {

     private String uid;
private String uname; public String getUid() {
return uid;
} public void setUid(String uid) {
this.uid = uid;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} @Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + "]";
} public User(String uid, String uname) {
super();
this.uid = uid;
this.uname = uname;
} public User() {
super();
// TODO Auto-generated constructor stub
} }

1.1.2  HelloAction.java

package com.yuan.web;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import com.yuan.entity.User; /**
* 1.动态调用方法(mvc不具备的优势)
* 2.struts中的传参
* 1、set传参
* 2、参数名.属性名传参
* 3、实现modeldriven接口传参
*
* 3.struts与tomcat的交互
* 如何将后台的值传到前台去
* 1、通过request传值
* 2、值栈传值(get方法传值)
* @author **
*
*/
public class HelloAction implements ModelDriven<User>,ServletRequestAware,ServletResponseAware { private HttpServletResponse response;
private HttpServletRequest request;
private User user1 = new User();
private User user2;
private String sex; public User getUser2() {
return user2;
} public void setUser2(User user2) {
this.user2 = user2;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String add() {
System.out.println("add方法");
return "success";
} public String edit() {
System.out.println("edit方法");
return "success";
} public String del() {
System.out.println("del方法");
return "success";
} public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
//非注入--耦合型
// HttpServletRequest request = ServletActionContext.getRequest();
// request.setAttribute("rs", user1);
this.request.setAttribute("rs",user1);
return "success";
} @Override
public User getModel() {
// TODO Auto-generated method stub
return user1;
} @Override
public void setServletRequest(HttpServletRequest request) {
this.request=request; } @Override
public void setServletResponse(HttpServletResponse response) {
this.response=response; } }

1.2导入的外部xml文件

1.2.1  pom.xml

在pom.xml中插入此段代码

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

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

1.2.3  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>
<package name="sy" extends="base" namespace="/sy">
<action name="/hello_*" class="com.yuan.web.HelloAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

1.2.4  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>
<include file="struts-default.xml"></include>
<include file="struts-base.xml"></include>
<include file="struts-sy.xml"></include>
</struts>

1.2.5  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>
<filter-name>struts2</filter-name>
//ctrl+shift+t 搜索StrutsPrepareAndExecuteFilter,点开第一个,右键拷出全路径名粘贴到此处
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>

1.3新建jsp

1.3.1  demo1.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>
<h2>struts传参的三种方式</h2>
<a href="${pageContext.request.contextPath }/sy/hello_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a>&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/sy/hello_list.action?sex=nv">测试set传参</a>&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/sy/hello_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a>
<h2>与j2EE容器的交互</h2>
</body>
</html>

1.3.2  success.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>
成功页面:${rs }
</body>
</html>

2、动态调用方法(mvc不具备的优势)

2.1  action代码

     public String add() {
System.out.println("add方法");
return "success";
} public String edit() {
System.out.println("edit方法");
return "success";
}

2.2  jsp代码

<h2>动态调用方法</h2>
<a href="${pageContext.request.contextPath }/sy/hello_add.action">add方法</a>
<a href="${pageContext.request.contextPath }/sy/hello_edit.action">edit方法</a>

后台输出调用的相对应的方法

3、struts中的传参

3.1、实现 modelDrivern接口传参

3.1.1  action代码   

public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
}

   3.1.2  jsp代码

<a href="${pageContext.request.contextPath }/sy/hello_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a>&nbsp;&nbsp;

  后台输出显示:user1:User [uid=001, uname=zs]

3.2  set传参

   3.2.1  action代码

 public String list() {
System.out.println("list方法");
System.out.println("sex:"+sex); }

3.2.2  jsp代码

<a href="${pageContext.request.contextPath }/sy/hello_list.action?sex=nv">测试set传参</a>&nbsp;&nbsp;

后台输出显示:sex:nv

3.3类实例.属性名

3.3.1  action代码

 public String list() {
System.out.println("list方法");
System.out.println("user2:"+user2);
}

3.3.2  jsp代码

<a href="${pageContext.request.contextPath }/sy/hello_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a>

后台输出显示:user2:User [uid=002, uname=ls]

 4、struts与tomcat的交互

4.1  request传值,需要实现ModelDriven接口,调用ServletActionContext.getRequest()方法。

如:

public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("rs", user1);
return "success";
}

前台页面显示:成功页面:User [uid=001, uname=zs]

4.2  值栈传值(get方法传值),不需要操作,因为值栈传值会将传过来的值自动赋值

public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
return "success";
}

前台页面显示:成功页面:User [uid=002, uname=ls]

5、注入与非注入

5.1  注入,注入需要实现ServletRequestAware接口,重写需要实现的方法setServletRequest;

将setServletRequest方法的参数私有化作为属性

private HttpServletRequest request;

setServletRequest方法

@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request; }

属性调用

public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
this.request.setAttribute("rs",user1);
return "success";
}

5.2  非注入

request传值就是属于非注入

public String list() {
System.out.println("list方法");
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("sex:"+sex);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("rs", user1);
return "success";
}

谢谢观看^-^ !!!

最新文章

  1. mysql基础安全
  2. 使用FWTools来导入shp数据到mysql
  3. JVM(java 虚拟机)内存设置
  4. html第二天CSS
  5. MySQL基础(四)——索引
  6. require或include相对路径多层嵌套引发的问题
  7. uploadify上传
  8. ARMv7 ldr/str指令详解
  9. DataGridView减少闪烁的解决办法
  10. Java中的IO学习总结
  11. description方法介绍及重写
  12. uploadify,实际开发案例【选择完文件点击上传才上传】
  13. Python基础数据类型之集合以及其他和深浅copy
  14. Windows Python requests 详细模块安装方法
  15. Java基础知识拾遗(四)
  16. Object Detection / Human Action Recognition 项目
  17. 【ASP.NET Core快速入门】(十一)应用Jwtbearer Authentication、生成jwt token
  18. Nmap 进阶使用 [ 脚本篇 ]
  19. 抓包工具Charles的简单使用
  20. springboot之jar运行脚本

热门文章

  1. dede5.7-修改自定义表单
  2. PHP中的PDO数据对象
  3. golang的for循环基本语法
  4. Hadoop 求单词count数
  5. Centos 安装PHP-redis扩展
  6. hdu 1075 map的使用 字符串截取的常用手段 以及string getline 使用起来的注意事项
  7. winfrom 集成krpano 项目 添加折线
  8. 一次实战CTF-WEB(多重登录机制中的缺陷)
  9. MySQL中You can&#39;t specify target table &#39;表名&#39;(&#39;sn_app_label&#39;) for update in FROM clause错误解决办法
  10. VBA Exit For语句