struts2环境搭建---【小白系列】0基础到熟练应用struts2框架(一)
2017-07-03 10:28
736 查看
前记:
其实一直很反感社会上流传的从入门到精通,这个概念,什么是精通?不是用过一点时间,再把源码看透,怎么敢说精通。好了闲话不扯,本系列教程主要讲解struts2的入门到熟练使用,同样也是我个人学习笔记,以及我对struts2的理解Struts2概念
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小
以上是百度百科给我们的答案,那么我自己的理解就是Strurs是一款web表现层的框架,它采用了mvc的设计模式。常见的javaweb .net php python等等 不过作为我们的JavaEE攻城狮来说是轻mvc重三层架构的三层架构(web service dao)这是我们javaweb特有的。其实struts2和struts1关系不大,因为它是在WebWork的基础上二次开发。你也可以理解成java和JavaScript,只是借用个名头而已所以 struts2是WebWork的升级版 Struts2基于WebWork,而WebWork
又基于xwork
Struts2快速入门
其实struts2就是插拔式的一个框架,所谓的插拔式就是,你想用就用,不想用了就扔掉,很方便。通俗点就是在web.xml中配一个过滤器,让每一次请求都去走这个过滤器。加上过滤器就算使用struts2,不加就不用了。
执行流程:
tomcat服务器解析请求并且将请求数据封装到request
然后通过过滤器,找到struts.xml中的与请求相对的action
执行action方法,返回结果
环境搭建
1.导入struts2所需jar包
\资料\其他jar包\hibernate基本jar
2.在web.xml配置过滤器
<filter> <filter-name>Struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>Struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.创建Action
public class QuickTestAction { public void execute() { System.out.println("Test action .... "); }
public String save(){ return "save"; } public String update(){ return "update"; } public String delete(){ return "delete"; } }
4.在src下创建struts.xml
5.配置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="mytest" extends="struts-default" namespace="/"> <action name="test" class="com.test.struts.QuickTestAction"></action> </package> </struts>
我们来访问测试下 http://localhost:8080/strutsTest/test
如果控制台成功输出则struts2配置完成。
struts2核心过滤器详解
StrutsPrepareAndExecuteFilter(Struts准备和执行过滤器)进入这个Filter然后依次查看实现
dispatcher = init.initDispatcher(config);//查看实现 dispatcher.init();//查看实现
服务器在启动时,创建filter对象,就会执行init()方法,然后加载配置文件
加载顺序:
default.properties:struts2自己定义好的配置文件struts-default.xml:struts2自己定义好的配置文件
struts-plugin:struts2插件自己定义好的配置文件
struts.xml:自定义的
struts.properties:自定义
核心filter初始化参数:自定义
后加载的配置文件如果与先加载的配置文件有冲突的话,后覆盖前
详解配置文件
default.properties
位置:struts-core.jar/org/apach/struts2/default.properties该文件内部配置的是一些常量参数 格式键值对
struts.i18n.encoding=UTF-8 默认编码
post的乱码struts2已经解决 get需要手动解决
struts.objectFactory = spring
指定Action是由哪个框架创建的 这句话的意思是把action的创建权限交给spring
struts.devMode = false
develope mode 是否设置为开发模式
如果设置为true 变成开发模式 当修改struts.xml配置文件后不需要重启服务
struts.action.extension=action,,
Action访问时的默认扩展名 例如 abc,,def,那么(*.abc ) ( *) (*.def)可以访问到资源
struts.multipart.maxSize=2097152
使用struts2进行文
4000
件上传默认的 允许上传文件大小
struts-default.xml
位置:struts-core.jar下1)功能bean
2)常量
3)抽象包
4)结果跳转类型
5)拦截器
在自己的xml配置文件中覆盖struts-default包内部的默认配置
struts.xml配置(包括action的配置)
在src下创建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> <!-- 常量 键值对 --> <constant name="struts.devMode" value="true"></constant> <constant name="struts.action.extension" value="action,abc,def,,"></constant> <!-- 动态方法调用的开启 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- package包配置 包内部配置action package包是一个虚拟包/逻辑包 不存在 主要目的方便action的管理 属性: name:包的名称 包名称不能重复 namespace:命名空间 该命名空间与Action的name一起组成访问的虚拟地址 例如: namespace="/customer" url:http://localhost:8080/Struts2_Day01/customer/quick.action extends:该包继承哪个包 一般情况下 继承struts-default 继承了包 才能使用父包中都已经定义好的一些内容 abstract:声明该包是否是一个抽象包 只能被别的包继承 不能创建Action --> <package name="test" namespace="/" extends="struts-default"> <!-- <interceptors> 声明自己定义的拦截器 <interceptor name="myInterceptor" class="全包名"></interceptor> 定义拦截器栈 <interceptor-stack name="myStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> 引用默认的拦截器栈 <default-interceptor-ref name="myStack" /> --> <!-- 定义自己的结果类型 --> <!-- <result-types> <result-type name="myResultType" class="com.opensymphony.xwork2.ActionChainResult"/> </result-types> --> <!-- 定义Action:封装逻辑代码的类 属性: name:该Action的虚拟名称 该name与namespace一起组成访问的虚拟的地址 class:该Action全限定名 method:指定访问该Action中的哪个方法 --> <action name="quick" class="cn.nanjin.action.QuickAction" method="save"> <!-- 结果视图 属性: name:逻辑视图名 result标签体中配置实际的页面的地址 type: 跳转方式 转发 重定向.. --> <result name="success">/success.jsp</result> <result name="save">/save.jsp</result> <result name="update">/update.jsp</result> </action> <action name="update" class="cn.nanjin.action.QuickAction" method="update"> <result name="success">/success.jsp</result> <result name="save">/save.jsp</result> <result name="update">/update.jsp</result> </action> <!-- *代表任意 标识通配符 {n} n代表第几个* 例如: http://localhost:8080/Struts2_Day01/quick2_save.action *===save method="save" http://localhost:8080/Struts2_Day01/quick2_update.action *===update method="update" --> <!-- 重点 --> <action name="quick2_*" class="cn.nanjin.action.QuickAction2" method="{1}"> <result name="delete">/success.jsp</result> <result name="save">/save.jsp</result> <result name="update">/update.jsp</result> </action> <!-- 例如: http://localhost:8080/quick3_save_User.action 第一个*===save 第二个*===User method=saveUser http://localhost:8080/quick3_update_User.action 第一个*===uodate 第二个*===User method=updateUser --> <action name="quick3_*_*" class="cn.nanjin.action.QuickAction3" method="{1}{2}"> <result name="delete">/success.jsp</result> <result name="save">/save.jsp</result> <result name="update">/update.jsp</result> </action> <!-- 动态方法调用(了解) 开启动态方法调用(默认是关闭) xml配置简单 如下配置 页面访问url有要求 配置一个常量: struts.enable.DynamicMethodInvocation = true 例如: http://localhost:8080/Struts2_Day01/quick4!save.action http://localhost:8080/Struts2_Day01/quick4!update.action --> <action name="quick4" class="cn.nanjin.action.QuickAction4"> <result name="delete">/success.jsp</result> <result name="save">/save.jsp</result> <result name="update">/update.jsp</result> </action> </package> <!-- 加载其他的struts配置文件,分模块开发 --> <!-- <include file="struts-customer.xml"></include> <include file="struts-linkman.xml"></include> --> </struts>
struts.properties
只能配置常量 键值对实际开发中 一般常量习惯在struts.xml中配置
没什么用
核心filter 初始化参数
Struts2的API
Action的定义的三种方式
1)Action可以定义成一个POJO2)定义Action类实现Action接口
好处:规范开发 Action接口提供了5个直接使用的常量
3)定义的Action类继承ActionSupport(重点)
子的功能更加强大 例如 可以进行国际化 表单校验....
综合案例:
需求
编写程序实现查询所有客户信息并回显页面步骤
1.实体类 Customer.java
public class Customer implements Serializable { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_phone; private String cust_mobile;
2.hibernate映射Customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.test.domain.Customer" table="cst_customer"> <id name="cust_id"> <generator class="native"></generator> </id> <property name="cust_name"></property> <property name="cust_source"></property> <property name="cust_industry"></property> <property name="cust_level"></property> <property name="cust_phone"></property> <property name="cust_mobile"></property> </class> </hibernate-mappin
3.hibernate主配置文件 hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 1、数据库连接信息 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///struts_demo</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 2、hiebernate其他参数 可选 --> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- 3、加载映射 --> <mapping resource="com/test/domain/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
4.action
public class CustomerAction extends ActionSupport { public String findCustomerList(){ try { //业务处理 CustomerService service =new CustomerServiceimpl(); List<Customer> list =service.findCustomerList(); ServletActionContext.getRequest().setAttribute("list", list); return "success"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
5.serviceimpl
public List<Customer> findCustomerList() throws Exception { List<Customer> result =null; CustomerDao dao=new Customerimpl(); result =dao.findCustomerList(); return result; }
6.dao
public List<Customer> findCustomerList() throws Exception { List<Customer> result =null; String hql ="from Customer "; Configuration conf =new Configuration().configure(); SessionFactory factory = conf.buildSessionFactory(); Session session = factory.openSession(); Transaction tx = session.beginTransaction(); Query query = session.createQuery(hql); result =query.list(); tx.commit(); session.close(); factory.close(); return result; }
7.struts.xml
<action name="customer_*" class="com.test.struts.CustomerAction" method="{1}"> <result name="success">/jsp/customer/list.jsp</result> </action>
8.回显页面
相关文章推荐
- Struts2结果视图配置---【小白系列】0基础到熟练应用struts2框架(二)
- spring环境搭建&spring快速入门---【小白系列】0基础到熟练应用spring框架(一)
- struts2 interceptor拦截器---【小白系列】0基础到熟练应用struts2框架(六)
- hibernate环境搭建教程---【小白系列】0基础到熟练应用hibernate框架(一)
- struts2参数封装---【小白系列】0基础到熟练应用struts2框架(五)
- struts2获取作用域对象---【小白系列】0基础到熟练应用struts2框架(三)
- struts2值栈&struts ognl表达式---【小白系列】0基础到熟练应用struts2框架(四)
- hibernate一级缓存---【小白系列】0基础到熟练应用hibernate框架(九)
- hibernate主键生成策略---【小白系列】0基础到熟练应用hibernate框架(七)
- HibernateUtils工具---【小白系列】0基础到熟练应用hibernate框架(四)
- hibernate的Configuration,SessionFactory,Session详解---【小白系列】0基础到熟练应用hibernate框架(二)
- hibernate一对多|多对一关系---【小白系列】0基础到熟练应用hibernate框架(十二)
- hibernate实体类的三种状态---【小白系列】0基础到熟练应用hibernate框架(八)
- hibernatJPA---【小白系列】0基础到熟练应用hibernate框架(十五)
- hibernate事务---【小白系列】0基础到熟练应用hibernate框架(十)
- hibernate多对多关系---【小白系列】0基础到熟练应用hibernate框架(十三)
- spring IoC注解开发---【小白系列】0基础到熟练应用spring框架(二)
- spring AOP---【小白系列】0基础到熟练应用spring框架(三)
- hibernate实体类的创建规则---【小白系列】0基础到熟练应用hibernate框架(六)
- hibernate中对象视图导航查询|加载策略---【小白系列】0基础到熟练应用hibernate框架(十四)