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

struts的初步使用

1、创建一个maven项目

1.1Java代码

1.1.1  User.java

  1. package com.yuan.entity;
  2.  
  3. public class User {
  4.  
  5. private String uid;
  6. private String uname;
  7.  
  8. public String getUid() {
  9. return uid;
  10. }
  11.  
  12. public void setUid(String uid) {
  13. this.uid = uid;
  14. }
  15.  
  16. public String getUname() {
  17. return uname;
  18. }
  19.  
  20. public void setUname(String uname) {
  21. this.uname = uname;
  22. }
  23.  
  24. @Override
  25. public String toString() {
  26. return "User [uid=" + uid + ", uname=" + uname + "]";
  27. }
  28.  
  29. public User(String uid, String uname) {
  30. super();
  31. this.uid = uid;
  32. this.uname = uname;
  33. }
  34.  
  35. public User() {
  36. super();
  37. // TODO Auto-generated constructor stub
  38. }
  39.  
  40. }

1.1.2  HelloAction.java

  1. package com.yuan.web;
  2.  
  3. import java.util.Map;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. import org.apache.struts2.ServletActionContext;
  9. import org.apache.struts2.interceptor.RequestAware;
  10. import org.apache.struts2.interceptor.ServletRequestAware;
  11. import org.apache.struts2.interceptor.ServletResponseAware;
  12.  
  13. import com.opensymphony.xwork2.ActionContext;
  14. import com.opensymphony.xwork2.ModelDriven;
  15. import com.yuan.entity.User;
  16.  
  17. /**
  18. * 1.动态调用方法(mvc不具备的优势)
  19. * 2.struts中的传参
  20. * 1、set传参
  21. * 2、参数名.属性名传参
  22. * 3、实现modeldriven接口传参
  23. *
  24. * 3.struts与tomcat的交互
  25. * 如何将后台的值传到前台去
  26. * 1、通过request传值
  27. * 2、值栈传值(get方法传值)
  28. * @author **
  29. *
  30. */
  31. public class HelloAction implements ModelDriven<User>,ServletRequestAware,ServletResponseAware {
  32.  
  33. private HttpServletResponse response;
  34. private HttpServletRequest request;
  35. private User user1 = new User();
  36. private User user2;
  37. private String sex;
  38.  
  39. public User getUser2() {
  40. return user2;
  41. }
  42.  
  43. public void setUser2(User user2) {
  44. this.user2 = user2;
  45. }
  46.  
  47. public String getSex() {
  48. return sex;
  49. }
  50.  
  51. public void setSex(String sex) {
  52. this.sex = sex;
  53. }
  54.  
  55. public String add() {
  56. System.out.println("add方法");
  57. return "success";
  58. }
  59.  
  60. public String edit() {
  61. System.out.println("edit方法");
  62. return "success";
  63. }
  64.  
  65. public String del() {
  66. System.out.println("del方法");
  67. return "success";
  68. }
  69.  
  70. public String list() {
  71. System.out.println("list方法");
  72. System.out.println("user1:"+user1);
  73. System.out.println("user2:"+user2);
  74. System.out.println("sex:"+sex);
  75. //非注入--耦合型
  76. // HttpServletRequest request = ServletActionContext.getRequest();
  77. // request.setAttribute("rs", user1);
  78. this.request.setAttribute("rs",user1);
  79. return "success";
  80. }
  81.  
  82. @Override
  83. public User getModel() {
  84. // TODO Auto-generated method stub
  85. return user1;
  86. }
  87.  
  88. @Override
  89. public void setServletRequest(HttpServletRequest request) {
  90. this.request=request;
  91.  
  92. }
  93.  
  94. @Override
  95. public void setServletResponse(HttpServletResponse response) {
  96. this.response=response;
  97.  
  98. }
  99.  
  100. }

1.2导入的外部xml文件

1.2.1  pom.xml

  1. pom.xml中插入此段代码
  2.  
  3. <dependency>
  4. <groupId>org.apache.struts</groupId>
  5. <artifactId>struts2-core</artifactId>
  6. <version>2.5.13</version>
  7. </dependency>

