发表于: 2017-11-14 18:14:32
1 830
一.今天完成的主要事情
1.对struts中的几个文件进行学习
首先是web.xml文件,因为MVC框架要和web应用整合,所以必须要用web.xml文件,struts2的过滤器就配置在web.xml文件中.
目前的核心过滤器为StrutsPrepareAndExecuteFilter,但是在2.1.3版本之前,核心过滤器并不是该过滤器,而是DispacterFilter.
进行升级的原因是因为DispacterFilter只支持在核心过滤器之前添加自定义过滤器,而现在使用的核心过滤器不仅可以在核心过滤器之前添加自定义过滤器,还可以在核心过滤器之后添加自定义过滤器,功能更为强大,StructPrepareAndExecuteFilter的配置同一般的过滤器一样
其次是struts.xml文件,该文件是struts的核心配置文件,该文件负责管理Action和请求之间的映射关系以及Action包含的Result定义,同时还可以配置struct拦截器.
struts.xml文件中包含很多标签,每个标签代表的含义和功能也不同.
第一是要添加约束,规定了配置文件中可以写什么标签,不能写什么标签
第二是<include>标签,该标签中可以定义其他的配置文件,功能是在当前的配置文件中中引入其他配置文件,这么做的目的是如果有多人开发该项目,那么需要配置很多模块,如果都放在一个配置文件中,所有人都在该文件中更改,非常麻烦而且容易出错,所以我们将配置文件分开,在总的调度文件中引入其他的配置文件,如果修改只需要修改其中的一个即可
第三是<constant>标签,该标签中定义了struts的全局配置,如编码的设置,是否开启开发模式等,这些配置也可以单独放在struts.properties文件中,该配置文件是一个个键值对,可选,但是一般在项目中,肯定是单独配置一个structs.properties文件.
第四是<package>标签,该标签定义了一个个的功能模块,一个配置文件中可以配置多个<package>标签,但是标签名不能相同,<action>标签和<interceptor>标签都配置在<package>标签中.
该标签中还有很多属性,namespace属性,该属性和action标签的name属性组合起来生成请求url;extends属性表示这个包继承的包,一般设置为structs-default,还有abstract属性,标注该包是一个抽象包,抽象包中不能有action标签
<global-resut>定义了全局结果集,功能是该包中的所有action的某个返回结果都返回该页面,一般用于错误页面显示
<action>标签定义了功能类和请求之间的具体映射关系,其中method方法制定具体类中执行的方法,result属性对应执行结果和返回页面之间的关系
2.学习了如何在struts中访问serlvetAPI
通俗点说就是如何在struts中的Action类中获取HttpRequest,Session等servlet对象
有三种方法:
一是ActionContext对象,通过该对象可以获取servlet中的各个对象
二是实现ServletRequestAware,ServletResponseAware,ServletContextAware,SessionAware接口,然后在Action类中获取ServletHttpRequest对象
三是通过ServletActionContext对象获取
以下代码是演示第一种获取servlet对象的方式
@Override
public String execute() throws Exception {
System.out.println("Hello, Struts");
//第一种获取HttpRequest对象的方法,通过ActionContext对象获取http对象
//先获取当前线程的上下文对象
ActionContext actionContext = ActionContext.getContext();
//相当于request.setAttribute()方法
actionContext.put("cellphone", "13500000000");
//获取全局的上下文对象
Map<String, Object> map = actionContext.getApplication();
//返回包含所有HttpRequest对象
HttpParameters httpParameters = actionContext.getParameters();
Set<Map.Entry<String, Parameter>> entries = httpParameters.entrySet();
for (Map.Entry<String, Parameter> map1: entries) {
System.out.println(map1.getKey() + " : " + map1.getValue());
}
//获取并设置一个session对象
Map<String, Object> mapSession = actionContext.getSession();
mapSession.put("name", "wahaha");
actionContext.setSession(mapSession);
String session = (String) mapSession.get("name");
System.out.println("get session, value is : " + session);
可以看到,非常麻烦,所以一般不使用这种方式
二.明天计划完成的事情
1.王蒙已经将前台页面都写好了,我将流程跑几遍,测试逻辑有没有问题
2.如果有时间,继续学习structs框架,掌握其他两种访问servletAPI的方式,并学习action的搜索顺序
三.遇到的问题
暂无
四.收获
以上
五.项目进度情况
争取明天调试完成,后天demo
评论