action的name要与访问路径对应。hello.action。

加到tomcat启动 访问:http://localhost:8080/struts2-1/demo1/demo1.jsp

改为success

以上。

执行流程见下:

代码:

package com.itheima.struts.demo1;
/**
* Struts2的入门的Action类
* @author jt
*/
public class HelloAction { /**
* 提供一个方法:
* * 方法签名固定的
* 共有的 返回值是String类型 方法名execute 在这个方法中不能传递参数。
*/
public String execute(){
System.out.println("HelloAction执行了...");
return "success";
}
}

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>
<!-- Struts2为了管理Action的配置,通过包进行管理。 -->
<!-- 配置Struts2的包 ================ -->
<package name="demo1" extends="struts-default" namespace="/">
<!-- 配置Action================ -->
<action name="hello" class="com.itheima.struts.demo1.HelloAction" >
<!-- 配置页面的跳转=========== -->
<result name="success">/demo1/success.jsp</result>
</action>
</package> </struts>

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>Struts2的入门</h1>
<h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门</a></h3>
</body>
</html>

  

<%@ 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>跳转成功页面!!!</h1>
</body>
</html>

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>
<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> <!-- 配置Struts2的核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 修改常量 -->
<!--<init-param> -->
<!--<param-name>struts.action.extension</param-name> -->
<!--<param-value>xyz</param-value> -->
<!--</init-param> -->
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

  

当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。

修改为abc后 再用.action访问就失效了 只能用XXX.abc进行访问。

properties需要在src目录下新建一个 但是只能用来修改常量。

web.xml里面是通过过滤器的初始化参数进行修改。

如果三个文件都修改了 那么web.xml里面的会最终生效。这与加载顺序有关 后加载的会覆盖以前的。

虽然如此 但我们习惯于struts.xml中修改。(一般一进入文件就可以看到。)

c此处代码不附上。

此处代码不附。

启动访问:http://localhost:8080/struts2-1/actionDemo3.action

以上三种方式 推荐使用第三种。

代码如下:

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>Action的访问</h1>
<h3>通过method方式</h3>
<a href="${ pageContext.request.contextPath }/userFind.action">查询用户</a><br/>
<a href="${ pageContext.request.contextPath }/userUpdate.action">修改用户</a><br/>
<a href="${ pageContext.request.contextPath }/userDelete.action">删除用户</a><br/>
<a href="${ pageContext.request.contextPath }/userSave.action">保存用户</a><br/> <h3>通过通配符的方式</h3>
<a href="${ pageContext.request.contextPath }/product_find.action">查询商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_update.action">修改商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_delete.action">删除商品</a><br/>
<a href="${ pageContext.request.contextPath }/product_save.action">保存商品</a><br/> <h3>通过动态方法访问的方式</h3>
<a href="${ pageContext.request.contextPath }/customer!find.action">查询客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!update.action">修改客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!delete.action">删除客户</a><br/>
<a href="${ pageContext.request.contextPath }/customer!save.action">保存客户</a><br/>
</body>
</html>

  三个action:

package com.itheima.struts.demo3;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

	public String find(){
System.out.println("查询用户...");
return NONE;
}
public String update(){
System.out.println("修改用户...");
return NONE;
}
public String delete(){
System.out.println("删除用户...");
return NONE;
}
public String save(){
System.out.println("保存用户...");
return NONE;
}
}

  

package com.itheima.struts.demo3;

import com.opensymphony.xwork2.ActionSupport;

public class ProductAction extends ActionSupport {

	public String find(){
System.out.println("查询商品...");
return NONE;
}
public String update(){
System.out.println("修改商品...");
return NONE;
}
public String delete(){
System.out.println("删除商品...");
return NONE;
}
public String save(){
System.out.println("保存商品...");
return NONE;
}
}

  

package com.itheima.struts.demo3;

import com.opensymphony.xwork2.ActionSupport;

public class CustomerAction extends ActionSupport {