1.2.2  struts-base.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  4. "http://struts.apache.org/dtds/struts-2.5.dtd">
  5. <struts>
  6. <constant name="struts.i18n.encoding" value="UTF-8" />
  7. <constant name="struts.devMode" value="true" />
  8. <constant name="struts.configuration.xml.reload" value="true" />
  9. <constant name="struts.i18n.reload" value="true" />
  10. <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  11.  
  12. <package name="base" extends="struts-default" abstract="true">
  13. <global-allowed-methods>regex:.*</global-allowed-methods>
  14. </package>
  15. </struts>

1.2.3  struts-sy.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  4. "http://struts.apache.org/dtds/struts-2.5.dtd">
  5. <struts>
  6. <package name="sy" extends="base" namespace="/sy">
  7. <action name="/hello_*" class="com.yuan.web.HelloAction" method="{1}">
  8. <result name="success">/success.jsp</result>
  9. </action>
  10. </package>
  11. </struts>

1.2.4  struts.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  4. "http://struts.apache.org/dtds/struts-2.5.dtd">
  5. <struts>
  6. <include file="struts-default.xml"></include>
  7. <include file="struts-base.xml"></include>
  8. <include file="struts-sy.xml"></include>
  9. </struts>

1.2.5  web.xml

  1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  4. version="3.1">
  5. <display-name>Archetype Created Web Application</display-name>
  6. <filter>
  7. <filter-name>struts2</filter-name>
    //ctrl+shift+t 搜索StrutsPrepareAndExecuteFilter,点开第一个,右键拷出全路径名粘贴到此处
  8. <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>struts2</filter-name>
  12. <url-pattern>*.action</url-pattern>
  13. </filter-mapping>
  14. </web-app>

1.3新建jsp

1.3.1  demo1.jsp   代码会有报错的假象,不用管

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h2>struts传参的三种方式</h2>
  11. <a href="${pageContext.request.contextPath }/sy/hello_list.action?uid=001&&uname=zs">测试modeldriven接口传参</a>&nbsp;&nbsp;
  12. <a href="${pageContext.request.contextPath }/sy/hello_list.action?sex=nv">测试set传参</a>&nbsp;&nbsp;
  13. <a href="${pageContext.request.contextPath }/sy/hello_list.action?user2.uid=002&&user2.uname=ls">测试参数名.属性名传参</a>
  14. <h2>与j2EE容器的交互</h2>
  15. </body>
  16. </html>

1.3.2  success.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 成功页面:${rs }
  11. </body>
  12. </html>

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

2.1  action代码

  1. public String add() {
  2. System.out.println("add方法");
  3. return "success";
  4. }
  5.  
  6. public String edit() {
  7. System.out.println("edit方法");
  8. return "success";
  9. }

2.2  jsp代码

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

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

3、struts中的传参

3.1、实现 modelDrivern接口传参

3.1.1  action代码   

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

   3.1.2  jsp代码

  1. <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代码

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

3.2.2  jsp代码

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

后台输出显示:sex:nv

3.3类实例.属性名

3.3.1  action代码

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

3.3.2  jsp代码

  1. <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()方法。

如:

  1. public String list() {
  2. System.out.println("list方法");
  3. System.out.println("user1:"+user1);
  4. System.out.println("user2:"+user2);
  5. System.out.println("sex:"+sex);
  6. HttpServletRequest request = ServletActionContext.getRequest();
  7. request.setAttribute("rs", user1);
  8. return "success";
  9. }

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

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

  1. public String list() {
  2. System.out.println("list方法");
  3. System.out.println("user1:"+user1);
  4. System.out.println("user2:"+user2);
  5. System.out.println("sex:"+sex);
  6. return "success";
  7. }

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

5、注入与非注入

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

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

  1. private HttpServletRequest request;

setServletRequest方法

  1. @Override
  2. public void setServletRequest(HttpServletRequest request) {
  3. this.request=request;
  4.  
  5. }

属性调用

  1. public String list() {
  2. System.out.println("list方法");
  3. System.out.println("user1:"+user1);
  4. System.out.println("user2:"+user2);
  5. System.out.println("sex:"+sex);
  6. this.request.setAttribute("rs",user1);
  7. return "success";
  8. }

5.2  非注入

