MVC全名是Model View Controller,表示采用了MVC涉及模式的框架。
是模型(model)-视图(view)-控制器(controller)的缩写。
使用业务逻辑、数据、界面显示分离的方法组织代码,业务逻辑聚集到一个部件里面。
当改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
位于WEB应用的web.xml中配置Struts2核心Filter。
Struts2框架与SpringMVC最大的区别在于转发通过过滤器,SpringMVC使用Servlet。
<filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 注意:一定是org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter -->
<!-- 不是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
<!-- 也不是org.apache.struts2.dispatcher.Filterdispatcher -->
<!-- struts的版本不同,导致jar包目录的改变,写错了,会报找不到类的错误 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<!-- 多个Strust配置文件用,号隔开 -->
<param-name>config</param-name>
<param-value>struts-default.xml,conf/mebugs.struts.xml</param-value>
</init-param>
<init-param>
<!-- 扩展struts2的ConfigurationProvider接口,在web.xml中配置自定义的加载类 -->
<!-- 自定义扫描所有的Strust配置文件,实际应用中可以不配置 -->
<param-name>configProviders</param-name>
<param-value>com.mebugs.MyConfigProviders</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
如上文中我们使用的mebugs.struts.xml实例,以及几类比较常见的配置内容。
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts.devMode也就是struts的开发模式,默认值为false,改为true就是以后一旦就改这个文件中的配置就不用去重启tomcat -->
<constant name="struts.devMode" value="false" />
<package name="mebugsServices" extends="struts-default" namespace="/">
<!-- Action -->
<!-- 一般情况下,**这个类也要配置在Spring的bean配置文件**,用于类对象的维护 -->
<!-- **此处便是与Spring框架融合的地方,我们的bean依旧统一交给Spring的IOC容器来管理** -->
<!-- action name便是前端请求的地址 method则绑定对应的方法入口 -->
<action name="createUser" class="com.mebugs.user.action.UserAction" method="createUser">
<!-- 以下内容均为选用 -->
<!-- 绑定一个拦截器/组 -->
<interceptor-ref name="security" />
<!-- 绑定一个需要传参的拦截器/组 -->
<interceptor-ref name="runMode">
<param name="target">https</param>
</interceptor-ref>
<!-- 特定的返回字符串标识 -->
<result name="success">/jsp/some.jsp</result>
<!-- 特定的返回字符串标识,且指定为重定向 -->
<result name="main" type="redirect">main.action</result>
</action>
</package>
</struts>
以上文配置的UserAction为例
public class UserAction extends BASCAction {
/*
* 序列号
*/
private static final long serialVersionUID = 373832410111011420L;
/*
* 日志
*/
private static final DebugLog LOGGER = LogFactory.getDebugLog(UserAction.class);
/*
* 实体类,与视图交互的对象
*/
private User user;
/*
* Service层类注入
*/
private UserServ userServ;
/*
* 通过Bean配置中<property name="user" ref="user"></property> 进行关联
* Bean管理依旧交给Spring
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserServ getUserServ() {
return userServ;
}
public void setUserServ(UserServ userServ) {
this.userServ = userServ;
}
/*
* action中配置指定的方法
*/
public void createUser() {
// step1: 调用业务处理类 获取返回体
// 这个返回体结构是我们自定义的通用返回体,便于Jackson解析
// 其结构一个返回码一个返回描述
ReturnDes returnDes = userServ.createUser(user);
// step2: 打印接口返回消息
List<Object> rtn = new ArrayList<Object>();
rtn.add(returnDes);
// step3: 构造返回体,建议剥离为一个公共方法
// 此处引用了Jacson开源Jar工具包
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = null;
try {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(rtn);
out = response.getWriter();
out.print(json);
} catch(JsonProcessingException e) {
LOGGER.error(e.toString(), e);
} catch (IOException e) {
LOGGER.error(e.toString(), e);
} finally {
if (null != out) {
out.close();
}
}
}
}
在JAVA语言中新的WEB项目中,Struts2框架的身影也越来越少见。
由于Struts2框架是一个存粹的控制层框架,Bean还需要交给Spring框架维护,增加很多的配置项。
因此现在比较多见的依旧是Spring+SpringMVC的组合。
尤其是注解方式配置面市后,使用其他控制层框架与Spring框架融合开发效率始终弱于Spring+SpringMVC。
亲儿子毕竟是亲儿子哈哈哈
当前还没有观点发布,欢迎您留下足迹!
Spring就像一个大家族,里面包含了很多衍生产品,其中最为出名的就是SpringMVC和SpringBoot,那么这三者之间是什么关系呢?SpringMVC和SpringBoot又专门用来做什么呢?
在JAVA的WEB工程中我们可以将JSP页面文件放在WEB-INFO中限制用户进行URL直接访问,但静态资源如js、css文件却是需要被外部直接访问的,直接对外暴露又不太安全,可以通过自定义过滤器处理
SpringMVC框架是围绕DispatcherServlet(前端控制器)展开的,本文描述SpringMVC的优点、各个核心类(角色)作用,并说明用户请求数据到最终视图返回完整的数据传输过程
SpringBoot 的 MyBatis 默认采用 hikari 连接池,druid (德鲁伊) 连接池由阿里开源,它不仅仅是一个连接池,更是代理、过滤器、解析器、插件、监控、优化等实用功能组件库,更在阿里生产环境得到验证,所以 Lets Do It
scope属性主要用于控制依赖范围,主要分为编译、打包、运行、测试、依赖传递等各个常见,scope不同于optional提供了更多可选择的配置参数用于应对不同的依赖场景。
MyBatis-Plus是一个基于MyBatis的增强脚手架,使用其封装好的各类接口可能在实际开发过程无需手写SQL快速完成业务开发,尤其在JDK1.8后的Lambda语法下使用更为方便