SSM框架面试总结

目录

 

 

SpringMVC

1. 什么是Spring MVC ?

2.  Spring MVC的工作原理

3.Spring MVC的主要组键

4.springmvc的常用注解

5.解决post和get请求中中文乱码的方法

6. SpringMVC中的拦截器问题 


 

SpringMVC

1. 什么是Spring MVC ?

  Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。

MVC(Model模型 View 视图 Controller 控制器):这是一种软件架构思想,是一种开发模式,将软件划分为三种不同类型的模块,分别是模型,视图,和控制器。

  1. 模型:用于封装业务逻辑处理(java类);
  2. 视图:用于数据展现和操作界面(Servlet);
  3. 控制器:用于协调视图和模型(jsp);

2.  Spring MVC的工作原理

 1、用户发送请求至前端控制器DispatcherServlet 
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 
4、DispatcherServlet调用HandlerAdapter处理器适配器 
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 
6、Controller执行完成返回ModelAndView 
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet 
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器 
9、ViewReslover解析后返回具体View 
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 
11、DispatcherServlet响应用户

3.Spring MVC的主要组键

(1)前端控制器 DispatcherServlet(不需要程序员开发)

作用:接收请求、响应结果 相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

(2)处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的URL来查找Handler

(3)处理器适配器HandlerAdapter

注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

(4)处理器Handler(需要程序员开发)

(5)视图解析器 ViewResolver(不需要程序员开发)

作用:进行视图的解析 根据视图逻辑名解析成真正的视图(view)

(6)视图View(需要程序员开发jsp)

View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

4.springmvc的常用注解

@requestmapping

@requestbody

@responsebody

5.解决post和get请求中中文乱码的方法

(1)解决post请求乱码问题:

在web.xml中加入:

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

(2)get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 ②另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

6. SpringMVC中的拦截器问题 

  DispatcherServlet收到请求之后,如果有拦截器,则先执行拦截器的方法,在执行处理器的方法; 注意:过滤器属于Servlet规范,拦截的是Servlet容器的调用过程 拦截器属于spring框架,拦截的是DispatcherServlet的调用过程.

如何写一个拦截器:

1) 写一个java类,实现HandlerInterceptor接口;

2) 在接口方法当中,实现处理逻辑。

3) 配置拦截器

4) 拦截器还可以设置优先级:依据配置的顺序来执行。

### SSM框架常见面试题总结 #### 1. SSM框架的核心概念 SSM框架由Spring、Spring MVC和MyBatis三个部分组成。其中,Spring作为核心容器负责管理Bean的生命周期以及提供IoC/DI功能;Spring MVC用于处理Web请求和响应;而MyBatis则作为一个持久化框架,专注于SQL操作。 - Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架[^3]。 - MyBatis专注于SQL本身,适合对性能要求高或需求变化频繁的项目[^4]。 #### 2. IoC与DI的区别 IoC(Inversion of Control),即控制反转,是一种设计思想,指将对象创建的权利交给容器完成。DI(Dependency Injection),即依赖注入,是IoC的具体实现方式之一。通过XML配置文件或注解(@Autowired等),Spring能够自动装配Bean之间的依赖关系。 #### 3. Spring中的AOP机制 AOP(Aspect-Oriented Programming)关注的是程序的功能模块划分问题。它允许开发者定义横切逻辑,并将其独立于业务逻辑之外进行维护。在Spring AOP中,可以通过@AspectJ注解的方式实现切面编程[^1]。 #### 4. Bean的作用域及其线程安全性 Spring中的Bean默认采用Singleton作用域,意味着整个应用程序上下文中只有一个实例存在。对于多线程环境下的访问,需注意其线程安全性问题。如果某个单例Bean持有可变状态,则可能引发并发冲突[^2]。 #### 5. FactoryBean与BeanFactory的区别 - **FactoryBean** 是一种特殊的Bean接口,允许自定义复杂的初始化过程。 - **BeanFactory** 则是用来获取Bean实例的基础工厂类,属于较底层的设计。 #### 6. Spring事务管理 Spring支持声明式事务管理和编程式事务管理两种形式。前者主要依靠@Transactional注解来简化事务边界设置工作流程;后者则是手动编写代码显式调用beginTransaction()、commit()方法等方式来进行更精细的操作。 #### 7. MyBatis的一对一映射配置 当涉及到实体间的关系时,比如一对一关联场景下,在Mapper XML文件里可通过`<association>`标签指定外键字段及相关联的目标表查询语句[^5]: ```xml <resultMap type="User"> <id property="userId" column="user_id"/> <association property="profile" javaType="Profile"> <id property="profileId" column="profile_id"/> </association> </resultMap> ``` #### 8. SSM整合的关键点 为了使这三个技术栈协同运作良好,通常需要做如下几件事情: - 配置数据源DataSource; - 设置SqlSessionFactoryBean并将之注册到Spring Context中去; - 使用MapperScannerConfigurer扫描包路径内的所有Mapper接口从而动态代理生成对应的Dao层实现类。 --- ### 示例代码片段展示 以下是有关如何利用Spring Boot Starter Data JPA替代传统MyBatis的部分示例: ```java // Entity Class Example @Entity public class User { @Id private Long id; private String name; public void setId(Long id){ this.id=id; } } // Repository Interface Definition @Repository public interface UserRepository extends CrudRepository<User,Long> {} ``` 上述例子展示了基于Java Persistence API (JPA)标准构建的数据访问层设计方案,相比原生MyBatis更加简洁高效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值