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";
}

谢谢观看^-^ !!!

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. linux服务器安装svn并上传项目

    一.安装svn (1)安装svn服务器: yum install subversion (2)查看版本(随自己意愿): svnserve --version 二.创建svn仓库并配置 (1)创建svn ...

  2. python 之 re模块、hashlib模块

    6.16 re模块 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 ...

  3. python使用ORM之如何调用多对多关系

    在models.py中,我创建了两张表,他们分别是作者表和书籍表,且之间的关系是多对多. # 书 class Book(models.Model): id = models.AutoField(pri ...

  4. PAT(B) 1082 射击比赛(Java)

    题目链接:1082 射击比赛 (20 point(s)) 题目描述 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y ...

  5. gopacket 在 windows 上面遇到的问题

    前阵子有个需求是使用 golang 抓包改包,我用到了 gopacket 这个包,但是出了一些小问题. 我按照网上的方法进行使用 OpenLive 抓包,发现并不行,报错 error open ada ...

  6. session和cookie有什么区别?

    1.存储位置不同 cookie的数据信息存放在客户端浏览器上. session的数据信息存放在服务器上. 2.存储容量不同 单个cookie保存的数据<=4KB,一个站点最多保存20个Cooki ...

  7. 2.Excel VBA术语

    Excel VBA名词术语 在这一章中,让我们了解常用的Excel VBA术语.这些术语将在进一步模块学习中使用,因此理解它们是非常关键的. 模块 1.模块是其中代码被写入的区域.这是一个新的工作簿, ...

  8. Spring Boot整合Spring Security自定义登录实战

    本文主要介绍在Spring Boot中整合Spring Security,对于Spring Boot配置及使用不做过多介绍,还不了解的同学可以先学习下Spring Boot. 本demo所用Sprin ...

  9. VBA Exit Do语句

    当想要根据特定标准退出Do循环时,可使用Exit Do语句. 它可以同时用于Do...While和Do...Until直到循环. 当Exit Do被执行时,控制器在Do循环之后立即跳转到下一个语句. ...

  10. iOS - 外包开发常用第三方库(1)

    一:第三方插件1:基于响应式编程思想的oc地址:https://github.com/ReactiveCocoa/ReactiveCocoa2:hud提示框地址:https://github.com/ ...