发表于: 2020-05-30 22:20:09
1 1528
今天完成的事情:
1. 完成了假数据
收获:
1. 学习 springmvc
[servlet-name]-servlet.xml 文件
配置文件扫描
Context:component-scan
前置概念:
BeanDefinitionParser
在启动 SpringMVC 项目加载 spring.xml 的时候会注册一些解析器:
@Override
public void init() {
registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
registerBeanDefinitionParser("annotation-config", new AnnotationConfigBeanDefinitionParser());
registerBeanDefinitionParser("component-scan", new ComponentScanBeanDefinitionParser());
registerBeanDefinitionParser("load-time-weaver", new LoadTimeWeaverBeanDefinitionParser());
registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
registerBeanDefinitionParser("mbean-export", new MBeanExportBeanDefinitionParser());
registerBeanDefinitionParser("mbean-server", new MBeanServerBeanDefinitionParser());
}
BeanDefinitionParser 是 spring 启动的时候必须要记载的默认 bean 定义解析器。用来处理顶级标签(即 <beans/> 的直接子标签,比如 context:component-scan)的接口,可以通过实现它来把自定义的标签转化为 BeanDefinition 类。
其接口方法定义如下:
public interface BeanDefinitionParser {
BeanDefinition parse(Element element, ParserContext parserContext);
}
处理 comoonent-scan 标签的实现就是 ComponentScanBeanDefinitionParser,以处理这个标签为例,其中 element 就包含了从 xml 文件中解析出来的标签参数数据,而 parserContext 就负责把这些参数转化为 beanDefinition 对象并且注册到 spring 容器。
springmvc中的注解:
@Component:这是一个 spring 的基础注解类,可以用来修饰其他的注解。在系统启动的时候会被自动扫描,添加到 bean 工厂中(不再需要 xml 配置 bean),
在 spring 中有 @Service @Controller @Repository 是被 @Component 所注解的。
作用:将被注释的类注入到 spring 容器进行管理。
@Service 作用于业务逻辑层
@Repository 作用于持久层,与数据库相关的操作(dao)
@Controller 作用于表现层,进行前端请求的处理、转发、重定向。调用 Service 层方法。(SpringMVC 注解)
遇到的问题:
1. jsp 页面插入数据失败
前置知识:头文件参数
json-taglib
依赖:(导入这个依赖会遇到一点问题,坑乎有解决方法)
<!--jsp假数据依赖-->
<dependency>
<groupId>atg.taglib.json</groupId>
<artifactId>json-taglib</artifactId>
<version>0.4.1</version>
</dependency>
头文件:
<%@taglibprefix="json"uri="http://www.atg.com/taglibs/json"%>
实际使用中会遇到的问题:
如果仅含向上述头文件的 jsp 页面传递参数的话会遇到中文乱码、传递的参数不显示的问题。
解决方法:
添加以下头文件
<%@pagelanguage="java"pageEncoding="utf-8"isELIgnored="false"%>
解析:
pageEncoding 会重新编码 jsp 文件本身。除此之外我们还见过 contentType="text/html;charset=UTF-8" 这种属性。
Jsp 要经过多次编码:
第一次:.jsp 编译为 .java 文件的时候会根据 pageEncoding 的设定读取 jsp,此时的设定关系着中文是否乱码。
第二次:由 .java 文件编译为 .class 文件的时候,不论源文件是什么编码格式 javac 都是用 utf-8 的编码方式读取 java 源码。
第三次:在被应用服务器(tomcat、resin···)载入与执行输出结果的时候 contentType 里面的 charset 参数就开始起作用了。
isELIgnored 标签决定着页面的中的表达式是否会被当成字符串处理。
不然哪来容器试可以对这些参数进行设置的,但是还是自己设置一下比较好,有时候可能会对自己造成困扰。
明天的计划:
1. dao
评论