struts的入门详解配置

启动服务器时报错,很有可能是jar包导入出错了

 

代码复用性

 

模型层:模型接收视图请求的数据,并返回最终的处理结果,业务还有很重要的模型,就是数据模型(实体对象的数据保存)

 

MVC模式的优点

松散耦合:分层的结构可以降低耦合性,因此改变其中的一层不会影响到其他,也很容易使用新的实现替换层原有的实现。

逻辑复用:分层的结构有利于各层的复用。

方便开发:分层的结

 

构使得开发时分工更明确。相关人员可以专注自己擅长的领域,从而提高开发效率,另一方面也可以减少低级错误。

方便维护:分层的代码易于阅读,方便维护管理升级。

 

模型层:业务逻辑层,数据逻辑层

 

Action的执行路径问题

当命名空间存在时:

当struts2接收的url分为namespace和action名字两部分

 

1、若找到与之同名的namespace:a、找到对应的action,则执行 b、若找不到对应的action,则会跳转到默认的命名空间下去寻找

2、若找不到对应的namespace ,则去寻找会去找最长的命名空间 a、找到执行 b、找不到的话则回去默认的命名空间下去寻找,默认的命名空间为空字符串

Xml的配置问题:      namespace需要加”/”   提交的action回去匹配namespace/action,这是加/表示    

 

优先级的问题

在与被包含的文件中有同名的action时,struts.xml中的优先级最高。

在处理include时,包含关系时,不同保重定义了同名的action,后出现的优先级高,后包含的执行。

 

路径问题

在实现JSP页面的跳转中:在提交action时,不加“/”表示当前项目下,,若加/表示8080后

在struts2.xml 中实现页面跳转时:加”/”表示根目录下,表示WebRoot下。

 

文件名与action名相同时,文件名的优先级高

 

Error 表示执行中出错,Input表示输入有误

 

常量配置的搜索顺序

1.Struts-default.xml    2、struts.plugin.xml  3.struts.xml   4.strtus.properties   5.  Web.xml

 

后搜索的优先级高

 

同一个action可能有多个result元素

 

和action组件相关

动态方法调用

 

语法格式:actionName!方法名{.action}

方法名是指:类中的方法名

1.类中的返回值不同

2.Result不同的配置

 

调用:项目/

 

默认action(解决错误404,弹出提示页面)

 

语法:struts.xml 

<default-action-ref   name=””/>

必须在action定义前使用

任意的含义:只对action起作用

 

在配置文件中使用通配符

 

简化action *_*

*表示匹配0个或多个字符,斜杠除外

**匹配0个或多个字符,包括斜杠

 

转义字符

与通配符匹配的时候用数字1~9与顺序出现的*匹配

匹配原则:  

 1、完全匹配的先执行   

 2、文件中从前往后执行

 3、配置文件时,不要把<action name=“*” >放在前面,否则无法达到匹配目的。

 

结果视图类型:结果映射   

Result 1、name   2、type   默认值:dispatcher       param name=“location”>jsp

 

struts2中是采用<package>元素来管理Action的,package的作用类似于java中的类包。
它管理一组业务功能相关的action。而namespace属性可以不配置,主要是为了避免package中的
action重名,还有就是当有namespace时,可以减少配置的书写量,因为相同路径的action请求可以放置在同一个名称空间下,这样就不用每次都写出名称空间值所代表的路径。
最后还说一点,在页面跳转时,struts2自动寻找匹配的action,namespace的优先权大于package.

 

Type=redirect   使用能够避免重复提交的问题

 

模型层包括:业务逻辑层和数据逻辑层(实体对象的数据保存)。

 

Action类的实现

Struts2中的普通Java类作为Action类的前提(POJO)

具有成员方法——public String execute()

实现接口:com.opensymphony.xwork2.Action

继承父类:com. pensymphony.xwork2.ActionSupport(提倡)

 

Action映射

框架中的基本“工作单元”

将一个请求URI(即action名字)映射到一个action类,当一个请求匹配某个action名字时,就使用该映射来确定如何处理请求。

