MVC概述
1)MVC是一种编程思想,人为的将 web系统分为三个层次。
2)MVC好处:解耦合,提高系统的可维护型和可拓展性。
M-model:数据模型层 (DAO service entity)
V——View:视图(jsp/html)
C-Controller:控制层(servlet,Sturts2,springMVC)
二,框架的概念
1)解决的问题:框架解决的问题 是开发过程中通用的问题;
2)好处:提高开发效率。
二Struts2 框架
1.充当了MVC中的控制层,替换servlet
2.servlet充当控制器 存在的弊端。
1):收集客户端数据的代码存在冗余
2):数据类型需要转换,麻烦。
3)都需要进行编码格式设置。
4):跳转的路径写死在程序中。后期修改时麻烦。
3.Struts2开发思路
uri:URI 是统一资源标识符 项目往后的路径
url pattern
url: 是统一资源定位符 包含了 uri
Struts2开发
1.获取setuts2框架
1.1 到
搭建环境 导入jar包
初始化配置--开启 struts2
3.引入配置文件
1.搭建环境 导入jar包
2初始化配置 配置 web.xml文件
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>
3.引入 struts2.xml 配置文件 放在src下
idea软件在将web项目时直接勾上struts2.xml文件选项即可
4. 控制层的实现类 实现 Action 接口
package com.action;
import com.opensymphony.xwork2.Action;
public class Test1Action implements Action {
@Override
public String execute() throws Exception {
return "success";
}
}
样例代码 以展示所有为列
package com.action;
import com.entity.Empl1;
import com.opensymphony.xwork2.Action;
import com.service.Emp1Service;
import com.service.Emp1ServiceImpl;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
public class ShowAllEmp1Action implements Action {
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest ();
Emp1Service emp1Service = new Emp1ServiceImpl ();
List<Empl1> empl1s = emp1Service.showAllEmp1Service ();
request.setAttribute ("emplist", empl1s);
HttpSession session = request.getSession ();
Empl1 e = (Empl1) session.getAttribute ("emp");
if (e!=null) {
String status = e.getStatus ();
if ("1".equals (status)) {
System.out.println ("普通用户页面");
return "showOkUser";
} else {
System.out.println ("管理员用户页面");
return "showOkEmp";
}
}else{
return "error";
}
}
}
5 ServletActionContext 工具类【重点】
作用:通过 ServletActionContext 可以拿到 servlet 的一些原生的API对象;
比如获取客户端参数request.getPrameter("name");
最常用:
HttpServletRequest request = ServletActionContext.getRequest ();
6 Struts2 的跳转
一 、同一个 package 下的跳转
1. action 向 jsp 跳转
a. forward
<result name="success" type="dispatcher">/success.jsp</result>
b. redirect
<result name="success" type="redirect">/success.jsp</result>
Type属性:用来指定跳转的方式
二.同package(包)内action与action之间的跳转
a. forward
<result name="success" type="chain"></result>
b.redirect
<result name="success" type="redirectAction"></result>
7 package 的作用
1.在实际开发过程中,action进行分类管理
2.每一个package标签 都有一个 namespace 属性,主要作用就是从访问路径上 来区分不同 package下的action,namespace的值 是访问某个 action路径的一部分,必须以/开头
注意:namespace 的默认 就是 /
8 挎(package)包跳转
1.挎包跳转的时候只有 action 到 action 的跳转
a.forward
b.redirect
<package name="p1" extends="struts-default" namespace="/p1">
<!-- 展示所有功能 action 向 jsp跳 用 forward-->
<action name="ShowAllEmp1Action" class="com.action.ShowAllEmp1Action">
<result name="showOkUser" type="dispatcher">/Jsp/emplistU.jsp</result>
<result name="showOkEmp" type="dispatcher">/Jsp/emplist.jsp</result>
</action>
</package>
<package name="namespace" extends="struts-default" namespace="/p2">
<!-- 删除一条数据 测试挎包跳转-->
<action name="DeleteEmpAction" class="com.action.DeleteEmpAction">
<result name="deleteOk" type="redirectAction">
<!-- name="namespace" 表示调转的目标 所在的包 对应的namespase属性值-->
<param name="namespace">/p1</param>
<!-- name="actionName"表示调转的目标 所在的Action 对应的name属性值-->
<param name="actionName">ShowAllEmp1Action</param>
</result>
</action>
</package>
9 全局跳转
全局跳转 解决的是 result 标签的 配置 冗余;一般在项目后期的重构使用;
注意:1)全局跳转的标签 必须配置在所有的 action 的标签之前
2)全局跳转只在本包内有效
4)全局跳转与局部跳转冲突的时候,会以局部跳转优先。
eg:
<global-result>
<result name="error" type="redirect">/error.jsp</result>
</global-result>
样例代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Soft