request传值就是属于非注入

  1. public String list() {
  2. System.out.println("list方法");
  3. System.out.println("user1:"+user1);
  4. System.out.println("user2:"+user2);
  5. System.out.println("sex:"+sex);
  6. HttpServletRequest request = ServletActionContext.getRequest();
  7. request.setAttribute("rs", user1);
  8. return "success";
  9. }

谢谢观看^-^ !!!

struts2--入的更多相关文章

  1. Struts2向值栈中压入属性的方式

    Struts2在初始化Action的时候会先向值栈中压入一个action对象,里面包含了各个属性,这些属性是怎么被压进去的?或者说是根据什么来压入的?直到2016年5月5日才理解,原来是在初始化act ...

  2. struts2自定义拦截器与cookie整合实现用户免重复登入

    目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...

  3. Struts2+AJAX+JQuery 实现用户登入与注册功能。

    要求 必备知识 JAVA/Struts2,JS/JQuery,HTML/CSS基础语法. 开发环境 MyEclipse 10 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 关于U ...

  4. Struts2+AJAX+JQuery 实现用户登入与注册功能

    要求:必备知识:JAVA/Struts2,JS/JQuery,HTML/CSS基础语法:开发环境:MyEclipse 10 关于UI部分请查看下列链接,有详细制作步骤: 利用:before和:afte ...

  5. Oracle+struts2实现用户登入并显示访问次数

    实体类: package entity; public class userfo { private int id;//id private String name;//用户名 private Str ...

  6. Struts2框架实现简单的用户登入

    Struts框架汲取了Struts的优点,以WebWork为核心,拦截器,可变和可重用的标签. 第一步:加载Struts2 类库: 第二步:配置web.xml <?xml version=&qu ...

  7. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  8. Struts2入门(五)——OGNL和标签库

    一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...

  9. Struts2+Spring+Hibernate框架整合总结详细教程

    一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  10. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...

随机推荐

  1. Hystrix【异常机制处理】

    在之前的老版本中,feign中是默认开启hystrix的,从新版本中默认已经关闭了,如果要通过FeignClient调用服务并开启hystrix的话,需要自定义开启,即:feign.hystrix.e ...

  2. Mybatis笔记4

    mybatis中多对多的步骤 示例:用户和角色,一个用户可以有多个角色,一个角色可以赋予多个用户 步骤: 建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系,需要使用中间表,中间表中包含两张 ...

  3. 利用Python进行数据分析 第8章 数据规整:聚合、合并和重塑.md

    学习时间:2019/11/03 周日晚上23点半开始,计划1110学完 学习目标:Page218-249,共32页:目标6天学完(按每页20min.每天1小时/每天3页,需10天) 实际反馈:实际XX ...

  4. Python爬虫刷回复

    最近闲的无聊,就想着去看看爬虫,顺着爬虫顺利的做到了模拟登录.刷帖子等等,这里简要说一下. 使用Python2.7写的爬虫,对某论坛做模拟登陆和刷帖子.回复等等,由于之前是没有接触过爬虫,这次之后感觉 ...

  5. ArcGIS SOE开发异常之 ClassFactory cannot supply requested class

    最近SOE开发一个功能,辛辛苦苦写完, 异常: ClassFactory cannot supply requested class 辛苦解决: 百度一下,描述这个问题的帖子很多,不过内容基本一致.大 ...

  6. php-获取某个文件夹下面的文件数量

    /** * 获取文件夹下文件的数量 * @param $url 传入一个url如:/apps/web * @return int 返回文件数量 */ public function getFileNu ...

  7. hdu 1242 不用标记数组的深搜

    #include<stdio.h>#include<string.h>char mapp[220][220];int m,n,mmin;void dfs(int x,int y ...

  8. Hystrix 熔断器

    Hystrix 是Netflix开源的一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败 一.Hystrix 的定义 二.Hystrix 的原理 在分布式式系统中应用熔断器后,服务调用方可以自己 ...

  9. Vue学习官网和Vue的书籍 目录结构

    Vue基础知识学习网站[中文] https://cn.vuejs.org/v2/guide/ Vue路由知识学习网站[中文] https://router.vuejs.org/zh/guide/  V ...

  10. Elasticsearch vs Solr 搜索引擎对比和选型

    前言 全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选. 基于Lucene它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Githu ...