Struts初级入门知识

Hello,World
“当您在Struts 2 Web应用程序中单击超链接或提交HTML表单时,输入不会发送到另一个服务器页面,而是发送到您提供的Java类。这些类称为Actions。在触发Action之后,Result会选择一个资源来呈现响应。资源通常是服务器页面,但它也可以是PDF文件,Excel电子表格或Java小程序窗口。
要创建一个“Hello World”示例,您需要做四件事:
1.
创建一个类来存储欢迎消息(模型)
2.
创建服务器页面以显示消息(视图)
3.
创建一个Action类来控制用户,模型和视图之间的交互(控制器)
4.
创建一个映射(struts.xml)来耦合Action类和视图
6.
通过创建这些组件,我们将工作流程分为三个众所周知的问题:视图,模型和控制器。分离问题使得管理应用程序变得更加复杂变得更加容易。
让我们看一个示例模型类,Action,服务器页面和映射。如果您愿意,可以启动Java IDE,然后输入代码。”
现在,我们来修改以一下上次的basic_struts

1.创建模型类MessageStore.java(Model)

在src文件夹下创建com/cn/hnnz/pojo包
在pojo下创建MessageStore.java
package com.cn.hnnz.pojo;
public class MessageStore {
private String message;

    public MessageStore() {
       message = "Hello Struts User";
   }
   public String getMessage() {
         return message;
   }
   public void setMessage(String message) {
         this.message = message;
   }

}
2.创建Action类HelloWorldAction.java(Controller)

在src下创建com/cn/hnnz/controller包
在controller包下创建HelloWorldAction.java类
这个类继承com.opensymphony.xwork2.ActionSupport
如下:

package com.cn.hnnz.controller;
import com.cn.hnnz.pojo.*;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private MessageStore messageStore;

public String execute() {
    messageStore = new MessageStore() ;
    return SUCCESS;
}
public MessageStore getMessageStore() {
    return messageStore;
}

}

Q:execute()方法是什么?

A:execute()相当于Servlet里面的service()方法,但不是必要的.当我们在struts.xml里未定义处理方法时,将会默认的使用这个方法.当我们在execute()方法中没有任何的操作的话,默认返回"success"
Q:Action类为何要继承ActionSupport类?
A:为了方便实现Action类,我们继承ActionSupport类,继承此类可以重载execute()方法.并且ActionSupport已经实现了Action接口和Validateable接口(提供数据校验功能)等.继承了ActionSupport类,可以简化Action的开发
Q:为什么在HelloWorldAction里面有一个getMessageStore()方法?
A:由于我们希望将MessageStore提供给视图,所以在这里用JavaBean风格的get set方法.以便在需要的时候调用
3.创建HelloWorld.jsp(Veiw)
在WebContent下创建HelloWorld.jsp
内容如下:
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@taglib prefix=“s” uri="/struts-tags" %>

Insert title here

在页面引入struts表达式 :打印出针对堆栈进行求值的表达式,如果没有指定,则默认从Action获得.关于此标签在这里的使用,官网教程这么说: The tag displays the value returned by calling the method getMessageStore of the HelloWorldAction controller class. That method returns a MessageStore object. By adding the .message onto the messageStore part of the value attribute we are telling the Struts 2 framework to call the getMessage method of that MessageStore object. The getMessage method of class MessageStore returns a String. It is that String that will be displayed by the tag 4.在struts.xml中添加一些配置 <?xml version="1.0" encoding="UTF-8"?> /index.jsp
    <action name="hello" class="com.cn.hnnz.controller.HelloWorldAction"  method="execute">
        <result>/HelloWorld.jsp</result>
    </action>
</package>
添加如上红色标注的内容. 在这里,相信我们对和这几个节点已经有所认识.下面我们来具体了解一下它们

节点 属性 值 作用
package name 没有特别限定,但值不可重复 name的值和功能没有联系,主要为了区分不同的package标签
extend struts-default 当extend=“struts-default”,package里面的类具有action的功能
namespace 没有特别限定 命名空间,和package的子标签中的name值构成访问路径
action name 没有特别限定,但值不可重复 和action的父标签中的namespace的值构成访问路径
class action的全路径 指定处理请求的action类
method 没有特别限定,默认值为execute 执行action里面的某个方法,也可以执行多个方法
result name 与方法返回值相同
type dispatcher(转发),redirect(重定向),chain,redirectAction(重定向到Action).默认dispatcher 如何到已配置的路径中
5.修改index.jsp
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@taglib prefix=“s” uri="/struts-tags"%>

Insert title here welcome!

Hello World

在index.jsp添加以上红色标注的内容 <%@taglib prefix="s" uri="/struts-tags"%>表示引入struts2标签库 Hello World 表示在我们的struts中找到hello所映射的action类和其对应的execute()方法 6.访问index.action 启动tomcat并在浏览器地址栏并输入http://localhost:8080/basic_struts/hello.action

在这之后,点击Hello World超链接,如果你看到以下页面,那么这就表示你修改后的basic_struts没有问题

我们的代码是如何工作的?

大意如下
你的浏览器相web服务器发送URL为http://localhost:8080/helloworld/hello.action的请求

1.容器从Web服务器接收对资源的请求hello.action。根据从web.xml加载的设置,容器发现所有请求都被路由到org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,包括*.action请求。这StrutsPrepareAndExecuteFilter是框架的切入点。

2.该框架查找名为“hello”的动作映射,并发现该映射对应于该类 HelloWorldAction。框架实例化Action并调用Action的execute方法。

3.该execute方法创建MessageStore对象并返回SUCCESS(= “success”)。框架检查操作映射以查看SUCCESS返回时要加载的页面。框架告诉容器呈现为对请求(资源)的响应HelloWorld.jsp。

4.HelloWorld.jsp在处理页面时,<s:property value=“messageStore.message” />标记调用Action 的getter getMessageStore,HelloWorld然后调用getMessage返回的MessageStore对象getMessageStore。标记将message属性的值合并到响应中。

5.纯HTML响应将发送回浏览器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值