1.框架介绍
所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的精力放到业务需求的分析和理解上面。
特点:封装了很多细节,程序员在使用的时候会非常简单。
早前,有三大框架struts、hibernate、spring(SSH)
近几年,springmvc、mybatis、spring(SSM) -----主流框架选择方案
曾经经典的『SSH』三驾马车,现在只有Spring还保持活力,Strust和Hibernate都过时了。
strust能做的,spring都能做,而且spring现在的生态很好,比如springboot,springcloud等等。
MVC架构:
M:Model 模型,封装数据。javabean
V:view 视图,展示界面。jsp
C:Controller 控制器,控制程序流程。
2.Java SSH框架介绍
SSH在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
3.Struts2入门---开发环境的搭建
Struts2是Apache发行的MVC开源框架。注意:它只是表现层web(MVC)框架。
(1)下载Struts2开发包
http://struts.apache.org
选择课程中提供的2.3.33的版本,解压后如下图所示。
在apps目录中,提供了一个struts2-blank.war 包
初始学者在项目集成中,导入lib下的所有包即可
(2)第一个Struts2项目
点击next后,创建工程。
工程结构为:
设置Struts2的jar包路径
注意:若报ERROR StatusLogger No log4j2 configuration file found. Using default configuration错误
解决方案:创建log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <Logger name="com.opensymphony.xwork2" level="debug"/> <Logger name="org.apache.struts2" level="debug"/> <Root level="warn"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>
测试工程是否成功:
创建hello_struts2.jsp,进行测试
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Hello</title> </head> <body> <div align="center"> <h1>HelloStruts2</h1> </div> </body> </html>
在 index.jsp 中链接一下
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <a href="hello_struts2.jsp">点击前往测试页面</a> </body> </html>
启动tomcat,测试效果。
Struts2架构图
User created标识的是以后我们经常要写的
4.Struts2第一个案例
struts.xml配置文件相关属性:
(1)package:表示包
name:包名,在struts.xml文件不能有相同的包名,包名是惟一
extends:继承,固定struts-default
abstract:抽象包,被用于继承,一般在抽象包里不声明action
namespace:命名空间,访问路径,默认值是空字符串
可用于模块划分
要注意:命名空间需要加/斜杠
(2)action:动作
name:相当于Servlet的映射路径(@WebServlet)
class:处理请求的类,相当一个Servlet类
method:处理请求的方法
1.public的
2.返回值必须是String
3.没有参数
(3)result:结果,写返回的jsp页面
name:逻辑视图的名称,对应着动作方法的返回值。默认值是success
type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher 转发(url地址不变)
result中type的取值有四种类型:
struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- package:表示包 name:包名,在struts.xml文件不能有相同的包名,包名是惟一 extends:继承,固定struts-default action:动作 name:相当于Servlet的映射路径(@WebServlet) class:处理请求的类,相当一个Servlet类 method:处理请求的方法 result:结果,写返回的jsp页面 --> <package name="p1" extends="struts-default"> <action name="hello" class="action.HelloAction" method="sayHello"> <result name="success">/success.jsp</result> </action> </package> </struts>
HelloAction.java
<1>action类的第一种写法
package action; public class HelloAction { public String sayHello(){ System.out.println("HelloAction的sayHello方法被调用了..."); //int i = 10 / 0; return "success"; } }
<2>action类的第二种写法
写个Action类继承ActionSuport类【推荐使用这种方式】
ActionSupport是实现Action接口的类
package action; import com.opensymphony.xwork2.ActionSupport; public class HelloAction1 extends ActionSupport { public String sayHello1(){ System.out.println("HelloAction的sayHello方法被调用了..."); return "success"; } }
struts.xml文件中的相关配置
<action name="hello1" class="action.HelloAction1" method="sayHello1"> <result name="success">/success.jsp</result> </action>
运行逻辑图:
效果图: