当前位置: 首页 > news >正文

网站后台管理系统登录精华吧网页搜题

网站后台管理系统登录,精华吧网页搜题,建设银行天津分行门户网站,商务网站建设的项目体会文章目录 SSM 整合#xff08;代码配置#xff09;1. 基本形式2. 无 web.xml 的理论基础3. WebInitializer 替代 web.xml4. SpringWebConfig 替代 spring-web.xml5. 配置『静态资源不拦截』方案一方案二 6. 配置 URL 后缀生效/失效7. 整合 Service 层8. 整合 Dao 层9. Mybati… 文章目录 SSM 整合代码配置1. 基本形式2. 无 web.xml 的理论基础3. WebInitializer 替代 web.xml4. SpringWebConfig 替代 spring-web.xml5. 配置『静态资源不拦截』方案一方案二 6. 配置 URL 后缀生效/失效7. 整合 Service 层8. 整合 Dao 层9. Mybatis 相关配置文件10. 其它 SSM 整合代码配置 1. 基本形式 Spring 的 Java 代码配置与 XML 配置文件配置有对应关系本质上太大区别。 核心关键点有两处 .xml 配置文件演变为一个配置类其头上标注 Configuation 注解 bean 配置演变为配置类中的一个方法其头上标注 Bean 注解。 2. 无 web.xml 的理论基础 为了支持脱离 web.xmlServlet 定义了一个 javax.servlet.ServletContainerInitializer 的接口并且要求在 Servlet 容器启动 web 项目时在项目的的 jar 包中的 META-INF/services 去找一个名字是它的完全限定名的文件。 在 Spring MVC 项目中spring-web 包下的 META-INF/services 目录下就存在这样一个 javax.servlet.ServletContainerInitializer 的文件。 按照约定这个文件的内容可以放 ServletContainerInitializer 接口的实现类的完全限定名在 Spring MVC 中这个实现了是 org.springframework.web.SpringServletContainerInitializer 。 Servlet 容器在启动时会创建这个文件中所记载的 ServletContainerInitializer 接口的实现类的对象并调用它的 onStartup 。 在 SpringServletContainerInitializer 的 onStartup 方法中它会去查找、调用 Spring MVC 项目中所有 WebApplicationInitializer 接口直接或间接实现类的 onStartup 方法。 所以我们需要直接或间接实现 WebApplicationInitializer并在 onStartup 方法中实现我们曾将在 web.xml 中所实现的内容。 3. WebInitializer 替代 web.xml 当然我们通常并不会直接实现 WebApplicationInitializer 接口我们可以通过继承 AbstractAnnotationConfigDispatcherServletInitializer 来间接实现 WebApplicationInitializer 接口 public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {// 第一次加载配置时机所加载的配置类。Overrideprotected Class?[] getRootConfigClasses() {return new Class?[] {SpringServiceConfig.class,SpringDaoConfig.class};}// 第二次加载配置时机所加载的配置类。 Overrideprotected Class?[] getServletConfigClasses() {return new Class?[] {SpringWebConfig.class};}// 设置 DispatcherServlet 的映射Overrideprotected String[] getServletMappings() {return new String[] { / };} }曾经在 web.xml 中配置过一个 Filter 来解决 GET 请求中文乱码问题如果要在 WebInitializer 中实现同样的效果则需要多重写一个父类的方法 Override protected Filter[] getServletFilters() {Filter encodingFilter new CharacterEncodingFilter(UTF-8, true);return new Filter[] { encodingFilter }; }4. SpringWebConfig 替代 spring-web.xml Configuration EnableWebMvc // 注解驱动 ComponentScan(xxx.yyy.zzz.web) // 包扫描 public class SpringWebConfig implements WebMvcConfigurer {Bean // 视图解析器public InternalResourceViewResolver viewResolver() {InternalResourceViewResolver viewResolver new InternalResourceViewResolver();viewResolver.setPrefix(/WEB-INF/jsp/);viewResolver.setSuffix(.jsp);return viewResolver;} }除了上面三项关键性配置之外还有一些附加功能配置可供选择。 5. 配置『静态资源不拦截』 当然 DispatcherServlet 配置的是拦截的是 *.后缀 形式那么就不存在静态资源拦截问题。所以需要考虑静态资源拦截问题时通常意味着 DispacherServlet 配置的是 / 。另外通常不会、不建议使用 /** 。 实现静态资源不拦截的方式有两种二选一一是启用 DefaultServletHandler二是配置 ResouceHandler 。 方案一 配置启用 DefaultServletHandler 意味着像 .js、.css 这样的 URL 没有 Controller 处理则由 DefaultServletHandler 处理而它的处理方式就是在对应目录下找到这些文件并发送给客户端浏览器。 Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable(); }方案二 配置 ResouceHandler 就是明确告诉 Spring MVC 当 URL 路径中出现何种关键词或后缀时去哪个路径下找静态资源文件。 Override public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(/css/**)// 过滤静态资源路径.addResourceLocations(classpath:/css);// 定位资源registry.addResourceHandler(/js/**).addResourceLocations(classpath:/js);registry.addResourceHandler(/img/**).addResourceLocations(classpath:/img);} }6. 配置 URL 后缀生效/失效 常规的 Java Web 一般不会考虑这个问题。在 Restful 的 Java Web 中才会针对『一个奇怪的现象』考虑这个配置。 默认情况下 Spring MVC 会忽略掉 URL 请求中的后缀。也即是说 在 URL 中使用 hello.do 能触发 RequestMapping(“/hello”) 的执行。 有时可能需要 Spring MVC 更『严谨』一些。如果是在 .xml 配置文件中是配置成这样 mvc:annotation-drivenmvc:path-matching suffix-patternfalse / /mvc:annotation-driven在代码配置中对等的配置是如下 Override public void configurePathMatch(PathMatchConfigurer configurer) {// 显而易见这个值默认是 true 。configurer.setUseSuffixPatternMatch(false); } 7. 整合 Service 层 这里通过配置类 SpringServiceConfig 来等价替代 spring-service.xml 配置文件。 Configuration ComponentScan(xxx.yyy.zzz.service) // 包扫描 EnableTransactionManagement // 激活/启用事务注解Transactional public class SpringServiceConfig {// txManagerBeanpublic DataSourceTransactionManager transactionManager(DataSource dataSource) {DataSourceTransactionManager manager new DataSourceTransactionManager();manager.setDataSource(dataSource);return manager;}}8. 整合 Dao 层 这里通过配置类 SpringDaoConfig 来等价替代 spring-dao.xml 配置文件。 大体上以下配置类就是 spring-dao.xml 配置文件的对等转换结果。不过有一处需要注意的地方。 Configuration PropertySource(classpath:jdbc.properties) public class SpringDaoConfig {Value(${datasource.driver-class-name})private String driverClassName;Value(${datasource.url})private String url;Value(${datasource.username})private String userName;Value(${datasource.password})private String password;Bean // 数据库连接池public HikariDataSource dataSource() {HikariDataSource ds new HikariDataSource();ds.setDriverClassName(driverClassName);ds.setJdbcUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}Bean // sqlSessionFactorypublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws IOException {SqlSessionFactoryBean sqlSessionFactory new SqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);sqlSessionFactory.setConfigLocation(new ClassPathResource(mybatis/mybatis-config.xml));sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mybatis/mapper/*.xml));return sqlSessionFactory;}Bean // 包扫描public MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer configurer new MapperScannerConfigurer();configurer.setBasePackage(com.softeem.dao);return configurer;} }如果是 spring-dao.xml 无脑改 SpringDaoConfig那么 sqlSessionFactory.setConfigLocation(...); sqlSessionFactory.setMapperLocations(...);为 sqlSessionFactory 的 configLocation 和 mapperLocations 属性赋值时『想当然地』是提供两个字符换因为 .xml 配置文件中就是如此。 但是在实际中sqlSessionFactory 的这两个属性需要的是 Resource 对象和 Resource 对象的数组。因此需要以这两个字符串为依据生成与之对应的对象和对象的数组后再使用 new ClassPathResource(mybatis/mybatis-config.xml));new PathMatchingResourcePatternResolver().getResources(mybatis/mapper/*.xml)9. Mybatis 相关配置文件 Mybatis 的核心配置文件和映射文件还是需要以 .xml 形式提供。 略。 10. 其它 Configuration EnableWebMvc ComponentScan(com.xja.hemiao.web.controller) // 包扫描 public class SpringWebConfig implements WebMvcConfigurer {Bean(name multipartResolver) // bean 必须写 name 属性且必须为 multipartResolverprotected CommonsMultipartResolver multipartResolver() {CommonsMultipartResolver commonsMultipartResolver new CommonsMultipartResolver();commonsMultipartResolver.setMaxUploadSize(5 * 1024 * 1024);commonsMultipartResolver.setMaxInMemorySize(0);commonsMultipartResolver.setDefaultEncoding(UTF-8);return commonsMultipartResolver;}Overridepublic void configureMessageConverters(ListHttpMessageConverter? converters) {super.configureMessageConverters(converters);FastJsonHttpMessageConverter fastConverter new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);fastConverter.setFastJsonConfig(fastJsonConfig);converters.add(fastConverter);} }
http://www.zqtcl.cn/news/244845/

