06_尚学堂马士兵_Struts2_Struts2_HelloWorld_5

 <constant name="struts.devMode" value="true" />

在默认情况下,刚修改struts.xml后在tomcat中没有立刻刷新要么重新启动tomcat,要么加上上面的常量 dev development

07_尚学堂马士兵_Struts2_Struts2_HelloWorld_6

在eclipse里的struts.xm文件敲<是没有反应的,eclipse没有给出提示,其实eclipse里面也不知道给给出怎么样的提示.

很简单 看struts.xml文件的最上面几行

http://struts.apache.org/dtds/struts-2.0.dtd

这个url就是struts的参考信息,每次去网上拿就比较慢. 打开下载的struts lib文件找到struts2-core-xxx.jar解压缩 在里面就能看到dtd文件

再下来就比较简单了 window preference 在查找里面写catalog 找到xml如下图

09_尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2.

Struts的运行机制

客户端的请求通过相应的端口交给tomcat,tamcat在通过自己的web.xml把请求交给响应的webapp,webapp通过自己的web.xml里面

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter><!-- 让Struts2的核心Filter拦截所有请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

找到struts.xml在struts里面通过命名空间/actionname/result(其中命名空间后面再谈)找到响应的映射地址 返回给客户端.

其实struts干了什么,这么简单的问题为什么要搞这么复杂?

这就叫做简单问题复杂化,你只有在学习的时候能把简单的问题复杂化,当面对复杂工作的时候,你才能把复杂问题简单化.其实设计模式不就是干了个这事吗?

言归正传,struts到底干了什么?

就是把请求与视图分开!

10_尚学堂马士兵_Struts2_Struts2_Namespace_命名空间

Struts里面有package.这东西是干什么用的?

其实它和java里面的package一样.区分类而已,如果有两个action 都叫loginaction要给是前台的一个是后台的.放到要给package里面肯定不行 所以就有两个package 一个front一个back

ok 就这么简单就 这么方便,甚至不需要动笔 人人都要称呼一声神童啊!

     <package name="main" extends="struts-default" namespace="/"><action name="index"><result>/Namespace.jsp</result></action></package>

namespace决定了action的访问路径,默认为"",可以接收所有路径的actionnamespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action.namespace最好也用模块来进行命名

在上面的namespace里是/ 因此我们要访问这个action就localhost:8800/webname/index.action  (.action可以省略)

如果改成 namespace="/aa/"那么访问的url就是localhost:8800/webname/aa./index.action  (.action可以省略)以此类推

另外也可以给namespace赋为空”” 这个时候其他namespace处理不了的请求都交给它来处理.

另外 项目复制后

这位置不会改变,点项目邮件properties 上面查找web就ok

11_尚学堂马士兵_Struts2_Struts2_Action

 <package name="front" extends="struts-default" namespace="/"><action name="index" class="com.bjsxt.struts2.front.action.IndexAction1"><result name="success">/ActionIntroduction.jsp</result></action>
</package>

index这个action指定的class可以有三种写法

一最普通的类public class IndexAction1 {public String execute() {return "success";
}
}二实现action接口import com.opensymphony.xwork2.Action;public class IndexAction2 implements Action {@Override
public String execute() {return "success";
}}三继承actionSupportpublic class IndexAction3 extends ActionSupport {@Overridepublic String execute() {return "success";}}

选择那种方式 ?

第三种!

第一种得自己写,第二种只是实现了action接口,而actionsupport里面已经给我们写好了一些常用的方法.而且actionsupport本身就实现了action接口

再另外

 <action name="index"><result>/Namespace.jsp</result></action>

这里面怎么没有 class

没有制定classs就默认使用actionsupport,而actionsupport本身的execute方法返回的就是succes,再看rusult,如果要指定返回success的响应页面,那么success就可以不写.

在上面这种情况下,就是只要你请求index.action我就给你返回Namespace.jsp

12_尚学堂马士兵_Struts2_Struts2_Path_路径问题

Struts里面的如下

 <package name="path" extends="struts-default" namespace="/path"><action name="path" class="com.bjsxt.struts2.path.action.PathAction"><result name="path">/path.jsp</result></action>
</package>

类如下

package com.bjsxt.struts2.path.action;public class PathAction {
public String execute() {
return "path";
}
}

Index.jsp如下(index.jsp也在webroot下 和path.jsp同级)

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
<a href="path/path.action">路径问题说明</a>
</body>
</html>

Psth.jsp如下(path.jsp放在webroot目录下)

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"pageEncoding="GB18030"%><%@taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />
<a href="index.jsp">index.jsp</a>
<br />
虽然可以用redirect方式解决,但redirect方式并非必要。
<br />
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
<br />
或者使用myeclipse经常用的,指定basePath
</body>
</html>

Index.jsp为webapp的默认页面,最开始访问localhost:8080/webname/是就会看到index.jsp此时点击”路径问题说明”就跳转到了path.jsp

在path.jsp里面你点击index.jsp跳转到了