struts.xml文件中的每一个action元素就是一个action映射。

 

使用EL表达式时,若使用传参的方式  ${param.属性}

 

使用结果类型redirect会造成信息丢失

 

Struts 内建的结果类型

 

实现接口org.apache.struts2.interceptor.RequestAware、SessionAware、ApplicationAware

框架利用接口向Action实例注入Map对象

public class LoginAction2 implementsRequestAware, SessionAware {  

                     privateMap request;  

                     privateMap session;

                     //setter

                   public String execute() throws Exception{

                            request.put(“greeting”,“欢迎”);

                            session.put(“user”,user);

                   }

   }  

先在servletRequest对象上调用getHeader()方法提取出header字段的值,通过referer 来控制是否通过链接的方式来访问action,可以避免用户直接访问action 

Unable to intantiate Action!   不能实例化动作   可能原因是把动作类定义为了抽象类

Result访问时,是根据当前路径进行访问的

Struts2要保证所有编码方式都是一致的。

动态结果   全局结果    right 为mysql中的关键字

1.java.sql.SQLException: Before start ofresult set

 

在调用查询的ResultSet时 没有写rs.next;

 

2.1ava.sql.SQLException:Unknown column'admin' in 'where clause'

错误是由下面这句代码引起的:

ps=ct.prepareStatement("select passwdfrom users where username="+u+"'order by userId limit 0,1");

应该将其改为下面的形式:

ps=ct.prepareStatement("select passwdfrom users where username='"+u+"' order by userId limit 0,1");

 

 因为username的值应该是string形式的,所以,应加 '' 单引号

 

OGNL:一种强大的表达式语言,通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。

 

根对象只有一个

 

围绕OGNL表达式的上下文来进行,OGNL的上下文其实就是一个MAP对象

 

OGNL上下文可以包含一个或多个对象,其中有一个是特殊的对象,称为上下文的根(root)对象。

 

查询hashcode()方法

 

生成List的语法为:  {e1,e2,e3}

示例:{”zhangsan”,”lisi”,”wangwu”}

生成带有3个元素的List对象,元素类型为String

OGNL操作集合

 

1、值栈(valuestack){object stack     context Map}

默认操作栈顶的对象      并把值栈设为跟对象    

 

对于值栈中的任何对象都可以直接访问,而不需要使用“#”

值栈访问:

(1).[0].name     值栈中也有索引 N从0开始,,实际含义从N开始向下查找,向下截取

(2)Top关键字 用于获取栈顶的对象  获取的就是Object()对象本身

结合[N].xxx语法,可以获取栈中任意位置的对象

 

通常值栈只有一个对象,使用chain时可能有多个对象先访问先入栈

 

值栈中存的是静态成员(静态成员访问)可用来替代全限定的内容

1、@VS(valuestack)@属性,或方法

2、VSN表示的是值栈中指定位置的成员

 

 

Redirect:可以跳转到项目外的路径

 

Value stack 中action对象通常位于栈顶,是栈顶对象,通常栈中只有一个对象

 

 

List,listkey,listvalue 对于radion,checkbox,select,checklist,doubleselect等标签来说非常重要

将由一组值  和  一组行标组成       

 

由Action跳到jsp   在涉及到表单时要避免硬编码 

Checkboxlist 标签将被映射到一个字符串数组或是一个基本类型的数组。如果一个也没被选中,相应的属性将被赋值为一个空数组而不是空值。

 

为什么不能定义static 修饰的get方法

 

与Select标签不同,combobox标签提供的选项不需要键值。另外,在用户提交表单时,被发送到服务器去的是选中的行标而不是它的值。

 

如何用EL表达式表示数组?剩余的两个标签的使用

 

Struts2 action 类 推荐继承父类,便于国际化和表单验证。

 

当包继承了struts-default才能使用struts2提供的核心功能,其中很多(把请求参数封装到action、文件上传和数据验证等)由拦截器实现。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值