本人是一个小白,正在自学SSH框架,其实已经把SSH过了一遍了,但是没有记下什么笔记,决定重新再来一遍,把学到的都记下来,如果以后忘了,还能看一看,也分享给大家,互相学习。如果我的笔记有错误,请大家帮我多多指出。谢谢。
Struts2学习第一天
第一天学习的知识点:
- 1.Struts2的执行原理和流程
- 2.jar包的导入
- 3.第一个Struts2小程序(HelloWord)
一.Struts2的执行原理和流程
这是一个简单的不完整的Struts2的执行原理和流程图,但是这对于一个刚刚接触Struts2的新手来说,比较容易理解。
- 首先客户端浏览器发送HTTP请求到Web应用
- Wep容器将请求转发给前端控制器
- 前端控制器跳转到HelloAction类,
- HelloAction类返回一个结果,通过这个返回的结果,跳转到相应的结果页面。
二.jar包的导入
- 下载struts2的jar包 struts-2.3.15.1-all 版本.
- Struts运行必要jar包
- struts2-core-2.3.1.1.jar:Struts 2框架的核心类库
- xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xwork
- ognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
- freemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写
- commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志,包来支持Log4J和JDK 1.4+的日志记录。
- commons-fileupload-1.2.2.jar: 文件上传组件,2.1.6版本后需要加入此文件
- commons-io-2.0.1.jar:传文件依赖的jar包
- commons-lang-2.5.jar:对java.lang包的增强
注意:我们怎样去下载好的Struts2文件中找到这些jar包呢?
1.解压下载好的Struts2文件
2.找到apps文件,这里面还有一个lib文件里面包含了所有的jar包,有100多个,但是很多暂时用不到。
3.找到下面被 的文件,复制一份,将后缀名改为.war改为.zip,就可以解压了。
4.解压后的文件里面找到WEB-INF
5.找到lib,这里面的jar包就是struts2必须用到的jar包
将jar包复制到Eclipse自己创建的项目下面的lib文件里
选中所有的jar包,点击鼠标右键找到BuildPath-AddBuldPath,这样就把jar包加入到项目里面了。我们看到下面图片中被红线圈起来的文件里多了很多的东西,就说明jar包加载成功了。
三创建第一个Struts2小程序(HelloWord)
首先需要在web.xml配置Struts2过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>struts2-01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Struts2过滤器 -->
<filter>
<!-- 设置过滤器的名字,这里必须设置为 Struts2-->
<filter-name>struts2</filter-name>
<!--
指向的地址在Libraries里面找到 struts2-core-2.3.15.3.jar(struts的版本不同,这里就不一样,
core的差不多就找对了)~~org.apache.struts2.dispatcher.ng.filter~~StrutsPrepareAndExecuteFilter.class
找到这个文件后点开,右键StrutsPrepareAndExecuteFilter这个文件找到Copy Qualified 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-app>
创建hello.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!--
${pageContext.request.contextPath}等价于<%=request.getContextPath()%>
或者可以说是<%=request.getContextPath()%>的EL版 .
比如我的项目名称是struts2-01 在浏览器中输入为http://localhost:8080/struts2-01/hello.jsp就可以登陆jsp页面
${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/struts2-01,而”/”代表的含义就是http://localhost:8080
-->
<!-- 建立一个a连接 href指向一个地址,这个地址必须以 action为结尾,其实也可以改为别的,但是需要在配置文件中修改,在后面的学子中就会学到-->
<a href="${pageContext.request.contextPath }/hello.action">hello.action</a>
</body>
</html>
创建result。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>result</h1>
</body>
</html>
在src下面创建com.hello包,包下面创建HelloWordAction.java类
package com.hello;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
/*
* HelloWordAction这个类必须实现Action类里面的方法,其实这种方法并不是常用的
* 最常用的方法是继承ActionSupport这个类,刚开始接触Struts2,
* 实现Action比较好理解。
*/
public class HelloWordAction implements Action{
@Override
public String execute() throws Exception {
//输出一些信息,证明执行了此方法
System.out.println("执行了HelloWordAction");
// 返回一个字符串,配置文件会通过这个字符串跳转到相应的页面。
return "success";
}
}
在src下面创建struts.xml文件(必须是这个名字),而且必须在src下面
其中关于namespance的介绍可能不是很清楚点击打开链接这里面有详细的介绍。
<?xml version="1.0" encoding="UTF-8"?>
<!--
给配置文件添加约束 (这个从哪里去找呢?Libraries~~struts2-core-2.3.15.3.jar
~~struts-2.3.dtd 按照这个顺序在项目中查找到版本最高的以
dtd结尾的文件,打开后就能找到下面的约束)
配置这个的作用是给配置文件添加提示和检错,如果不添加Struts2项目的jsp页面直接就打不开(404)。
如果电脑没有联网或者添加后没有提示,可以去Eclipse中添加。具体添加方法可以百度一下搜索 “struts添加dtd约束”。
-->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--
name随便写,但是不能重复 ; extends="struts-default"默认包是很重要的,
它定义了struts2内部的众多拦截器,很多拦截功能都是靠它的,每次加载都要
加载这个包,通常情况下所有的包都要继承这个包; namespace 举个例子说明
namespace="/hello",那么我们在hello.jsp中的a连接的地址就应该是
http://localhost:8089/struts2-01/hello/hello.action。如果
不写namespace=""这个属性就默认为空,也就是http://localhost:8089/struts2-01/hello.action
-->
<package name="defalutl" extends="struts-default" namespace="/">
<!--
name:就是我们在hello.jsp中的a连接的地址(也就是在浏览器中访问的地址)
${pageContext.request.contextPath }/hello.action中的hello
必须保持一致。
class指向的就是HelloWordAction这个类的地址。后面不能有.java.
-->
<action name="hello" class="com.hello.HelloWordAction">
<!--
result指向的就是要跳转的地址,name="success"还记得上面
HelloWordAction类中返回的success字符串吗?返回的是什么
这里的name等于的就是什么。result.jsp就是要跳转的jsp页面。
-->
<result name="success">result.jsp</result>
</action>
</package>
</struts>
文章中所有代码,本人已经运行过,没有曝错,达到想要的结果。