第一个springMVC

image.png

前言

开始学习springMVC整理的笔记,今天这一篇是回顾第一个springMVC程序。

image-20200615090431199

环境

大致文件结构

image-20200615085649492

先是要创建好一个普通maven工程,加入一些servlet包以及mvc支持的jar包,如下,(我的这个项目设置是参考b站的狂神说Java,设置一些父工程这样,方便后期的扩展学习)。

先是整体父工程的配置-pom。xml(springMVC)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.yhy</groupId>
<artifactId>springMVC</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springmvc-01-servlet</module>
<module>springmvc-02-firstdemo</module>
</modules>
<!-- 引入的jar包等-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

<!-- 设置maven的一些配置,要不然会报错jdk版本问题,这个是我自己设置maven的问题-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>11</maven.compiler.release>
</properties>

<profiles>
<profile>
<id>JDK-11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>


</project>

这里的第一个springMVC是第二个模块-springmvc-02-firstdemo

所以可以看下里面的具体文件结构,如下,这里的话,是使用了jsp去创建了,不懂jsp的可以稍微了解一下就行了,后面也不会怎么用。了解点到即可。

image-20200615085938429

来看这个子模块的maven配置文件,都单独引入了什么包支持。然后发现这里是不用引入了什么。空空的,只有一天parent标签,表示是谁的子模块,可以继承其父亲的jar包支持

pom.xml(springmvc-02-firstdemo)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springMVC</artifactId>
<groupId>com.yhy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>springmvc-02-firstdemo</artifactId>


</project>

主要代码

先是controller,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.yhy.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @Author: yhy
* @Date: 2020/6/15
* @Time: 0:26
*/
public class HelloController implements Controller {

@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModelAndView 模型和视图
//当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。
//默认的bean风格构造方法,填充bean属性,不传递构造参数
ModelAndView view = new ModelAndView();
//封装对象
view.addObject("msg","HelloSpringMVC!");
//封装要跳转的对象 放在modelandview,将其返回的视图名称
view.setViewName("hello");
return view;
}
}

页面hello.jsp-视图直接取到并且展示了从Controller带回的信息。

这个视图和其他视图一样,都放在/WEB-INF/目录下,保证了安全性和不可见性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2020/6/15
Time: 0:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>yhy for springmvc</title>
</head>
<body>
${msg}
</body>
</html>

配置

web.xml

这里的web.xml与以往的web配置文件不同,不要注册servlet,而只是注册dispatchservlet

,这个是springMVC的关键之处,在后面会写到,所以就相当于全部servlet交给了spring去管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 注册dispatchservlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 关联springmvc的配置文件:官方名字-(servletname)+servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 设置启动级别 越大就越优先-->
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

主要的spring配置

再来是resources下面的springmvc-servlet.xml的主要写法,这里添加了一些处理器和适配器。以及注册了自己定义的类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 添加处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 添加处理适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀-->
<property name="suffix" value=".jsp"/>
</bean>

<!-- 注册自己定义的类-->
<bean id="/hello" class="com.yhy.controller.HelloController"/>

</beans>

结果显示

image-20200615102857257

最后总结

先讲下我一开始比较困惑的一个类ModelAndView,之前没接触过。借鉴,在上面的示例中,就使用了作用二,用于传递控制方法处理结果到结果页面中显示,上面是使用了jsp的${}来完成的。而且这个类是用户手动创建。类中的一些方法如下

image-20200615103205075

ModelAndView对象有两个作用:

作用一 设置转向地址,如下所示(这也是ModelAndView和ModelMap的主要区别)
ModelAndView view = new ModelAndView(“path:ok”);

作用二 用于传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
addObject(String key,Object value);

在页面上可以通过el变量方式$key或者bboss的一系列数据展示标签获取并展示ModelAndView中的数据。

springmvc与以往的传统的Javaweb项目结构相比,主要体现在web的配置文件上,一个以往的servlet全部配置在web.xml,现在可以交给spring来完成,只需完成注册,到后面的注解实现,可以实现更加简洁方便。加上后面的前后端分离设计,代码结构更加清晰。

leetcode数组系列之搜索排序篇

image.png

前言

先是学习Expore中的二分搜索,写这篇文章记录下遇到的好的例题和好的代码题解。

首先这是二分搜索模块

最简单的实现运用

就最简单的实现二分搜索,一开始建议通过自己思考去完成,尽量不看题解去完成。

image-20200610223905416

image-20200610225851997

left+(right-left) / 2这个操作是防止越界。

求数的开方

image-20200611223407129

答案-就简单的二分法去做

image-20200611223450452

还有一种利用数学的方法去做

1
2
3
4
5
6
7
8
9
10
class Solution {
public int mySqrt(int x) {
//利用数学的方法去做
long r = x;
while(r * r > x){
r = (r + x / r) / 2;
}
return (int)r;
}
}