Localhost:8080/webname/path/index.jsp 看到问题了吧 系统不用关注文件的真实路径.当你在path.jsp.里面点击index时它的路径就是/path了!!

怎么办?使用绝对路径

绝对路径方法一

在jsp加上如下java片

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

超链接改成

<a href="<%= bathpath %>index.jsp">index.jsp</a>

绝对路径方法二

在头部加上

<base href="<%=basePath%>" />

下面的路径就默认为bathpath

<a href="index.jsp">index.jsp</a> 这样就可以访问了

13_尚学堂马士兵_Struts2_Struts2_ActionMethod_DMI_动态方法调用


<struts><constant name="struts.devMode" value="true" /><package name="user" extends="struts-default" namespace="/kkk"><action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add"><result>/user_add_success.jsp</result></action>        <action name="user" class="com.bjsxt.struts2.user.action.UserAction"><result>/user_add_success.jsp</result></action><span style="font-family:Times New Roman;">        </span></package></struts>

当在浏览器里敲http://localhost:8080/webapps/kkk/userAdd就可以调用这个action,因为后面跟有有个method=”add”所以调用的不是里面的execute()而是add方法.(不鼓励使用)

第二中就是http://localhost:8080/webapps/kkk!Add(DMI dynamic method invocation) 不过若是你直接就输入上面的url还是不行因为struts2默认不适用dmi所以还得加上

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

UserAction的类

package com.bjsxt.struts2.user.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {
public String add() {return SUCCESS;}
}

尚学堂马士兵struts2 课堂笔记(一)相关推荐

  1. 尚学堂-马士兵-专题-正则表达式

    一.最简单的正则表达式 String类的一个方法matches. package com.string;public class RegexTest {public static void main( ...

  2. 马士兵JVM课程笔记

    马士兵JVM课程笔记 GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? ...

  3. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  4. 尚硅谷2021新版spring5课堂笔记

    文章目录 一.Spring5 框架概述 二.IOC 概念和原理 BeanFactory 接口 IOC 操作 Bean 管理(基于 xml 方式) xml基础 1.基于 xml 方式创建对象 2.基于 ...

  5. 马士兵java教程笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

  6. 马哥python课堂笔记_马哥-python-课堂笔记12-python核心数据类型及类型显示转换

    标签: python的核心数据类型(内置) 数字:int,long,float,complex(复数),bool(布尔型) 字符:str,unicode 列表:list 字典:dict 元组:tupl ...

  7. Linux的快速使用_jdk安装_tomcat安装_mysql安装-尚学堂~百战程序员学习笔记

    一.Linux 简介 1.发展历史 丹尼斯·里奇 肯·汤普逊 系统内核汇编. B 语言. C 语言做为内核语言,发明 unix linus 召集 unix 原班人马.发明了系统 linus 后更名为 ...

  8. java马士兵笔记_马士兵java教程笔记4

    File 类 Java.io.File 类代表系统文件名 File类的常见构造方法: Public File(String pathname)以pathname为路径创建File对象,如果pathna ...

  9. 马士兵 java 学习笔记_马士兵java教程笔记1

    ---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...

  10. java马士兵笔记_马士兵java教程笔记2

    ---恢复内容开始--- 抽象类 用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract来修饰一个方法时,该方法叫做抽象方法 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承 ...

最新文章

  1. 用es6 (proxy 和 reflect)轻松实现 观察者模式
  2. 树上分治详解 超级详细(附带例题 poj1741(给了题目))
  3. 值得安利!8款windows神级软件,真解决了不少痛点啊!
  4. 自测之Lesson6:文件I/O
  5. pyhanlp 文本分类与情感分析
  6. Awesome Deep Vision
  7. quill变html转化,将Quill Delta转换为HTML
  8. [Spring5]IOC容器_Bean管理XML方式_创建对象_set注入属性and有参构造注入属性
  9. ftp上传文件出现“sftp: cannot open /usr/SmartStore_test/1.zip to write”
  10. 基音检测 matlab,基于MATLAB基音检测分析.doc
  11. Linux编译程序源码环境,Linux下对nodejs环境进行源码编译并部署云应用
  12. X264 输出的统计值的含义(X264 Stats Output)
  13. MAC下安装与配置MySQL [转]
  14. flutter实战1:完成一个有侧边栏的主界面
  15. Gpower CMS/模板置标
  16. DSP初识-20151111
  17. distpicker初始化以及设定指定值
  18. 细说 MySQL登录
  19. 计算机kb和gb单位的在线换算器,KB/MB/GB。。单位换算
  20. Spring THREE

热门文章

  1. 电子设计教程42:限流软启动电路
  2. Windows 删除系统恢复分区
  3. python中绝对值怎么表示_python如何使用绝对值
  4. 初级Java程序员如何快速提升自己的能力?
  5. 计算机电源接口图,电脑电源接口定义图解
  6. Unity Demo ——3D时钟
  7. 修改firefox的ssh插件的xpi包,hook自已功能
  8. 微信修改运动步数卡密源码 每日自助修改
  9. 【微信小程序】使用vant组件库(count-down)实现倒计时
  10. 更换电脑登录界面背景