实训--day08struts

本文详细介绍了Struts2框架的特点及使用方法,包括其与Struts1.X的区别、优点、核心组件、部署流程及如何通过多种方式处理用户输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                                                                             struts

1、struts:struts的体系与struts1.X体系差别非常大,因为struts2使用了webwork的设计核心(xwork)。
       在struts2中使用拦截器来处理用户请求,从而允许用户逻辑控制器与servletAPI分离
       即一个基于web的MVC框架。


2、struts2的优点:
1)struts2的应用不依赖于servletAPI和strutsAPI,这种设计属于无入侵式设计
2)struts2提供了拦截器,利用拦截器可以进行aop编程,如权限拦截
3)struts2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型
4)提供了全局范围,包范围和action范围的国际化资源等。


3、开发struts2依赖的jar包:
struts2-core-2.x.x.jar:struts2框架的核心类库。
xwork-core-2.x.x.jar:xwork类库,struts2在其上构建
log4j-api-2.x.jar,log4j-core.x.jar:struts2框架使用这个日志包进行日志记录。


servlet加载的时候,web.xml会全部加载。


4、使用域对象接受用户输入的数据:
1)创建使用Struts2的web项目
2)编写登录页面(login.jsp)
3)编写User实体类(javabean):用于接收用户输入的信息。
4)编写LoginAction类
   action类名的编写是有一定规范的,即相对应的bean类加上action结尾。
   action类里面有很多返回值为String类型的方法
5)编写success.jsp和error.jsp页面
6)配置Struts.xml文件
   在Struts.xml配置action和result。通知Struts框架我们写的这个类是一个action,
   将来Struts框架中要给这个类创建对象,调用方法以及这个action加入更多丰富的功能。
   每创建一个action类或者添加了返回值为String的方法之后,都要在struts.xml文件里面进行相应的配置。
7)发布并测试




5、struts.xml:
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="com.swpu.day8.struts.LoginAction">
<result >/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>    
package name:表示给当前package起一个名字为default,并且唯一标识这个package。
package namespace:表示当前package的命名空间为/,将这个package里面的所有action在被访问的时候,前面都要加上这个命名空间。
package extends:继承的包名为那个,一般默认为继承struts2里面的核心默认包struts-default


action name:表示为将来在浏览器要访问这个action类就要以Login开头的名字去匹配。
action class:该action类在项目中的位置,即含包名的全类名。
action result:返回的结果是什么,即想跳转的某个页面。


6、struts2框架默认过滤以".action"结尾的URL,所以我们使用struts框架访问页面上时都要以.action结尾。


7、ModelDriven:
在struts2中,提供了另外一种直接使用领域对象的方式,就是让action实现con.opensymphony.xwork2.ModelDriven接口,
     ModelDriven可以直接操作应用程序中的领域对象。
struts实现了ModelDriven接口,表单字段就不需要再使用user前缀了。


使用action的属性接收用户输入
在某些应用场景或一些简单的应用中,可能不需要使用模型对象,如果单纯为了接收用户的数据数据而创建模型,




struts接收请求里面的参数的方式:
1)通过领域对象来接收参数,在action类中为领域对象创建get,set方法,并且在表单中的name属性里的格式为“对象名.属性名”
2)通过ModelDriven<实体类名>方式接收参数,在action类中实例化实体类,重写getModel方法,返回当前实体类的对象
   并且在表单中name属性里的格式为“属性名”,不需要加上对象名的前缀。
3)使用action的属性接收用户输入的参数,在action中私有属性名称,并且为该属性提供get,set方法。
   并且在表单中name属性里的格式为“属性名”。


访问request、session、application对象


struts访问servletAPI的方式
1)通过解耦合的方式获取:ActionContext.getContext()产生的对象获取request、session、application
2)通过耦合的方式获取:ServletActionContext.getRequest()获取request对象
       ServletActionContext.getServletContext()获取application对象


明天有个面试:记点题。

1:short s1=1,s1=s1+1;这个是不对的,因为1为int型,s1为short,1和s1相加为int型,如果直接复制给short型的会损失精度
   short s1=1,s1+=1;这个是对的,因为s1+=1是s1=s1+1的简写,但是这个简写其实有一个隐式的类型转换,s1=(short)s1+1,所以这个赋值是可以成立的。


2:int 和integer的区别:integer的int的包装类。
public class Test03 {


    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
//因为是Integer类型,所以四个均是对象的引用,所以比较的不是值。而是引用
        System.out.println(f1 == f2);true
        System.out.println(f3 == f4);false
    }
}
简单的说,如果整形字面量的值在-128到127之间,那么不会new新的Integer对象,
而是直接饮用常量池中的Integer对象。






3:面向对象的特征:
抽象:将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象
      抽象只关心对象有哪些属性和行为而不关注这些行为的细节。
继承:从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类,超类,基类。
      得到继承信息的类被称为子类,派生类。继承让变化中的软件系统有了一定的延续性。
      继承也是封装程序中可变因素的重要手段。
封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
      面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对像。
      封装就是隐藏一切可以隐藏的东西,只对外界提供最简单的编程接口。
多态性:允许不同的子类型的对象对同一消息作出不同的响应,即同样的对象引用调用同样的
        的方法但是做了不同的事情。
        分为运行时多态性和编译时多态性。
重载实现的是编译时的多态性,重写实现的是运行时的多态性。


4:栈:定义的基本数据类型的变量,对象的引用,函数调用的现场保存
   堆:通过new关键字和构造器创建的对象的保存,是垃圾收集器管理的主要区域。
       由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代。
   方法区:和堆都是各个线程共享的内存区域,用于存储已经被JVM加载的类信息,
常量,静态变量,jit编译器编译后的代码等数据。


5:在Java5以前,switch能是byte,short,char,int,5以后Java引入了枚举类型,7以后还可以是字符串类型
   但是long类型在所有版本中都是不可以的。


6:对象值相同,hashcode一定相同,但是hashcode相同,对象值不一定相同。


7:被final修饰的类不能被继承。比如String


8:String是只读字符串,即内容不能被改变。而StringBuilder表示字符串对象可以直接进行修改。
   StringBuilder是在单线程环境下使用的,它的所有方面都没有被synchronize修饰,因此它的效率较StringBuffer高。


9:重载:发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则被视为重载
               实现的是编译时的多态性,对返回类型没有特殊的要求。
     重写:实现的是运行时的多态性。
               发生在子类和父类之间,要求子类被重写的方法与父类的方法有相同的返回类型,比父类被重写的方法更好被访问,不能比父类被重写的方法声明更多的异常。

10:char型变量可以存储一个中文汉字,因为Java中使用的编码方式是Unicode(不选择任何特定的编码,直接用字符在字符集中的编号,是统一的唯一的方法),一个char类型占两个字节,16比特。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值