初识Struts

Servlet 框架 Struts2
顺序:
需求
数据库表结构
编码

CRM

什么是框架?

第一感觉:
一堆 jar 包 --------- java文件------ 编译后 字节码文件 .class sun公司压缩技术 压缩成包 jar包

Java文件实现一些功能
固定写法 : jdbc 打开数据 得到Rs 写好 打包,
不固定数据:
数据库连接地址、用户名、密码、驱动名称 写成配置文件
Hbm.xml
hibernate.cfg.xml

1、jar包
copy哪些jar?
2、写配置文件
看官方文档?
去试一试操作一下~~
3、测试类

Struts 干什么的?

1、java类 通过地址栏触发java类 java方法
2、从地址栏、页面 获取数据 GET POST
3、服务器端 进行处理 (增删改查) 调用其他java类 java方法
4、结果反馈给客户端(浏览器、手机)

Struts 如何取代上面4点
如果能取代,学会了(不是精通)

找了一下以前的例子

自己整理jar包

传统url
viewNews?newsId=10089
news/10089/view Rest 风格
news/list
news/10089/update
news/10089/delete

如何接收地址栏的值

接收页面传递的值

开发步骤:

三步走:
1 导入相关架包

2编写web.xml,配置strus2过滤器

struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3编写Struts2配置文件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="default" namespace="/user" extends="struts-default">
            <action name="regist" class="cn.itcast.action.RegistAction">
                <result name="input">/success.jsp</result>
            </action>
        </package>
    </struts>

访问路径 /user/regist.action
name 包名称,在struts2的配置文件文件中 包名不能重复 ,name并不是真正包名,只是为了管理Action
namespace 和 action的name属性,决定 Action的访问路径 (以/开始 )
extends 继承哪个包,通常开发中继承 struts-default 包 (struts-default包在 struts-default.xml定义 )
继承struts-default包后,可以使用 包中定义拦截器和结果类型
action元素配置默认值
package 的namespace 默认值‘’‘’
action 的class 默认值 ActionSupport 类
result 的 name 默认值 success

默认Action 和 Action的默认处理类
1) 默认Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默认Action 就会执行
2) 默认处理类 ,客户端访问Action,已经找到匹配元素,但是元素没有class属性,执行默认处理类

  • 在struts-default.xml 配置默认处理类 ActionSupport

Struts2的常量配置

1) struts2 默认常量 在 default.properties 中配置
2) 开发者自定义常量

 struts.xml
        格式 : <constant name="struts.devMode" value="true" />
    struts.properties
        格式 : struts.devMode = true
    web.xml 
        格式 : 
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <init-param>
                <param-name>struts.devMode</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter


3) 常用常量

<constant name="struts.i18n.encoding" value="UTF-8"/>  ----- 相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码 
<constant name="struts.action.extension" value="action"/>  --- 访问struts2框架Action访问路径 扩展名 (要求)
struts.action.extension=action, 默认以.action结尾扩展名 和 不写扩展名 都会分发给 Action
<constant name="struts.serve.static.browserCache" value="false"/> false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false 
<constant name="struts.devMode" value="true" />  提供详细报错页面,修改struts.xml后不需要重启服务器
-

Action书写的的三种格式(第三种重点!)

第一种
Action可以是 POJO ((PlainOldJavaObjects)简单的Java对象) —- 不需要继承任何父类,实现任何接口

  • struts2框架 读取struts.xml 获得 完整Action类名
  • obj = Class.forName(“完整类名”).newInstance();
  • Method m = Class.forName(“完整类名”).getMethod(“execute”); m.invoke(obj); 通过反射 执行 execute方法

第二种
编写Action 实现Action接口
Action接口中,定义默认五种 逻辑视图名称
public static final String SUCCESS = “success”; // 数据处理成功 (成功页面)
public static final String NONE = “none”; // 页面不跳转 return null; 效果一样
public static final String ERROR = “error”; // 数据处理发送错误 (错误页面)
public static final String INPUT = “input”; // 用户输入数据有误,通常用于表单数据校验 (输入页面)
public static final String LOGIN = “login”; // 主要权限认证 (登陆页面)
五种逻辑视图,解决Action处理数据后,跳转页面

第三种
编写Action 继承ActionSupport (推荐)
这种方法能够使用 action中的 常量!
在Action中使用 表单校验、错误信息设置、读取国际化信息 三个功能

Action的配置method(通配符)

1) 在配置 元素时,没有指定method属性, 默认执行 Action类中 execute方法
2)使用通配符* ,简化struts.xml配置

<a href="${pageContext.request.contextPath }/user/customer_add.action">添加客户</a>
<a href="${pageContext.request.contextPath }/user/customer_del.action">删除客户</a>

struts.xml
<action name="customer_*" class="cn.itcast.struts2.demo4.CustomerAction" method="{1}"></action>   ---  {1}就是第一个* 匹配内容

动态方法调用

访问Action中指定方法,不进行配置
1) 在工程中使用 动态方法调用 ,必须保证 struts.enable.DynamicMethodInvocation = true 常量值 为true

2) 在action的访问路径 中 使用 “!方法名”

页面
<a href="${pageContext.request.contextPath }/user/product!add.action">添加商品</a>
struts xml配置
<action name="product" class="cn.itcast.struts2.demo4.ProductAction"></action>
执行 ProductAction 中的 add方法

Action访问Servlet API

1、 在Action 中解耦合方式 间接访问 Servlet API ——— 使用 ActionContext 对象
在struts2 中 Action API 已经与 Servlet API 解耦合 (没有依赖关系 )

  • Servlet API 常见操作 : 表单提交请求参数获取,向request、session、application三个范围存取数据

actionContext = ActionContext.getContext();

  1. actionContext.getParameters(); 获得所有请求参数Map集合
  2. actionContext.put(“company”, “传智播客”); / actionContext.get(“company”) 对request范围存取数据
  3. actionContext.getSession(); 获得session数据Map,对Session范围存取数据
  4. actionContext.getApplication(); 获得ServletContext数据Map,对应用访问存取数据

2、 使用接口注入的方式,操作Servlet API (耦合)
1.要求action类必须实现提定接口。
ServletContextAware : 注入ServletContext对象
ServletRequestAware :注入 request对象
ServletResponseAware : 注入response对象

2.重定接口中的方法。
private HttpServletRequest request;
3.声明一个web对象,使用接口中的方法的参数对声明的web对象赋值.

public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}

3、 在Action中直接通过 ServletActionContext 获得Servlet API

这种方法 尽量少用,尽量少去 直接访问 servlet

ServletActionContext.getRequest() : 获得request对象 (session)
ServletActionContext.getResponse() : 获得response 对象
ServletActionContext.getServletContext() : 获得ServletContext对象
ServletActionContext.getPageContext().getSession(); //获取session等对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值