相关文章:

  • 深圳市坪山新区建设局网站给别人做网站去掉版权
  • 怎么做监测网站的浏览量有没有专业做股指的评论网站
  • 济南微信网站开发网上效果代码网站可以下载吗
  • 门户网站的设计常见的管理信息系统有哪些
  • 网站添加悬浮二维码成都游戏网站开发
  • 用jquery做网站百度seo排名规则
  • 免备案手机网站室内设计说明
  • 网站被做站公司贩卖怎样将qq空间建设为个人网站
  • 网站开发有哪几类淮安app开发公司
  • 营销网站建设公司哪家好兵团第二师建设环保局网站
  • 做推广最好的网站是哪个深圳办公室装修招标
  • 郑州高端网站制作wordpress那个版本好
  • wordpress屏蔽右键f12奉化首页的关键词优化
  • cn域名做犯法网站做电影网站需要哪些证
  • 官方网站有哪些韶关做网站的公司
  • 商城网站设计公司怎么样网站制作预算
  • 在济南什么人想做网站网站建设后怎么做主页
  • 联合年检怎么做网站上国家备案查询
  • 社交网站wap模板wordpress网址导航插件
  • 沈阳快速建站公司有哪些国外做二手服装网站
  • 手机如何建立网站平台seo比较好的优化
  • 电商网站建设外包禅城南庄网站制作
  • 哈尔滨企业网站开发报价免费php网站源码
  • 东莞市公司网站建设淄博网站制作营销
  • 企业网站无线端怎么做手机网站做成app
  • 让他人建设网站需要提供的材料可在哪些网站做链接
  • 外贸公司做网站3d建模好学吗
  • dedecms新网站 上传到万网的空间上海新媒体运营公司排名
  • 包装东莞网站建设0769三层网络架构
  • 淘客网站自己做固安建站公司