	public String find(){
System.out.println("查询客户...");
return NONE;
}
public String delete(){
System.out.println("删除客户...");
return NONE;
}
public String update(){
System.out.println("修改客户...");
return NONE;
}
public String save(){
System.out.println("保存客户...");
return NONE;
}
}

 

见下:

<?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.enable.DynamicMethodInvocation" value="true"/> <!-- Struts2为了管理Action的配置,通过包进行管理。 -->
<!-- 配置Struts2的包 ================ -->
<package name="demo3" extends="struts-default" namespace="/">
<action name="userFind" class="com.itheima.struts.demo3.UserAction" method="find"></action>
<action name="userUpdate" class="com.itheima.struts.demo3.UserAction" method="update"></action>
<action name="userDelete" class="com.itheima.struts.demo3.UserAction" method="delete"></action>
<action name="userSave" class="com.itheima.struts.demo3.UserAction" method="save"></action> <!-- 通配符的方式 -->
<action name="product_*" class="com.itheima.struts.demo3.ProductAction" method="{1}"></action> <!-- 动态方法访问的方式 -->
<action name="customer" class="com.itheima.struts.demo3.CustomerAction"></action> </package> </struts>

 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>
<!-- 配置Struts2的常量 -->
<constant name="struts.action.extension" value="action"/> <include file="com/itheima/struts/demo1/struts_demo1.xml"></include>
<include file="com/itheima/struts/demo2/struts_demo2.xml"></include>
<include file="com/itheima/struts/demo3/struts_demo3.xml"></include>
</struts>

  

其中有俩jstl的包 standard 和jstl。

CREATE TABLE `cst_customer` (
`cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
`cust_name` VARCHAR(32) NOT NULL COMMENT '客户名称(公司名称)',
`cust_source` VARCHAR(32) DEFAULT NULL COMMENT '客户信息来源',
`cust_industry` VARCHAR(32) DEFAULT NULL COMMENT '客户所属行业',
`cust_level` VARCHAR(32) DEFAULT NULL COMMENT '客户级别',
`cust_phone` VARCHAR(64) DEFAULT NULL COMMENT '固定电话',
`cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT '移动电话',
PRIMARY KEY (`cust_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 新建包结构:

在页面menu.html中修改。

然后引入jstl的包 以便使用。

同时修改jsp。

再在hibeinate映射文件中引入映射

数据库中添加两条数据:

再次启动项目:

http://localhost:8080/struts2_crm/

代码略;

最新文章

  1. python之局部变量引用赋值前的结果
  2. 类似qq的浮动窗口 ,随着滚轴的滚动,始终处于屏幕的中间(能看到运动的过程)
  3. SpringMVC访问静态资源
  4. windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
  5. codeforces 679A Bear and Prime 100 交互
  6. HDU 4635 Strongly connected(强连通分量,变形)
  7. POP3、SMTP和IMAP之间的区别和联系
  8. PreparedStatement執行sql語句
  9. C++ Primer 学习笔记_77_模板与泛型编程 --实例化
  10. javascript笔记整理(流程控制)
  11. 团队作业八——第二次团队冲刺(Beta版本)第6天
  12. Uva - 12174 - Shuffle
  13. error_Could not load file or assembly
  14. python3--迭代
  15. 【工具相关】Web-ionic-ionicLab的使用
  16. [UI] UI things
  17. caffe 动态库 Release X64
  18. selectAll, unSelectAll两个操作的实现
  19. 关于JavaScript对象中的一切(一) -- 对象属性
  20. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在初始化的时候写入参数

热门文章

  1. 代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)
  2. hbase集群配置
  3. 使用K2时提示未能加载文件或程序集Microsoft.IdentityModel等
  4. Shadow DOM的事件绑定
  5. Object&amp;nbsp;c&amp;nbsp;基础知识
  6. OK6410之tftp下载内核,nfs…
  7. 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression
  8. linux上的第一个c语言程序
  9. java5 CyclicBarrier同步工具
  10. python子进程模块subprocess详解与应用实例 之二