Java web开发小技巧

使用 Maven 阿里云国内镜像

修改maven根目录下的conf文件夹中的setting.xml文件,在mirrorms内添加如下内容:

<mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>        
 </mirror>

注解说明

  • @SpringBootApplication : 是Spring Boot 项目的核心注解 主要目的是开启自动配置
    是@Configuration.+@EnableAutoConfiguration.+@ComponentScan注解的组合
  • @Value : 属性注入,读取properties或者 Yml 文件中的属性
  • @ConfigurationProperties : 将properties属性和一个Bean及其属性关联,从而实现类型安全的配置
  • @EnableAutoConfiguration 注解:作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

热部署

方法1 添加springloaded依赖

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>springloaded</artifactId>
     <version>1.2.5.RELEASE</version>
</dependency>

原理:基于ASM实现动态生成类或者增强既有类,每次类的修改会被检测到,然后重新生成新的类并加载。如果不懂什么是ASM可以百度JAVA-ASM。

方法2 添加spring-boot-devtools依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
</dependency>

原理:spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

配置文件

在 spring boot 中,有两种方式实现文件配置,application.properties 和 application.yml。大家可能对properties 比较熟悉,而另一种yml是基于YAML实现的,YAML 是一种比JSON(json多层次{ 与 [ 会被搞晕的)更直观的表现形式,展示上更易查错和关系描述。因为不需要一个专业工具就可以排查正确性。

下面,我们以server为例展示下两者的不同。

application.properties

server.context-path=/springboot
server.port=8080
server.session-timeout=60
server.address=192.168.1.66
server.tomcat.max-threads=300
server.tomcat.uri-encoding=UTF-8

application.yml

server:
    context-path: /springboot
    port: 8080
    session-timeout: 60
    address: 192.168.1.66
    tomcat:
      max-threads: 300
      uri-encoding: UTF-8
logging:
    level:
      root: INFO

yml天然的树状结构,一目了然,层次感强,有没有亮瞎你。当然使用yml要注意,层次间隔必须是空格不能是TAB,并且属性名的值和冒号中间必须有空格。

部署环境

  • 开发环境(development):application-dev.properties

  • 测试环境(test):application-test.properties

  • 生产环境(production):application-prod.properties

那么如何定义使用哪种配置文件呢?在主配置文件application.yml中配置如下:

spring:
  profiles:
    active: dev

Controller和RestController的区别?

1)如果只是使用@RestController注解,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

属性配置

如何在代码中获取配置文件中的属性呢?spring-boot为我们提供了这样一种方式,只需要使用@Value注解即可。

@Value("${spring.mail.username}")
public String USER_NAME;

thymeleaf模版

默认配置下,thymeleaf对html的内容要求很严格,比如,如果少最后的标签封闭符号/,就会报错而转到错误页。

#忽略thymeleaf严格的校验
spring.thymeleaf.mode=LEGACYHTML5
#开发阶段设置为false方便调试
spring.devtools.livereload.enabled=true
spring.thymeleaf.cache=false
spring.thymeleaf.cache-period=0
spring.thymeleaf.template.cache=false

自定义静态资源

通过配置文件在application.properties(或.yml)中配置

# 静态文件请求匹配方式
spring.mvc.static-path-pattern=/**
# 修改默认的静态寻址资源目录 多个使用逗号分隔
spring.resources.static-locations = classpath:/templates/,classpath:/resources/,classpath:/static/

通过代码配置

@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.itstyle.modules" })
public class Application extends WebMvcConfigurerAdapter {
    private static final Logger logger = Logger.getLogger(Application.class);
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/cert/**").addResourceLocations(
                "classpath:/cert/");
        super.addResourceHandlers(registry);
        logger.info("自定义静态资源目录");
    }
    public static void main(String[] args) throws InterruptedException,
            IOException {
        SpringApplication.run(Application.class, args);
        logger.info("支付项目启动 ");
    }
}

文件操作

获取文件

File file = ResourceUtils.getFile("classpath:cert/readme.txt");

获取路径

ClassUtils.getDefaultClassLoader().getResource("cert").getPath()
1,设置面板不可拖动变化 java.awt.Frame.setResizable(false); 2,设置一组单选RadioButton 先声明: ButtonGroup jButtonGroup = new ButtonGroup(); JRadioButton jRadioButton1 = new JRadioButton(); JRadioButton jRadioButton2 = new JRadioButton(); JRadioButton jRadioButton3 = new JRadioButton(); 后捆绑: jButtonGroup.add(jRadioButton1); jButtonGroup.add(jRadioButton2); jButtonGroup.add(jRadioButton3); 3,弹出一个提示框 JOptionPane.showMessageDialog(this,) 4,获取一个列表对象的总长度 getItemCount(); 5,判断一个列表对象中一个Item是否被选中 isIndexSelected(int index); 1,Jtable加到JScroll中,默认只实现了垂直滚动(VERTICAL),而水平滚动(Horizontal)没有实现,这时候会使得无论格子数量,总长度=界面宽度。 解决:jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 2,Swing常常显示中文乱码,对于使用了UIManager.getSystemLookAndFeelClassName() 的程序,可以采用如下方法; 解决:在UIManager.getSystemLookAndFeelClassName() 下方添加代码 java.util.Enumeration enum = UIManager.getDefaults().keys(); String str; while(enum.hasMoreElements()){ if((str = (String)enum.nextElement()).endsWith("font")){ //只要与字体相关 UIManager.put(str,new Font("宋体",0,12)); } } 3,改变菜单栏等大小 设置合适的字体 4,对于En_US编码的informix,JTable中文显示乱码 对于这类情况,JDBC在取出数据而未显示时,已经是乱码,解决方法: 在连接语句的最后,加上;NEWCODESET=gbk,8859-1,819 5, 1、JFrame在屏幕中居中显示,只须在主类的构造方法里面加上一句: setLocationRelativeTo(null); 2、若要让JDialog居中显示,可以加上一句: JDialogname.setLocationRelativeTo(null); setLocationRelativeTo()方法一定要JDialog的SetSize()方法或者是pack()的后面,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值