struts基础文档格式.docx
- 文档编号:18804199
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:26
- 大小:45.62KB
struts基础文档格式.docx
《struts基础文档格式.docx》由会员分享,可在线阅读,更多相关《struts基础文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
3.开发action
4.配置action
src/struts.xml
1.引入8个jar文件
2.web.xml
<
!
--引入struts核心过滤器-->
<
filter>
<
filter-name>
struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<
/filter-class>
/filter>
filter-mapping>
url-pattern>
/*<
/url-pattern>
/filter-mapping>
3.开发Action
//开发action:
处理请求
publicclassHelloActionextendsActionSupport{
//处理请求
publicStringexecute()throwsException{
System.out.println("
访问到了action,正在处理请求"
);
调用service"
return"
success"
;
}
}
4.配置action:
?
xmlversion="
1.0"
encoding="
UTF-8"
>
DOCTYPEstrutsPUBLIC
"
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
http:
//struts.apache.org/dtds/struts-2.0.dtd"
struts>
packagename="
xxxx"
extends="
struts-default"
actionname="
hello"
class="
cn.itcast.action.HelloAction"
method="
execute"
resultname="
/success.jsp<
/result>
/action>
/package>
/struts>
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
】
struts2-core-2.3.4.1.jar
StrutsPrepareAndExecuteFilter即为核心过滤器
注意:
使用的struts的版本不同,核心过滤器类是不一样的!
开发Action
1.action类,也叫做动作类;
一般继承ActionSupport类
即处理请求的类(struts中的action类取代之前的servlet)
2.action中的业务方法,处理具体的请求
-必须返回String
方法不能有参数
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
<
default-interceptor-refname="
defaultStack"
/>
default-class-refclass="
com.opensymphony.xwork2.ActionSupport"
/>
interceptor
name="
prepare"
class="
com.opensymphony.xwork2.interceptor.PrepareInterceptor"
params"
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="
%>
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
html>
head>
title>
index<
/title>
metahttp-equiv="
pragma"
content="
no-cache"
cache-control"
expires"
0"
keywords"
keyword1,keyword2,keyword3"
description"
Thisismypage"
--
linkrel="
stylesheet"
type="
text/css"
href="
styles.css"
-->
/head>
body>
欢迎你,${sessionScope.userInfo.name}
/body>
/html>
2
login<
formaction="
${pageContext.request.contextPath}/login.action"
name="
frmLogin"
method="
post"
用户名:
inputtype="
text"
name"
br/>
密码:
pwd"
submit"
value="
登陆"
/form>
3
${pageContext.request.contextPath}/register.action"
frmRegister"
用户名:
注册"
Dao
packagecn.itcast.dao;
importcn.itcast.entity.User;
publicclassUserDao{
//模拟登陆
publicUserlogin(Useruser){
if("
tom"
.equals(user.getName())&
&
888"
.equals(user.getPwd())){
//登陆成功
returnuser;
}
//登陆失败
returnnull;
//模拟注册
publicvoidregister(Useruser){
注册成功:
用户,"
+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.请求:
//localhost:
8080/mystruts/login.action
*http:
8080/mystruts/register.action
*@authorJie.Yuan
*
*/
publicclassActionServletextendsHttpServlet{
privateActionMappingManageractionMappingManager;
//只执行一次(希望启动时候执行)
@Override
publicvoidinit()throwsServletException{
1111111111111111ActionServlet.init()"
actionMappingManager=newActionMappingManager();
//http:
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 基础