struts基础.docx
- 文档编号:5817147
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:26
- 大小:45.62KB
struts基础.docx
《struts基础.docx》由会员分享,可在线阅读,更多相关《struts基础.docx(26页珍藏版)》请在冰豆网上搜索。
struts基础
1.泛型
2.反射
3.注解
4.注解优化BaseDao
目标:
1.写一个mystruts框架
2.Strtus框架
1.写一个mystruts框架
MVC模式:
Model模型
View视图
Control控制器
Control,控制器
Servlet起到控制器作用!
----》获取请求数据封装【BeanUtils可以优化,(调用方法?
)】
----》调用Service处理业务逻辑
----》跳转(转发/重定向)【跳转代码写死】
传统mvc开发总结:
1.跳转代码写死,不灵活
2.每次都去写servlet,web.xml中配置servlet!
(配置目的:
请求,Servlet处理类)
需求:
登陆、注册
登陆成功--首页
注册成功
--登陆
--首页
2.基于mvc模式的应用框架之struts
Struts就是基于mvc模式的框架!
(struts其实也是servlet封装,提高开发效率!
)
Struts开发步骤:
1.web项目,引入struts-jar包
2.web.xml中,引入struts的核心功能
配置过滤器
3.开发action
4.配置action
src/struts.xml
1.引入8个jar文件
2.web.xml
--引入struts核心过滤器-->
3.开发Action
//开发action:
处理请求
publicclassHelloActionextendsActionSupport{
//处理请求
publicStringexecute()throwsException{
System.out.println("访问到了action,正在处理请求");
System.out.println("调用service");
return"success";
}
}
4.配置action:
src/struts.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
3.Struts框架学习
a.框架学习概述
SSH框架在mvc模式的的位置作用:
框架:
软件中的框架,是一种半成品;我们项目开发需要在框架的基础上进行!
因为框架已经实现了一些功能,这样就可以提高开发效率!
b.Struts2框架
Struts1最早的一种基于mvc模式的框架;
Struts2是在Struts1的基础上,融合了xwork的功能;
也可以说,Struts2=struts1+xwork
Struts2框架预先实现了一些功能:
1.请求数据自动封装
2.文件上传的功能
3.对国际化功能的简化
4.数据效验功能
……………….
c.Struts2开发流程:
版本:
2.3
Ø引入jar文件
commons-fileupload-1.2.2.jar【文件上传相关包】
commons-io-2.0.1.jar
struts2-core-2.3.4.1.jar【struts2核心功能包】
xwork-core-2.3.4.1.jar【Xwork核心包】
ognl-3.0.5.jar【Ognl表达式功能支持表】
commons-lang3-3.1.jar【struts对java.lang包的扩展】
freemarker-2.3.19.jar【struts的标签模板库jar文件】
javassist-3.11.0.GA.jar【struts对字节码的处理相关jar】
Ø配置web.xml
Tomcat启动-加载自身web.xml---加载所有项目的web.xml
通过在项目的web.xml中引入过滤器,
-Struts的核心功能的初始化,通过过滤器完成
filter【
init/启动执行
doFilter/访问执行
destroy
】
--引入struts核心过滤器-->
struts2-core-2.3.4.1.jar
StrutsPrepareAndExecuteFilter即为核心过滤器
注意:
使用的struts的版本不同,核心过滤器类是不一样的!
Ø开发Action
注意:
1.action类,也叫做动作类;一般继承ActionSupport类
即处理请求的类(struts中的action类取代之前的servlet)
2.action中的业务方法,处理具体的请求
-必须返回String
方法不能有参数
publicclassHelloActionextendsActionSupport{
//处理请求
publicStringexecute()throwsException{}
}
Ø配置struts.xml
c.Struts2执行流程
服务器启动:
1.加载项目web.xml
2.创建Struts核心过滤器对象,执行filterinit()
struts-default.xml,核心功能的初始化
struts-plugin.xml,struts相关插件
struts.xml用户编写的配置文件
访问:
3.用户访问Action,服务器根据访问路径名称,找对应的aciton配置,创建action对象
4.执行默认拦截器栈中定义的18个拦截器
5.执行action的业务处理方法
struts-default.xml,详解
目录:
struts2-core-2.3.4.1.jar/struts-default.xml
内容:
1.bean节点指定struts在运行的时候创建的对象类型
2.指定struts-default包【用户写的package(struts.xml)一样要继承此包】
packagestruts-default包中定义了:
a.跳转的结果类型
dispatcher转发,不指定默认为转发
redirect重定向
redirectAction重定向到action资源
stream(文件下载的时候用)
b.定义了所有的拦截器
定义了32个拦截器!
为了拦截器引用方便,可以通过定义栈的方式引用拦截器,
此时如果引用了栈,栈中的拦截器都会被引用!
defaultStack
默认的栈,其中定义默认要执行的18个拦截器!
c.默认执行的拦截器栈、默认执行的action
name="prepare"class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/> name="params"class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 拦截器(先睹为快): 拦截器功能与过滤器功能类似。 区别: 共同点: 都拦截资源! 区别: 过滤器,拦截器所有资源都可以;(/index.jsp/servlet/img/css/js) 拦截器,只拦截action请求。 拦截器是struts的概念,只能在struts中用。 过滤器是servlet的概念,可以在struts项目、servlet项目用。 //面试题: 拦截器什么时候执行? (访问/启动)先执行action类创建,先执行拦截器? //--》1.用户访问时候按顺序执行18个拦截器; //---》2.先执行Action类的创建,再执行拦截器;最后拦截器执行完,再执行业务方法 d.共性问题 问题1: Struts.xml配置文件没有提示 解决a: 找到struts-2.0.dtd文件,拷贝到某个目录: d: /dtd/..(不要用中文目录) 让MyEclipse关联到上面dtd文件, windowspreferences-搜索xmlcatalog 配置: Location: 上面配置的dtd目录 Key: -//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN 解决b: 或者, 让机器连接互联网,工具会自动下载dtd文件,缓存到MyEclipse中! 1 <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
--
-->
欢迎你,${sessionScope.userInfo.name}
2
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
--
-->
用户名:
密码:
3
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
--
-->
用户名:
密码:
Dao
packagecn.itcast.dao;
importcn.itcast.entity.User;
publicclassUserDao{
//模拟登陆
publicUserlogin(Useruser){
if("tom".equals(user.getName())&&"888".equals(user.getPwd())){
//登陆成功
returnuser;
}
//登陆失败
returnnull;
}
//模拟注册
publicvoidregister(Useruser){
System.out.println("注册成功:
用户,"+user.getName());
}
}
Entity
packagecn.itcast.entity;
publicclassUser{
privateStringname;
privateStringpwd;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPwd(){
returnpwd;
}
publicvoidsetPwd(Stringpwd){
this.pwd=pwd;
}
}
Framework
ActionServlet
packagecn.itcast.framework;
importjava.io.IOException;
importjava.lang.reflect.Method;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcn.itcast.framework.bean.ActionMapping;
importcn.itcast.framework.bean.ActionMappingManager;
importcn.itcast.framework.bean.Result;
/**
*核心控制器,此项目只有这一个servlet
*1.拦截所有的*.action为后缀的请求
*2.请求:
http:
//localhost:
8080/mystruts/login.action
*http:
//localhost:
8080/mystruts/register.action
*@authorJie.Yuan
*
*/
publicclassActionServletextendsHttpServlet{
privateActionMappingManageractionMappingManager;
//只执行一次(希望启动时候执行)
@Override
publicvoidinit()throwsServletException{
System.out.println("1111111111111111ActionServlet.init()");
actionMappingManager=newActionMappingManager();
}
//http:
//localhost:
8080/mystruts/login.action
@Override
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
try{
//1.获取请求uri,得到请求路径名称【login】
Stringuri=request.getRequestURI();
//得到login
StringactionName=uri.substring(uri.lastIndexOf("/")+1,uri.indexOf(".action"));
//2.根据路径名称,读取配置文件,得到类的全名【cn..action.LoginAction】
ActionMappingactionMapping=actionMappingManager.getActionMapping(actionName);
StringclassName=actionMapping.getClassName();
//当前请求的处理方法【method="login"】
Stringmethod=actionMapping.getMethod();
//3.反射:
创建对象,调用方法;获取方法返回的标记
Class
>clazz=Class.forName(className);
Objectobj=clazz.newInstance();//LoginActionloginAction=newLoginAction();
Methodm=clazz.getDeclaredMethod(method,HttpServletRequest.class,HttpServletResponse.class);
//调用方法返回的标记
StringreturnFlag=(String)m.invoke(obj,request,response);
//4.拿到标记,读取配置文件得到标记对应的页面、跳转类型
Resultresult=actionMapping.getResults().get(returnFlag);
//类型
Stringtype=result.getType();
//页面
Stringpage=result.getPage();
//跳转
if("redirect".equals(type)){
response.sendRedirect(request.getContextPath()+page);
}else{
request.getR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)