A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石绍洋 高级黑马   /  2017-4-26 20:23  /  1268 人查看  /  2 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

Servlet也是在Web容器中运行的,Servlet的生命周期容器启动的时候,会加载servlet的class,并new出这个对象,然后,当用户请求这个servlet的时候,容器会调用init方法初始化这个 servlet,这也是整个生命周期中只会调用一次的方法,然后,会调用service方法,由这个方法调用doGet或doPost方法来响应用户,然后,容器在可用资源紧张或是长期没有对Servlet发出请求的情况下,会销毁这个servlet。struts是一个基于MVC模式的一个框架,分别是表示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的servlet接收(ActionServlet Struts已经为我们写好了,只要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的请求参数和Struts配置(struts-config.xml)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。==================1、分析的servlet
   客户端--->web容器-->web.xml-->servlet来处理 ----->model-->数据库
   (web.xml返回信息)
(1)//转发
request.setAttribute(“username”,username);(存入)
request. getRequestDispatcher (“manager/index.jps”).forward(request,response);
然后在jsp页面中使用  ${username}显示
(2)//重定向
response.sendRiedirect();
2、分析 struts2
客户端----->web容器--->web.xml-->struts2过滤器--->struts.xml--->Action--->model--->数据库
(Action返回信息  Action 要想把数据传递给jsp)
3、Struts2中结果集类型
(1)每个action方法都返回一个String类型的值,struts一次请求返回什么值是由这个值确定的。
(2)在配置文件中,每一个action元素的配置都必须有result元素,每一个result对应一个action的返回值。
(3)Result有两个属性:
name:结果的名字,和action中的返回值一样,默认值为success;
type:响应结果类型,默认值为dispatcher.   
(4)说明:
1、  从上述可以看出总共10种类型
2、  默认类型为ServletDispatcherResult即转发。
3、  结果类型可以是这10种结果类型的任意一种。
4、主要介绍几种类型:
(1)Dispatcher类型是最常用的结果类型,也是struts框架默认的结果类型。
在配置文件中,可以有两种写法:
第一种:
<result type=”dispatcher”name=”success”>/manager/index.jsp</result>
第二种:
<result name=”success”type=”dispatcher”>
<param name=”location”>/manager/index.jsp</param></result>
(2)Redirect类型属于重定向。如果用redirect类型,则在reuqest作用域的值不能传递到前台。
(3)redirectAction类型把结果类型重新定向到action可以接受两种参数
actionName: action的名字
namespace:命名空间
例子
第一种方式:
<result name="success" type="redirectAction">resulttype/redirectactionAction.action</result>
第二种方式:
<result name="success"type="redirectAction">
       <!-- actionName:请求的action的路径
       namespace:如果不写,默认就是请求的action的路径,如果写,路径将被重新赋值-->
       <paramname="actionName">
              resulttype/redirectactionAction.action
       </param>
</result>


请求的路径
http://localhost:8080/project/csdn/csdn/delete.action?name=aa

Namespace=”csdn/csdn/”
<package name=”ss” namespace=”/csdn/csdn”>
       <action=”delete”>
</package>
<package name=”test” namespace=”/csdn”>
<action=”delete”>
</package>
<package name=”sss” namespace=””>
   <action=”delete”>
</package>

5、Action名称的搜索顺序
(1)、获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action
(2).首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package则转步骤3;
(3).寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package,则转步骤4;
(4).寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个package,就去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串""),如果还是找不到,页面提示找不到action。

Action原型  struts2
Prototype 原型    每次请求都会创建一个新的Action对象   
Singleton 原型    当第一次请求时,创建servlet对象之后每次都使用该对象即可。

Servlet的生命周期:创建---init---service---destory

2 个回复

倒序浏览
servlet等实际工作中,可能永远也用不到,因为没有公司会不用框架
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
kevin0 发表于 2017-4-27 00:48
servlet等实际工作中,可能永远也用不到,因为没有公司会不用框架

也要理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马