1.写一个mystrtus框架
MVC模式
Model 模型
View 视图
Control 控制器
Control:控制器
Servlet起到控制器的作用
--》获取请求数据封装 【BeanUtils可以优化,(调用方法)】
--》调用Service处理业务逻辑
--》跳转(转发/重定向) 【跳转代码写死】
传统的MVC开发总结:
1.跳转的代码写死,不灵活
2.每次都要写servlet,web.xml中配置servlet(配置目的:请求找到servlet处理类)
需求:
登录和注册
登录成功 --》首页
注册成功
--》登录
--》首页
2.struts
Struts就是基于MVC模式的框架(struts其实也就是servlet的封装,提高开发效率)
Struts开发步骤:
- web项目,引入struts-jar包
- web.xml中,引入struts的核心功能,配置过滤器.
- 开发action
- 配置action
Struts.xml所在路径:src/struts.xml
框架:
软件中的框架,是一种半成品,我们项目开发需要在框架的基础上进行。
因为框架已经实现了一些功能,这样就可以提高开发效率。
Struts2框架:
Struts1是最早的一种基于mvc模式的框架:
Struts2是在Struts1的基础上,融合了xwork的功能。
可以说:Struts2=Struts1+xwork
Struts2框架预先实现了一些功能:
1.请求数据的自动封装
2.文件上传的功能
3.对国际化功能的简化
4.数据校验的功能
...................
Struts2的开发流程:
-
引入jar文件
commons-fileupload.jar commons-io.jar commons-lang.jar freemarker.jar javassist-3.11.0.GA.jar log4j.jar ognl.jar struts2-core.jar xwork-core-2.3.4.jar
-
配置web.xml
Tomcat启动–>加载自身web.xml–>加载所有项目的web.xml
通过在项目的web.xml中引入过滤器:Struts的核心功能的初始化,通过过滤器来完成。 filter: init:项目启动时执行 doFilter:访问执行 destory:销毁执行
<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>
-
开发Action
注意:1.action类(动作类)一般继承ActionSupport类 即处理请求的类(struts中的action类取代servlet) 2.action的业务方法,处理具体的请求 -->必须返回String -->方法不能有参数
-
配置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="xxx" extends="struts-default">
<action name="hello" class="cn.jjs.action.HelloAction" method="execute">
<result name="success" type="redirect">/success.jsp</result>
</action>
</package>
</struts>
Struts执行流程:
服务器启动:
1.加载项目的web.xml
2.创建Struts核心过滤器,执行filter-->init()
struts-default.xml 核心功能的初始化
struts-plugin.xml struts相关插件
struts.xml 用户编写的配置文件
访问:
3.用户访问Action,服务器根据访问路径名称,找对应的action配置,创建action对象。
4.执行默认拦截器栈中定义的18个拦截器。
5.执行action的业务处理方法
(后面每次访问都会创建action)
struts-default.xml详解:
目录:struts2-core.jar/struts-default.xml
内容:
1.bean节点指定struts在运行的时候创建的对象类型。
2.指定struts-default包【用户写的package(struts.xml)一样要继承此包】
package struts-default中定义了:
1.跳转的结果类型:
dsipatcher 转发,不指定默认为转发。
redirect 重定向
redirectAction 重定向到action资源
stream (文件下载的时候使用)
2.定义了所有的拦截器:
总共定义了32个拦截器
为了拦截器引用方便,可以通过定义栈的方式引用拦截器。此时如果引用了栈,那么栈中的拦截器都会被引用。
3.默认执行的拦截器栈,默认执行的action
< default-interceptor-ref name="defaultStack"/>
< default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>
拦截器(基础):
拦截器功能与过滤器功能类似:
共同点:都拦截资源
区别:
过滤器:所有资源都可以过滤;(index.jsp/servlet/img/css/js)
拦截器:只拦截action请求。
拦截器是struts的概念,只能在struts项目中使用。
过滤器是servlet的概念,能在含servlet的项目中使用。
***用户访问的时候按顺序执行18个拦截器。先执行action类的创建,再执行拦截器,再执行业务方法。***
小问题:
1.struts.xml配置文件中没有提示
1.找到struts-2.0.dtd文件,拷贝到某个非中文目录。
2.让MyEclipse关联到上面的dtd文件
windows-->preferences-->搜索xml catalog
配置:
Location:上面的目录。
Key:-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
或者:让你的电脑连接互联网,工具会自动下载dtd文件,缓存到工具中。
Struts配置详解
<!--
package:定义一个包。包作用:管理action。
(通常一个业务模板用一个包)
name:包的名字,包名不能重复。
extends:当前包继承自哪个包
在struts中,包一定要继承struts-default
struts-default是在struts-default.xml中定义的包
abstract:表示当前包为抽象包,抽象包中不能有action的定义。否则运行时期报错
abstract=true 只有当前包被其他包继承时使用。
例如:
< package name="basePackage" extends="struts-default" abstract="true">< /package>
< package name="xxx" extends="basePackage">< /package>
namespace:名称空间,默认为"/"
作为路径的一部分,所以访问路径为:http://localhost:8080/项目/名称空间/ActionName
action:配置请求路径与Action类的映射关系
name:请求路径名称
class:请求处理action类的全名
method:请求处理方法
result:
name:action处理方法返回值
type:跳转的结果类型
标签体中指定跳转的页面
-->