Struts 2初体验

Struts2简介:

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Struts 2 目录结构:
    apps目录:Struts2示例应用程序
    docs目录:Struts2指南、向导、API文档
    lib目录:Struts 2的发行包及其依赖包
    src目录:Struts 2项目源代码

使用Struts 2 开发程序的基本步骤

--手动添加Struts支持

    1.第一步:加载Struts2 类库,既是添加jar包

        1. commons-logging-1.1.x.jar ASF出品的日志包,struts2使用这个日志包来支持JDK和Log4j的日志记录。
        2. freemarker-2.3.x.jar 表现层框架,定义了struts2的可视组件主题,struts2的UI标签的模版,使用FreeMark编写
        3. ognl-2.6.x.jar 对象图导航语言(Object Graphic Navigation Language),struts2框架通过其读写对象属性,一种功能强大的表达式语言
        4. struts2-core-2.x.x.jar struts2的核心类库
        5. xwork.jar webwork的核心库,struts2在其上构建
        6. commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
        7.struts2-dojo-plugin-2.3.4     为struts所提供的一些控件例如:日历

     2.第二步:配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name>    <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 配置Struts2核心配置文件 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 注意:1.filter-class中类的地址可在:(1)可建一个类,在类中点出来。(2)或直接在Libraries 下 struts2-dojo-plugin-2.1.8.jar下找到右键copy类的路径,但必须把后缀点class删掉。2.url-pattern中的值:(1)/*代表所有页面都会经过此过滤器。(2)或*.action或*.do后缀的页面都会经过此过滤器。 -->
</web-app>

    

    3.第三步:开发视图层页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>登录页面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h3>登录页面</h3><form action="userAction" method="post" >用户名:<input type="text" name="uname"/><br />密码:   <input type="password" name="upassword" ><br /><input type="submit" value="提交登录" ></form></body>
</html>

 

    4.第四步:开发控制层com.struts包下或com.action包

package com.struts;
/*** 控制层* @author asus**/
public class UserAction {/** * 此属性用来接收form表单提交过来的值,属性名与form表单中name属性名一致* 必须生成get,set方法 */private String uname;private String upassword;public String execute(){if(uname!=null && uname.equals("admin") && upassword.equals("123")){//进入则代表账号密码输入正确return "success";}return "error";}/** JavaBean */public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getUpassword() {return upassword;}public void setUpassword(String upassword) {this.upassword = upassword;}}

    5.第五步:配置Struts 2配置文件src下创建(struts.xml)需要选TDT struts-2.1.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<!-- 配置Struts2配置文件 -->
<struts>
<!-- package:包name:包名,唯一的,必选项namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是“/”extends:继承extends=“struts-default”:struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件为什么要继承这个struts-default.xml文件因为struts框架底层提供的struts-default.xml声明了所有的拦截器和拦截器栈。我们知道struts2框架运行时执行struts-default.xml中的拦截器栈完成必要功能。如果不继承struts-default.xml文件,就没有办法使用struts2提供的所有拦截器。--><package name="struts2" namespace="/" extends="struts-default" ><!--  action:name:对应页面请求链接的后面半部分class:对应要执行的类的完整路径--><action name="userAction" class="com.struts.UserAction" ><!-- result:结果类型name:对应的是执行的类的方法的返回值后半部分文本内容:转向的页面--><result name="success" >/loginSuccess.jsp</result><!-- 账户密码正确跳转此页面 --><result name="error" >/login.jsp</result><!-- 账户密码错误跳转登录页面重新输入 --></action></package>
</struts>

    6.第六步:部署、运行项目

--自动添加Struts支持

    --MyEclipse自动添加Struts 支持

      右键项目-->MyEclipse-->Add Struts Capabilities

    注意:Hibernate+Struts2时,若两个支持都是自动生成的则会有一个  antlr-2.7.2.jar 包冲突。必须去掉一个。一般是移掉Struts2的。

