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

}

三继承actionSupport

public class IndexAction3 extends ActionSupport {

@Override

public 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. 尚学堂马士兵struts2 课堂笔记(四)

    27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...

  2. 尚学堂马士兵struts2 课堂笔记(三)

    19-20 简单数据验证 例如 前台jsp 及struts.xml <a href="user/user!add?name=a" >添加用户</a> < ...

  3. 尚学堂马士兵struts2 课堂笔记(二)

    14通配符问题 其实这个问题看一个例子就ok <package name="actions" extends="struts-default" names ...

  4. 尚学堂马士兵Oracle教程笔记

    检查Oracle安装 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba 然后,解除对scott用户的锁 alter user scott account ...

  5. 马士兵 spring 视频笔记

    课程内容 1.       面向接口(抽象)编程的概念与好处 2.       IOC/DI的概念与好处 a)       inversion of control b)       dependen ...

  6. 学习java的视频资源(尚学堂)(比较老旧,但是还是挺好用)

    本人新手,转入IT,一开始在学校的时候看过尚学堂 马士兵讲过的java基础视频教程,这次深入学习呢,就从百度云盘找了一整套的视频资源.之后越深入的学习呢,发现这些视频资源VeryCD上都发布了,地址 ...

  7. Hibernate 马士兵 学习笔记 (转)

    目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...

  8. struts2马士兵笔记

    Struts2 学习笔记 目录 01 Struts2-Action 一.         Struts作用: 二.         搭建Struts2的运行环境: 三.         Namespa ...

  9. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

随机推荐

  1. 54. Spiral Matrix(中等)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  2. tomcat连接池配置和使用

    一种方法是在conf/context.xml文件中配置,配置oracle连接池的一个例子的context内容如下: <?xml version='1.0' encoding='utf-8'?&g ...

  3. python笔记七(递归函数)

    在介绍递归函数之前,我们先介绍以下递归函数的使用有以下特征: 1.递归函数就是函数在函数体内部调用本身 2.递归函数的运算规模要不断减小,这样才是可以运算的 3.递归的层数不要超过999,因为函数调用 ...

  4. PHP 5 常量

    PHP 5 常量 常量值被定义后,在脚本的其他任何地方都不能被改变. PHP 常量 常量是一个简单值的标识符.该值在脚本中不能改变. 一个常量由英文字母.下划线.和数字组成,但数字不能作为首字母出现. ...

  5. Python3 注释

    确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以#开头,例如: #!/usr/bin/python3 #coding=utf-8 ...

  6. 作业03-面向对象入门.md

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1 写出你 ...

  7. 拟将博客迁移到github

    其实博客园网站速度挺快的, 但是markdown的显示没有github美观. 尤其是代码高亮这一块. 近日发现github pages + vue + github api + stackedit 能 ...

  8. Java内存泄漏分析系列之四:jstack生成的Thread Dump日志线程状态

    原文地址:http://www.javatang.com Thread Dump日志的线程信息 以下面的日志为例: "resin-22129" daemon prio=10 tid ...

  9. iOS开源加密相册Agony的实现(四)

    简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...

  10. PHP Ajax JavaScript 实现 无刷新附件上传

    普通表单 前端页面 后台处理 带有文件的表单 刷新方式 前端界面 后台页面 无刷新方式 大文件上传 POST极值 upload极值 上传细节 前端页面 后台处理 总结 对一个网站而言,有一个基本的不可 ...