零碎知识

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

path代表的是当前的request所在的上下文的环境
basePath就是基础路径:协议+://+服务器名称+端口号+当前的路径

basePath:http://ztd-pc:8080/Struts2-0500_ActionMethod_1/
request.getContextPath():/Struts2-0500_ActionMethod_1

实际上Action里面的方法作用在于为每一个特定的请求指明在Action中要调用的方法\

方法也可以不在struts.xml中定义而是在调用这个方法的时候直接的在Action的后边加上"!methodName"

这样做的好处是我们可以简化struts.xml,是代码变得更加的简介,其实这还不是最简洁的,最简洁的是:使用通配符

指定当前的struts为开发模式: <constant name="struts.devMode" value="true" />

配置package期中name和namespace都是根据需要去定名字的,但是这些名字最好是按照包的名字去取,因为这样
会使真实的Action所在的source包和当前的Action配置的包的名字一一对应,这样的好处就是清晰明了,当然namespace
是命名空间,当你要访问某一个Action的时候,必须要带上它的.
 <package name="user" extends="struts-default" namespace="/user">
        <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
        
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
            <result>/user_add_success.jsp</result>
        </action>
    </package>

    Action通配符配置:

     <package name="actions" extends="struts-default" namespace="/actions">
        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
            <result>/Student{1}_success.jsp</result>
        </action>

一个通配符只能够实现对方法的统配,如果要实现对Action和方法都可以统配的话,那么需要的是两个通配符
第一个通配符用来统配Action,第二个通配符用来统配方法和返回的结果

        <!--这种通配符的配置看起来就更加具有诱惑力了-->
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>
    </package>

    设置字符的编码:<constant name="struts.i18n.encoding" value="UTF-8" />但是再好的设置还是没有把所有的页面的字符格式都统一称为UTF-8的好,这才是
    解决问题的最有效的方法

    当复制一个web项目的时候,除了需要修改一下当前的网站的名称之外还需要修改一下它的properties里面的Web属性里面的Web Content-root这个才是在tomcat会去查找的网站的根的路径

<s:fielderror>用法:
其中fieldName指定的是出错的属性的名字,theme指定的是错误显示的格式,simple的格式为一种<ul><li></li></ul>的格式
在后台指定filedName和消息,
this.addFieldError("name", "对不起不是管理员,不准进入!");
this.addFieldError("name", "还是不行!");
this.addFieldError("age", "年龄有问题大哥!");
this.addFieldError("age", "AGE FORMAT IS WRONG!!!!");

前台获取消息,获取的时候可以使用
 <s:fielderror fieldName="name" theme="simple">
  <s:property value="errors.name[0]"/>
  </s:fielderror>

形式,也可以直接的使用
<s:property value="errors.name[0]"/>
这种形式,而且可以指定某一个fieldName里面的第几个错误,因为它是数组的格式返回过来的

问题:取得map类型request,response,application,真实类型:HttpServletRequest,HttpSession,ServletContext的引用


Struts的前三者为什么依赖于容器?????

它们有什么区别???区别在于第一个1500后边有两个"_"
而下面的只有一个"_"
   http://ztd-pc:8080/Struts2_1500__ResultType_1/
   http://ztd-pc:8080/Struts2_1500_ResultType_1/

而下面的区别在于第一个Element里面的"l"是小写的,而后边的是大写的
http://ztd-pc:8080/Struts2_1200_AccessWebElements_1/
http://ztd-pc:8080/Struts2_1200_AccessWebELements_1/

为form赋值的时候直接把当前要访问的Action放上去就可以了,因为浏览器会默认的帮助我们把项目的名字加上去的
http://ztd-pc:8080/Struts2_1200_AccessWebELements_1/login/login1

这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。   

包含其他的struts.xml文件     <include file="login.xml" />

配置常量::<constant name="struts.i18n.encoding" value="UTF-8" />  开发方式 <constant name="struts.devMode" value="true" />


配置默认的jsp
<package name="default" namespace="/" extends="struts-default">
    <default-action-ref name="index"></default-action-ref>
    <action name="index">
    <result>/default.jsp</result>
    </action>
    </package>

    http://ztd-pc:8080/Struts2_1500__ResultType_1/

    http://ztd-pc:8080/Struts2_1500_ResultType_1/

接口包:userDAO只是单纯的负责与数据库打交道
实体包:项目中使用到的实体
服务包:专门为了实现业务而使用的包


面向接口编程的好处:

可以为接口添加多个不同的实类,根据业务需求去实例化一个接口的子类,一个具体对象,而具体的功能不用变
接口可以继承,方法不用全部的去使用,可以使用一个或者多个.
面向抽象编程的好处:就是灵活
映射和反射的区别:映射是一对一的,而反射是一种查找的方法. 

设置el表达式可用

<%@ page isELIgnored="false" %>

i18n.reload、configuration.xml.reload

设置struts2为开发模式
<constant name="struts.devMode" value="true" />

Action的规定:
1.如果是普通类只需要有public String execute(){}方法就可以了
2.实现Action接口类
3.继承了ActionSupport类

在做项目的时候,如果一个项目是拷贝的另外的一个项目的话,除了需要给这个项目重新的命名之外,还需要修改它的Web Project Setting属性(eclipse里面是这样的),在myEclipse里面修改的也是webRoot属性好像是

而且在修改之后需要把tomcat清空,否则新建的项目很难被识别的
    
实际上在配置struts.xml的时候,<package>属性里面的name属性只是作为一个标记来使用的,用来告诉别人这个package里面定义的action都是用来处理哪一个包下面的action请求的并没有其他特殊的作用,不过一个好的习惯是按照包的名字来配置action这样做的好处是你可以很清楚的知道,哪一个包是干嘛的,也容易让别人来看

配置struts.xml的时候,实际上那个namespace跟实际的Action所在的类之间也没有必然的关系,它也是一个指示的标志,不过在访问具体的某个
Action的时候,你必须要把它给加上,如果不加那么程序会去默认的package里面去查找,如果配置了但是里面没有对应的action也是会报错的,它
的配置原则和name的配置原则是一模一样的,程序之所以可以可以调用配置好的Action是因为在配置package里面的action的时候需要指定类的位置,所以说对于Action的配置而言,很简单只需要把自己的package的名字配置的跟自己的Action所在的包的名字相同就可以了.

而result里面的返回的jsp页面的结果需要注意配置好它的位置,为什么呢?你不配置好的话,tomcat它是找不到的,在Action返回页面的时候,它是以当前的项目为根节点的,所以直接放在了webContent目录下面的文件需要"/"代表的是当前的web根目录下面的jsp文件,如果是webContent/aa则需要配置成为/aa/xxx.jsp

junit使用:junit3 过程:1.导入junit的jar包 2.要测试的类继承testCase类 3.被测试的方法命名为testxxx()
junit使用:junit4 可以使用junit3的方法,也可以直接在需要测试的方法上加上@org.junit.Test annotation然后方法命名为testxxx()就可以了

 
Eclipse3.5 反编译插件 在线安装 http://java.decompiler.free.fr/jd-eclipse/update
Eclipse3.5 svn 在线安装 http://subclipse.tigris.org/update_1.6.x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值