Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己
目录:action生命周期、result中关于name属性的配置和type属性、struts.xml中package中的全局的配置、如何在action中获取servlet-api中的request和session和response、IOC思想
Struts2 框架学习(二):
一、action生命周期
对于每次httpservlet的请求,都会产生一个新的action 的实例
二、result中关于name属性的配置和type属性(struts.xml)
1、name 属性:在struts2中有一些默认的比如success和error,input等,当然也可以自己对name属性进行自定义
<result name="input">index.jsp</result> 可以返回到某一个页面上面
<result name="input">student1</result> 也可以去请求一个路径
2、type属性:默认的dipatcher
redirect 重定向、chain链、redirectAction 重定向到一个action
三、struts.xml中package中的全局的配置
代码示例:
<!-- 全局配置 -->
<global-results>
<result name="error">index.jsp</result>
</global-results>
四、如何在action中获取servlet-api中的request和session和response
1、通过ServletActionContext获取内置对象
代码示例:
HttpServletRequest request = ServletActionContext.getRequest(); //直接获得 request 对象
HttpServletResponse response = ServletActionContext.getResponse();//直接获得response对象
HttpSession session = (HttpSession)ServletActionContext.getContext().getSession();//获取session 对象
Map application = ServletActionContext.getContext().getApplication();//获取application 对象
注:application这里返回的形式是map类型
2、通过Actioncontext获取内置对象
代码示例:
ActionContext cxt = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)cxt.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)cxt.get(ServletActionContext.HTTP_RESPONSE);
// (HttpSession)cxt.getSession();
HttpSession session = (HttpSession)cxt.get(ServletActionContext.SESSION);
//(Application)cxt.getApplication();
Map application = (Map)cxt.get(ServletActionContext.APPLICATION);
3、通过IOC方式获取内置对象
3.1.当前的action实现SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware接口
代码示例:
public class LoginAction implements
Action,SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware{
private HttpServletRequest request; //HttpServletRequest型变量request声明
private HttpServletResponse response; //HttpServletResponse型变量response声明
private Map session; //HttpSession型变量session声明
private Map application; //Application型变量application声明
//测试action是否每次新生成的一个实例
//public LoginAction() {
// TODO Auto-generated constructor stub
// System.out.println(this);
//}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return "error";
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
@Override
public void setApplication(Map<String, Object> application) {
// TODO Auto-generated method stub
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session = session;
}
}
五、IOC思想
1、IOC概念:控制反转(Inversion of Control,英文缩写为IoC)
控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
依赖注入应用比较广泛。
2、IoC模式:看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML
文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以
前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的
就是提高灵活性和可维护性。
3、主要可以划分为三种类型:构造函数注入、属性注入和接口注入
六、拦截器(自定义拦截器,jar包struts-defalut.XML中可以看)
1、在(com.zr.interceptor)创建一个类来实现Interceptor 接口(自定义拦截器)
代码示例:
public class MyInterceptor implements Interceptor{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
String result = invocation.invoke();
System.out.println(result);
return result;
}
}
2、针对某一个action 进行拦截(注册拦截器)
代码示例:
<package name="zr" extends="struts-default">
<interceptors>
<interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
</interceptors>
<action name="abc" class="com.zr.controller.ShowController" method="showMsg">
<result name="success">index.jsp</result>
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
通过定义拦截器栈,对package下面的所有action都经过这个拦截器栈
代码示例:
注:在引入拦截器栈的时候,需要放在action上面
<struts>
<constant name="struts.configuration.xml.reload" value="true"/>
<package name="zr" extends="struts-default">
<interceptors>
<interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
<interceptor name="test2" class="com.zr.interceptor.MyInterceptor2"/>
<interceptor-stack name="mystack">
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="test2"></interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<action name="abc" class="com.zr.controller.ShowController" method="showMsg">
<result name="success">index.jsp</result>
</action>
</package>
</struts>
目录:action生命周期、result中关于name属性的配置和type属性、struts.xml中package中的全局的配置、如何在action中获取servlet-api中的request和session和response、IOC思想
Struts2 框架学习(二):
一、action生命周期
对于每次httpservlet的请求,都会产生一个新的action 的实例
二、result中关于name属性的配置和type属性(struts.xml)
1、name 属性:在struts2中有一些默认的比如success和error,input等,当然也可以自己对name属性进行自定义
<result name="input">index.jsp</result> 可以返回到某一个页面上面
<result name="input">student1</result> 也可以去请求一个路径
2、type属性:默认的dipatcher
redirect 重定向、chain链、redirectAction 重定向到一个action
三、struts.xml中package中的全局的配置
代码示例:
<!-- 全局配置 -->
<global-results>
<result name="error">index.jsp</result>
</global-results>
四、如何在action中获取servlet-api中的request和session和response
1、通过ServletActionContext获取内置对象
代码示例:
HttpServletRequest request = ServletActionContext.getRequest(); //直接获得 request 对象
HttpServletResponse response = ServletActionContext.getResponse();//直接获得response对象
HttpSession session = (HttpSession)ServletActionContext.getContext().getSession();//获取session 对象
Map application = ServletActionContext.getContext().getApplication();//获取application 对象
注:application这里返回的形式是map类型
2、通过Actioncontext获取内置对象
代码示例:
ActionContext cxt = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)cxt.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)cxt.get(ServletActionContext.HTTP_RESPONSE);
// (HttpSession)cxt.getSession();
HttpSession session = (HttpSession)cxt.get(ServletActionContext.SESSION);
//(Application)cxt.getApplication();
Map application = (Map)cxt.get(ServletActionContext.APPLICATION);
3、通过IOC方式获取内置对象
3.1.当前的action实现SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware接口
代码示例:
public class LoginAction implements
Action,SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware{
private HttpServletRequest request; //HttpServletRequest型变量request声明
private HttpServletResponse response; //HttpServletResponse型变量response声明
private Map session; //HttpSession型变量session声明
private Map application; //Application型变量application声明
//测试action是否每次新生成的一个实例
//public LoginAction() {
// TODO Auto-generated constructor stub
// System.out.println(this);
//}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return "error";
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
@Override
public void setApplication(Map<String, Object> application) {
// TODO Auto-generated method stub
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session = session;
}
}
五、IOC思想
1、IOC概念:控制反转(Inversion of Control,英文缩写为IoC)
控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
依赖注入应用比较广泛。
2、IoC模式:看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML
文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以
前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的
就是提高灵活性和可维护性。
3、主要可以划分为三种类型:构造函数注入、属性注入和接口注入
六、拦截器(自定义拦截器,jar包struts-defalut.XML中可以看)
1、在(com.zr.interceptor)创建一个类来实现Interceptor 接口(自定义拦截器)
代码示例:
public class MyInterceptor implements Interceptor{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
String result = invocation.invoke();
System.out.println(result);
return result;
}
}
2、针对某一个action 进行拦截(注册拦截器)
代码示例:
<package name="zr" extends="struts-default">
<interceptors>
<interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
</interceptors>
<action name="abc" class="com.zr.controller.ShowController" method="showMsg">
<result name="success">index.jsp</result>
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
通过定义拦截器栈,对package下面的所有action都经过这个拦截器栈
代码示例:
注:在引入拦截器栈的时候,需要放在action上面
<struts>
<constant name="struts.configuration.xml.reload" value="true"/>
<package name="zr" extends="struts-default">
<interceptors>
<interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
<interceptor name="test2" class="com.zr.interceptor.MyInterceptor2"/>
<interceptor-stack name="mystack">
<interceptor-ref name="test"></interceptor-ref>
<interceptor-ref name="test2"></interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<action name="abc" class="com.zr.controller.ShowController" method="showMsg">
<result name="success">index.jsp</result>
</action>
</package>
</struts>