Struts2 HelloWorld_1

新建web Project:struts2_0100_introduction

下载:Struts-2.1.6.zip

解压后,在apps文件夹下面有5个*.war文件,解压struts2-blank.war文件

  得到:struts.xml文件和lib目录下面的所有*.jar文件

  把得到的struts.xml文件复制到我们项目的src目录下面;

  Build Path的时候把lib目录下面的jar文件添加进我们的项目,虽然说有些jar文件

对我们现在的项目带来好处,但是我们为了简单起见就一起给添加进来了,这样做也

也是为了保险。^_^

  修改web.xml文件:

------------------------------------Hongten--------------------------------------

web.xml

代码;

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd">  <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>

 <welcome-file-list>   <welcome-file>index.jsp</welcome-file>  </welcome-file-list> </web-app>

------------------------------------Hongten--------------------------------------

struts.xml

代码:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>     <package name="default" namespace="/" extends="struts-default">         <action name="hello">             <result>                 /Hello.jsp             </result>         </action>     </package> </struts>

------------------------------------Hongten--------------------------------------

Hello.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> Hello Struts2</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>     Hello Struts2<br>   </body> </html>

------------------------------------Hongten--------------------------------------

部署项目后,启动服务器,输入:http://localhost:1000/struts2_0100_introduction/hello.action

浏览器输出:

Hello Struts2

当然这里可以直接输入:http://localhost:1000/struts2_0100_introduction/hello

效果也是一样的;

------------------------------------Hongten--------------------------------------

测试二:

我们要想在修改我们的程序后,不用重新启动服务器等一些麻烦的操作

如:

<action name="hello_struts">

  <result>  

    /Hello.jsp

  </result>

</action>

修改后我们不用重启服务器,就能让我们的程序运行起来

这时,我们如果不做任何的配置或部署的话,直接运行会报错的

如错误信息:

HTTP Status 404 - There is no Action mapped for namespace / and action name hello_struts.


type Status report

message There is no Action mapped for namespace / and action name hello_struts.

description The requested resource (There is no Action mapped for namespace / and action name hello_struts.) is not available.

那么我们应该怎样配置才可以解决这种情况呢?

修改struts.xml

代码;

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>  <constant name="struts.devMode" value="true"/>     <package name="default" namespace="/" extends="struts-default">         <action name="hello_struts">             <result>                 /Hello.jsp             </result>         </action>     </package> </struts>

这样配置以后,我们修改上面的代码后,就可以很方便的运行程序,不需要重新部署项目

------------------------------------Hongten--------------------------------------

我们来看看这个小程序的运行机制:

  现在有一个客户端在浏览器上面输入一个url地址:http://localhost:1000/struts2_0100_introduction/hello

当他输入这个url地址之后,这个url请求会通过http协议发送给我们的tomcat服务器;

tomcat收到这个请求之后,会看,这个请求的是哪个web application呢?是这个struts2_0100_introduction

这个web application,所以他就把这个web application交给我们对应的程序去处理,这是他就会去读取

struts2_0100_introduction这个web application中的web.xml配置文件。这是就发现我们在web.xml中的一个

配置:

<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>

在这个web.xml中配置了一个filter,而这个filter会过滤所有的url地址,所以当url地址中的hello就会被

filter过滤掉,被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到;

他会怎样处理呢?

他会首先看namespace:“/”

然后到struts.xml中去查,当中有一个namespace="/"

在url中的  "/"  后面是:hello

接下来会在去查这个 "/"  下面有没有action name="hello"

如果有,就会执行result中的

/Hello.jsp,  就把Hello.jsp的结果显示在浏览器上或者客户端的浏览器上面;

------------------------------------Hongten--------------------------------------

总结:

有人可能会问了,我们为什么要搞这么复杂啊?

我们直接访问Hello.jsp不就完事儿了吗!不是挺爽的吗?为什么搞这么麻烦?

想一想,struts2这样做肯定有他这样做的好处,你说是不是啊?

我们原来学过设计模式,设计模式有一个典型 的特点:就是一定要把简单的东西给他复杂化

他为什么要这样复杂化呢?复杂化后带来的好处是什么?

最重要的是就是扩展性很好,而struts2带来的好处也是一样的,他为什么搞这么麻烦?

中间要经过一次中转,一次请求来了之后,要经过一次中转才可以拿到我们想要的东西

他的好处是可以把请求和最后要拿到的结果(视图)给他分开,而不像原来那样之间写死。

分开之后的好处是:如果我们现在要换成其他视图如:Hello1.jsp

我们可以直接在struts.xml中修改:

<result>

  /Hello1.jsp

</result>

 这样就可以了,这样会更灵活,这就是她的好处

所以struts解决的问题就是:把请求和视图分开

------------------------------------Hongten--------------------------------------

感谢:尚学堂-马士兵

------------------------------------Hongten--------------------------------------

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小黑屋

自定义控件进阶:declare-styleable重用attr

最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个...

13010
来自专栏听雨堂

Android新手之旅(15) Win7下配置遇到的问题

系统重做,由XP变为win7,文件都在,只需要做这几项工作: 配置系统的环境变量 配置project—android sdk的路径 安装jdk 但是,把原来的系...

195100
来自专栏python3

django创建项目

Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:

11320
来自专栏進无尽的文章

基础篇-Mac终端指令大全

在日常开发中我们经常会用到一些Mac的指令在终端中进行操作,所以了解和熟练使用一些基本的Mac终端指令是非常有必要的,也有利于自己的职业发展,下面就简单总结下M...

14710
来自专栏移动安全

移动安全-api使用方式介绍

windows 环境请访问 Composer官网 下载安装包安装。unix 环境在命令行中执行以下命令安装。

80170
来自专栏张戈的专栏

Llinux文件目录权限及chmod命令简析

这些天,在互推联盟群(344134224 )遇到几例关于 WP 升级失败以及 FTP 账号登陆的问题。最终发现都是主机的目录权限设置存在问题。比如,博友【PPT...

46860
来自专栏抠抠空间

爬虫之FileCookieJar

19300
来自专栏Android相关

Linux--分区与挂载

整个磁盘的存储大小为: 存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

63020
来自专栏容器云生态

根据红帽RHEL7官方文档对centos7进行技术剖析(一)

序言:红帽7教学环境介绍 rht-vmctl命令介绍; $ rht-vmctl start desktop     启动desktop虚拟机 $ rht-vmc...

34460
来自专栏地方网络工作室的专栏

Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情。但是逐一打开检查那简直是一...

28980

扫码关注云+社区

领取腾讯云代金券