springMVC&&ssm面试知识

1:springmvc执行流程
发送一个请求(request)到dispacherservlet 然后用mapper找到controller控制器处理 最后在返回视图。
2:springmvc常用注解
@RestController:表示这是一个rest风格的controller,方法不用使用@Responsebody都会返回json字符。
@Controller: 标志这是一个controller 的bean @Post/Get/Put/Request/Delete/Mapping("") 标识请求方式和请求路径 @RequestBody 用在Controller的方法的参数上,解析封装json类型的数据为对象 @PathVariable 使用url传参,将路径中的某个位置的数据用作方法的参数
3:springmvc怎么样设定重定向和转发的
方法返回字符串,使用forward:标识转发 redirect:标识重定向,且方法上不能带@Responsebody注解,controller上不能使用@RestController注解,使用ModelAndView(“redirect:”)即表示重定向,ModelAndView默认转发模式,直接写转发路径。
4:springMvc和AJAX相互调用
通过Jackson框架就可以把Java里面的对象直接转化成js可以识别的json对象。具体步骤如下
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
5:springmvc的优点
(1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略
6:springmvc 控制器的注解一般用哪个,有没有别的注解可以替代?
@Controller可以用@RestController注解,标识这是一个Restful风格的接口
7:如果在拦截请求中,我想拦截get方法提交的方法,怎么配置?
@RequstMapping(method= {RequestMethod.GET}}这样的方式拦截get方法)
8:怎么样在方法里面得到Requst,或者Session?
在书写方法的时候添加HttpServletRequest参数,spring mvc会自动将request对象传入,使用request的getSession()方法就可以获取到Session对象。
9:如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
单个参数直接声明这个参数,这个参数名称要跟前台的传入参数保持一致,多给参数则会自动封装成对象,但是对象的属性要跟前台多个参数保持一致。
10:SpringMVC中函数的返回值是什么?
String,ModelAndView 还有各种对象,在使用了@ResponseBody情况下,会自动将对象解析成json串返回前端
11:spring注解开发与配置文件混用问题。
@Component与Autowird等一般要一起用,如果用了@Component又要去配置文件中进行此类的set或者构造器注入是行不通的,因为@Component已经代表创建此类对象,配置文件中的又会是另一个对象。
@RequestMapping("/role")
@Controller
public class RoleController {
@Autowired //*****
private RoleService roleService;

@RequestMapping("/list")
public ModelAndView list() {
    System.out.println("reach ---> list");
    ModelAndView modelAndView = new ModelAndView();
    List<Role> roleList = roleService.list();

    //设置模型
    modelAndView.addObject("roleList", roleList);
    //设置视图
    modelAndView.setViewName("role-list");
    return modelAndView;
}

12:如何解决POST请求中中文乱码问题
在web.xml 中配置一个CharacterEncodingFilter过滤器,设置成UTF-8
13:SpringMVC的异常处理?
可以将异常抛给Spring框架,由spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添加视图页面即可。
14:SpirngMVC的控制器是不是单例模式的?,如果是,有什么问题,怎么解决?
是单例模式,所在在多线程访问的时候有线程安全问题,尽量避免使用共享变量
15:怎么样把ModelMap里面的数据放入Session里面?
可以在类上面加入@sessionAttribute注解,里面包含的字符串就是要放入session里面的key
16:SpringMVC里面拦截器是怎么写的
有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后再SpringMVC的配置文件中配置拦截器
配置SpringMvc的拦截器

mvc:interceptors

配置一个拦截器的Bean就可以了 默认是对所有请求都拦截

bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor" /bean>

 只针对部分请求拦截 

mvc:interceptor

   mvc:mapping path="/modelMap.do" /

   <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /

/mvc:interceptor>

/mvc:interceptors>
17:mybatis中KaTeX parse error: Expected 'EOF', got '#' at position 11: {value} 与 #̲{}有什么区别? #{}是预编…{}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。
18:JDBC 与数据库交互的流程是什么?
加载数据库驱动,获取数据库连接,创建statement对象,设置SQL语句,设置SQL参数,使用statement对象执行SQL语句、 获取结果集 解析结果集、 关闭资源。
19:对mybatis中的sqlsession,sqlsessionFactoryBuild和sqlsessionFactory的理解
sqlSession:封装了对数据 增删改查的方法
sqlSession是通过sqlSessionFactory创建的
.sqlSessionFactory是通过sqlSessionFactoryBuild创建的
sqlSessionFactoryBuild 是创建sqlSessionFactory时使用的.一旦创建成功后就不需要sqlSessionFactoryBuild的,因为sqlSession是通过sqlSessionFactory创建的,可以可以当做工具类使用
sqlSessionFactory是一个接口, 类里重载了opensession的不同的方法使用范围是在整个运行范围内,一旦创建可以重复使用.可以当做单实例对象来管理
sqlSession是面向用户的一个操作数据库的接口 每个线程都应该有自己的sqlSession 并且sqlSession不可以共享. 线程是不安全的,打开一个sqlSession用完之后就要关闭
20:Mybatis是如何进行分页的,分页插件的原理是什么?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,更具dialect方言,添加对应的物理分页语句和物理分页参数。
21:Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
第一种是使用标签,逐一定义列名和对象属性名之间的映射关系。第二种是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。
有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。
22:Xml映射文件中,除了常见的select|insert|update|delete标签之外,还有哪些标签?
还有很多其他的标签,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中为sql片段标签,通过标签引入sql片段,为不支持自增的主键生成策略标签。
23:简述mybatis一级,二级缓存
1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。
2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:
3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值