    附加移除操作图:

      

 

使用对象接收from表的提交的值

属性设值的方式
(1):简单:在Action设置属性,生成SET与GET方法。

参数的名称与属性的名称一致。


(2):Action中设置Bean的属性

Bean必须生成SET、GET方法。Bean不可以实例化。
Bean中必须要有一个默认的空参数的构造方法。

参数的名称 = bean的名称.bean中属性的名称。

 

Struts 2访问Servlet API

/** Struts 2访问Servlet API*//**1.与Servlet API解耦的访问方式*///上下文对象ActionContext context = ActionContext.getContext();//request范围Map<String, Object>  request=(Map<String, Object>) context.get("request");request.put("num1", 1);//session范围Map<String, Object> session = context.getSession();session.put("num2", 2);//application范围Map<String, Object> application = context.getApplication();application.put("num3", 3);/** 2.与Servlet API耦合的访问方式*///request范围HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("num1", 4);//session范围HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("num2", 5);//application范围ServletContext application = ServletActionContext.getServletContext();application.setAttribute("num3", 6);

 

转载于:https://www.cnblogs.com/wkrbky/p/5886937.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——深度学习之数据库和自编码器

目录 一、数据库——数据获取 1、Mnist 2、ImageNet 二、自编码器&#xff08;Auto-encoder&#xff09;——参数初始化 1、功能 2、基本思想 1&#xff09;训练第一层 2&#xff09;训练第二层及以后的神经网络 ​ 3&#xff09;利用BP对整个神经网络的参数初始值进…

Halcon例程详解 (深度图转换为3D图像)—— xyz_attrib_to_object_model_3d

一、前言 深度图向点云图进行转换是进行3D检测项目时会遇到的问题&#xff0c;halcon里也有针对此问题的相关例程&#xff0c;下面对此例程进行分析。通过学习此例程&#xff0c;我们可以掌握如何将一张深度图像和一张正常二维图像转换为3D点云。 二、分析 * 初始化界面 dev…

动态代理之Cglib浅析

什么是Cglib Cglib是一个强大的&#xff0c;高性能&#xff0c;高质量的代码生成类库。它可以在运行期扩展JAVA类与实现JAVA接口。其底层实现是通过ASM字节码处理框架来转换字节码并生成新的类。大部分功能实际上是ASM所提供的&#xff0c;Cglib只是封装了ASM&#xff0c;简化了…

机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化&#xff08;Max Pooling&#xff09;概念的提出——卷积神经网络通用 1&#xff09;池化层 2&#xff0…

POJ - 3470 Walls

小鸟往四个方向飞都枚举一下&#xff0c;数据范围没给&#xff0c;离散以后按在其中一个轴线排序&#xff0c;在线段树上更新墙的id&#xff0c;然后就是点查询在在哪个墙上了。 这题有个trick&#xff0c;因为数据范围没给我老以为是inf设置小了&#xff0c;WA了很多发。&…

C# —— 深入理解委托类型

一. 委托定义 1. 委托与多播委托 委托类型表示对具有特定参数列表和返回类型的方法的引用&#xff0c;定义了委托实例可以调用的某类方法。 通过委托&#xff0c;我们可以动态的通过委托变量来调用委托方法。一般用delegate来命名委托类型,但Action和Func也可以达到同样的效果…

【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用

假设你需要指定范围内的随机数&#xff0c;传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是&#xff0c;使用这个方法至少有两个缺点。首先&#xff0c;做格式化时&#xff0c;结果常常是扭曲的&#xff0c;所以得不到正确的随机数&…

C#委托——基础2

在上一篇随笔中&#xff0c;简要说明了怎样定义委托&#xff0c;定义事件&#xff0c;订阅事件&#xff0c;最后也实现了效果&#xff0c;就是当员工类的某个对象&#xff0c;执行某个事件时&#xff0c;委托事件被触发&#xff0c;后面也得到了结果&#xff0c;但是想象一下实…

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点&#xff1a;模型标准化&#xff0c;源代码…

Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…

【转】如何实现一个文件系统

如何实现一个文件系统 摘要 本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用&#xff0c;抽象出文件系统概念模型。熟悉文件系统的内涵后&#xff0c;我们再进一步讨论Linux系统中文件系统的特殊风格和具体文件系统在Li…

【tenserflow】——数据类型以及常用属性

目录 一、什么是Tensor&#xff1f; 二、Tensorflow常见数据类型 三、Tensorflow常见属性device\cpu\gpu\ndim\shape\rank等 1、创建一个tensor 1&#xff09;tf.constant() 2)tf.Variable() 2、判断一个变量是否为tensor张量 3、生成不同设备&#xff08;cpu,gpu&#x…

C# 事件详解附实例分析

一、定义 事件是两个对象间发布消息和响应后处理消息的过程&#xff0c;通过委托类型来实现的。 事件的机制被称为发布-订阅机制&#xff0c;其算法过程为&#xff1a;首先定义一个委托类型&#xff0c;然后在发布者类中声明一个event事件&#xff0c;同时此类中还有一个用来触…

网页开发浏览器兼容性问题

1、在ie6下的双margin问题 在ie6下&#xff0c;设置了float的元素&#xff0c;以float:left为例&#xff0c;如图所示。会出现第一个浮动元素&#xff0c;即相对于父级元素浮动的&#xff0c;会出现双倍margin的问题。 注意仅仅是相对于父级元素浮动的&#xff0c;即第一个会出…

【tensorflow】——创建tensor的方法

目录 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形状的数组 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形状的数组 6、tf.fill():用指定的元素去填充指定形状的数组 7、随机化初始化进行创建 1&#xff09;normal正态分…

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲&#xff0c;有以下几种图像类型&#xff1a;‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’&#xff0c;具体含义如下图所示。 ‘byte’ 每像素1字节…

软件方法

核心工作流业务建模&#xff08;组织建模&#xff09;&#xff1a;描述组织内部各个系统如何协作&#xff0c;使得组织可以为其他的组织提供有价值的服务&#xff0c;新系统只不过是组织为了对外提供更好的服务&#xff0c;对自己的内部重新设计而购买的一个零件。需求&#xf…

修改vim中的tab为4个空格

记录一下&#xff0c;避免用时还得搜........ 1、临时修改 在vi中&#xff0c;set tabstop4 或 set ts4  2、永久修改 vi --version 查看要修改的文件如果是vim的话&#xff0c;修改~/.vimrc如果是vi&#xff0c;修改~/.exrc加上&#xff1a;set tabstop4set nu //显示行号set…

Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev

前言 1卡尺工具介绍 Halcon中的Metrology方法即为卡尺工具&#xff0c;可用来拟合线&#xff0c;圆&#xff0c;这种方法对于目标比背景很明显的图像尺寸测量是很方便的&#xff0c;不需要用blob进行边缘提取等&#xff0c;但缺点也很明显&#xff0c;需要目标的相对位置基本…

【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)

目录 ​ 1、scalar——标量 1&#xff09;在神经网络中存在的场景 2&#xff09;one_hot编码 3&#xff09;举例应用 2、vector——向量 ​ 3、matrixs——矩阵 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是让初学者对tensor的各种形式的使用场…