struts2

1.SSH:Struts2+Spring+Hibernate
2.SSM:Spring+Spring mvc+Mybatis


3.MVC
Model(模型层):vo(javaBean,Entity,pojo)、service业务层、dao数据访问层
dao常用的技术:JDBC、数据库连接池(dbcp\c3p0\alibaba)、commons-dbutils,hibernate,mybatis
View(视图层):css,js,html,jsp,freemarker,jquery,extjs,easyui,bootstrap,dwr...
Controller(控制层):servlet,struts2,springmvc,jfinal(控制层\数据访问层)




spring:统一管理各层面的数据,起到一个中间桥梁的作用。


4.struts2环境搭建
4.1.导入相应的jar
4.2.在web.xml中配置核心控制器(StrutsPrepareAndExecuteFilter).
init():初始化相应的资源(配置文件--web.xml,struts.xml、常量信息等等)。
doFilter():拦截全部的http请求,调用拦截器组件,调用action组件,调用result组件。
destory():销毁资源。
4.3.struts.xml:放在src目录下做相应的配置。
<!-- <package name="helloWorld" namespace="/" extends="struts-default"> -->
   <!-- 必须要继承于extends="struts-default -->
   <package name="helloWorld" namespace="/aa" extends="struts-default">
   <!-- 1.name="helloWorld" 别名   
    2.class="com.chinasofti.action.HelloWorldAction" 别名所对应的类-->
       <action name="helloWorld" class="com.chinasofti.action.HelloWorldAction">
           <result>/first/index.jsp</result>
       </action>
   </package>
   4.4.jsp访问时指明url。(url+nameSpace+action别名+.action)
   4.5.action当中定义一个默认的方法execute()方法并返回一个字符串。(success)
  
5.属性驱动模型
在action当中,直接使用javaBean对象类型或成员变量接收表单上的数据(前提:视图层表单上的name属性必须与javaBean中的成员变量或action当中定义的成员变量一致).
   


   
6.struts2工作原理
6.1.web容器启动,调用核心控制器(StrutsPrepareAndExecuteFilter)的init()方法,做初始化操作[加载配置文件、常量信息(javaBean)]
6.2.当客户端发起请求(http),核心控制器收到请求后,由ConfigurationManager去封装的javaBean(struts.xml)中去查找所对应的资源;
6.3.执行struts2内部一的一个个拦截器;
6.4.进入相应的action类中执行相应的方法(默认执行execute方法,也可以通过method指定方法);(ActionInvocation组件)
6.5.逆向执行一遍拦截器;
6.6.根据封装的javaBean(struts.xml)中的配置信息,去查找业务方法执行完成后返回的字符串所对应的资源(result组件);
6.7.将资源呈现给用户(EL,ognl,Struts2标签)。

7.指定方法去执行
在action标签上加上method属性,指明要调用的方法。

8.解决配置文件中action标签过多的问题:
8.1使用动态方法调用(不推荐)   
a.使用动态方法调用时,需开启此开关 
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
b.动态方法调用url:项目名+action名字!方法名字+.action
8.2使用通配符方式 *
a.梳理一定的规则
   b.*
          第一个参数{1},第二个参数{2}依次类推
   c.action别名(拼接的).action
   
9.result标签中的type类型


9.1.type="dispatcher":请求转发,服务端跳转,等价于request.getRequestDispatcher("XXX.jsp").forward(request,response).
9.2.type="chain":用来跳转action,能够保证数据不丢失,而且地址栏不会发生改变(服务端操作)推荐使用
9.3.type="redirect":客户端重定向,等价于response.sendRedirect("XXX.jsp") 
9.4.type="redirectAction":重定向action    


10.struts2提供了两种方式可以得到servlet对象
10.1.struts2可以得到servlet对象,方法一(与servlet是耦合)
HttpServletRequest request=ServletActionContext.getRequest();//接收用户请求
HttpServletResponse response=ServletActionContext.getResponse();//响应用户请求
ServletContext servletContext = ServletActionContext.getServletContext();//得到上下文对象
HttpSession session = request.getSession();//得到session对象
10.2.struts2可以得到servlet对象,方法二(与servlet是解耦)---推荐使用
ActionContext context = ActionContext.getContext();//得到上下文对象
Map<String, Object> request2=(Map<String, Object>)context.get("request");
request2.put("key", "value");//request.setAttribute("key", "value");
request2.get("key");//request.getAttribute("key");
Map<String, Object> session2 = context.getSession();//得到session
Map<String, Object> application = context.getApplication();//得到上下文对象
HttpServletRequest request3=(HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
HttpServletResponse response2=(HttpServletResponse)context.get(StrutsStatics.HTTP_RESPONSE);

11.作为面试出现:struts2和struts1的区别
struts2是webwork的升级版,仅仅吸收了很少的strus1的思想。
Action实现:struts1继承抽象的父类,struts2不需要。
Action实例化:struts1中Action是单例模式,Struts2为每一个请求创建一个Action实例。
与jsp/Servlet耦合:struts1在调用传统的jsp/servletAPI,但struts2可以调用jsp/servlet的API(不推荐),但重新封装了其他的API(与jsp/servlet无关),实现解耦。
测试方面:因为Struts1仍然调用servlet的API,因此测试必须依赖于web服务器,但Struts2可通过实例化,方法调用的方式测试。
表达式语言:struts1整合了JSTL,struts2则整合了 更为强大的OGNL表达式。
总之struts2与struts1除了命名之外,其实没有多大关系。

注意事项:
web.xml 中配置核心控制器
struts.xml文件 中做配置:package标签上指明:
namespace,extends="sturts-default",
result:name="success",type="dispacher"(默认)--action当中方法执行完成后需返回一个字符串(ajax技术实现除外)
url地址访问:namespace+action别名+.action(相对于项目的绝对路径)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值