阅读笔记

image.png

记录下最近阅读到的一些读书笔记

Idea使用小结

Idea使用记录小结

主题

配置-排错

解决jdk发行版本问题

在一些maven项目开启的时候,常常会有错误出现,因为idea里面当下的项目配置是因为maven的原本的配置给覆盖了。说先有可能是setting出了问题,可以先打开project-setting(在idea里面是左上角的file-project seetting)

解决发行版本问题 强制约束maven中的jdk版本。直接在pom.xml上设置

1
2
3
4
5
6
7
8
9
10
11
12
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>

其他功能

打开UML结构图

比较新的版本的Idea是支持UML结构类图的,找到一个类或者是接口,直接右键,看图操作就可以了。

image-20200525003140655

最后的结果就是这样了。

image-20200525003252342

Vscode问题总结

  1. The compiler compliance specified is 11 but a JRE 12 is used

image-20200526114928021

leetcode入门之数组系列


前言

之前看到刷leetcode的技巧相关文章的时候,看到一个大神建议说,在一开始可以先按数组、字符串、链表、树的tag来刷,同时切记一开始先刷easy的。这样可以很大程度上将基础巩固,因为在后面的中等题以上都是会用到这些基础知识,如果有了牢固基础,相信在学习其他复杂的知识点就可以很快解决。下面是记录一些解题的技巧和好的题目。

题目

#leetcode-learn环节

下面的例题是在英文版本的leetcode中的explore环节的学习。

1、找出连续1的数组长度

image-20200603100321399

2、位数为偶数位的个数

image-20200603102137902

image-20200603102106796

3、数组的平方

image-20200603103439065

做法一

image-20200603103553978

做法二

image-20200603104524713

4、复制零并且移动数组

image-20200603221149084

image-20200603224454937

5、合并数组

image-20200604095218172

image-20200604095321571

6、删除数组中的重复数字

image-20200604164428972

image-20200604163548016

7、在升序的数组删除重复的数字。6的变式

image-20200610212514429

O(1)空间复杂度的数组复制

image-20200610213506246

#66-加一操作

image-20200523141838014

答案示例,这里的思路和清晰,这个题看似简单,但是里面的数组进位操作处理有点意思。

image-20200523142054241

#88 合并两个有序数组

image-20200524105015152

这里需要注意的是,这道题是直接在数组一上操作,不是开辟个新数组,这道题可以从后往前做,这样可以节省空间,更加高效,代码也很简洁。代码在下面

image-20200524105113799

#287-寻找重复数

题目如下,方框中是所需要注意的点

image-20200526085409344

采用快慢指针的方法,这是一个环的入口问题

#974 子数组被K整除的个数

image-20200527234100861

使用前缀和的方法-简单的讲是记录数组的前n项

有 N 个的正整数放到数组 A 里,现在要求一个新的数组 B,新数组的第 i 个数 B[i]是原数组 A 第 0 到第 i 个数的和。

#1464 数组中最大的两个数

image-20200611085650281

暴力法

image-20200611085928108

城市轨道交通与其它交通方式衔接的研究2017052397-颜华艺

spring系列-01

springhello程序

258eb28a50f8c2b5cf26bbcfa60bbffb

先写个实体类

image-20200524221506223

配置

pom.xml

导入lombok纯粹是为了省一些写代码的操作,使用注解的方式来省下时间,但是初学者还是非常不建议使用这个

image-20200524232353430

导的spring是下面这个mvc的web架构的包,可以使用

image-20200524232418174

里面的包里面有这些分支,可以使用。

image-20200524232644861

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">

<!--这里的bean是一个对象
id是变量名
class是new的对象
property相当于给对象中的属性配置一个值
由spring创建的,原来是
对象由spring注册管理等
-->
<bean id="hello" class="com.yhy.pojo.Hello">
<property name="str" value = "hello world"/>
</bean>

<!-- more bean definitions go here -->

</beans>

修改可以直接在xml文件中修改,其他的不用理了。所谓的IOC就是对象由spring创建、管理、装配。

核心

查看DeaultListableBeanFactory的结构图,idea怎么使用结构图查看是怎么样的,可以参考下这个文章。

image-20200524235137002

IOC(Inversion of Control)

The org.springframework.beans and org.springframework.context packages are the basis for Spring Framework’s IoC container. –spinng官网上的一句华

直译过来就是这里两个包是spring框架中的IOC容器的基础,在上面的maven截图中,也是可以看到spring mvc里面有这两个包,要不然也不可能使用完整的spring框架。所以想学会这个IOC,这两个包的了解是必不可少的。

IOC创建对象

默认是无参构造方法

使用有参构造有几个方法

有三种 参数名 下标 名字