导图社区 JavaAA 网络篇 知识树(1)
Java网络篇思维导图,整理了前端、通信、maven架构、数据库的内容,有兴趣的可以看看哟。
编辑于2023-02-24 13:52:47 贵州自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度。
自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度。
自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度
社区模板帮助中心,点此进入>>
自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度。
自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度。
自用的考研西综的思维导图,重点突出,虽然不华丽但绝对实用,整合了其他考研老师如傲视天鹰、天天师兄和老贺的重点,也可以方便使用者自行修改;附带考研刷题过程中刷到的一些经典或较难的题目,边看边做题方便巩固知识点;也添加了一些从刷题评论区找到记忆技巧和记忆口诀,为使用者降低记忆难度
JavaAA 网络篇 知识树
浏览器
前端
基础元素
JSP
JSP脚本
<% 代码 %>
<%! 代码 %>
<%= 代码 %>
jsp指令
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
page 指令
contentType
设置响应体类型、字符集、JSP页面编码
include指令
可以导入其他页面到本页面中,不用重复写代码 用于做页面包含
<%@ include file="top.jsp"%> //让本页面包含top.jsp页面
taglib指令
用于导入网络资源,需要用url 导入后,就可以使用标签库
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %> //prefix后面的是前缀,是自定义的,以后写东西就是前缀:xxx
JSP内置对象
jsp页面中无需创建 可以直接使用的对象
①pageContext
真实类型:PageContext
作用①:在当前页面获取数据
作用②:通过get方法获取其他8个内置对象
②request
真实类型:HttpServletRequest
③application
真实类型:ServletContext
作用:所有用户间共享数据
④response
真实类型:HttpServletResponse
⑤out
真实类型:JspWriter
作用:输出对象,可以输出数据到页面上
EL表达式
语法
${表达式}
${ 3>4 }
这里的意思是返回3>4的结果,这里当然是false
使用
获取值
从指定域对象中获取指定键的值
${域名称.键名}
${sessionScope.age}
获取集合
获取对象
获取某对象中某属性的值
${域名称.键名.属性名}
${requestScope.u.name}
获取List集合
${域名称.键名[索引]}
${requestScope.list[0]} //获取list中的值
获取Map集合
${域名称.键名.key名称}
${requestScope.map.gender} //获取map中的值
JSTL
JavaServer Page Tag Library:JSP 标准标签库,用于简化jsp页面的Java代码书写
通信
会话
客户端会话技术
Cookie
使用
响应Cookie
Cookie c= new Cookie("msg", "hello"); response.addCookie(c);
获取Cookie并解析
Cookie[] cs= request.getCookies(); //获取Cookies数组
服务器端会话技术
Session
从request对象中获取session
HttpSession getSession()
给session存入键和值
void setAttribute(String name, Object value)
获取session中对应键的值
Object getAttribute(String name)
Filter过滤器
过滤器使用
步骤
①定义一个类实现Filter接口,并复习方法 ②配置拦截路径
@WebFilter("/*") //配置拦截路径,这样写表示所有的路径都拦截 public class FilterDemo1 implements Filter{ //过滤器类 init()方法{} doFilter()方法{ filterChain.doFilter(servletRequest,servletResponse) ; //核心方法doFilter()方法,这样写了就放行 } destory()方法{} }
核心方法doFilter()方法,用于判断是否放行
过滤器配置
注解配置
@WebFilter(value="拦截路径", dispatcherTypes=拦截请求方式)
@WebFilter(value="/*", dispatcherTypes=DispatcherType.REQUEST) //表示拦截浏览器发送的所有直接请求
JSON
获取数据
①json对象.键名
var name= person.name;
②json对象["键名"]
var name= person["name"];
③数组对象[索引]
var ps=[ {"name":"张三", "age":11} , {"name":"李四", "age":12} ]; var name= ps[1].name;
json与Java相互转化
常用jackson解析器
Java转json
String writeValueAsAtring(object)
//1.创建Preson对象 Preson p= new Preson(); //2.创建jackson的核心对象 ObjectMapper mapper= new ObjectMapper(); //3.转换 String json= mapper.writeValueAsAtring(p);
json转Java
Objcet readValue(json字符串,Class类名称)
//1.初始化json字符串 String json= "{\"name\":\"张三\",\"age\":23}"; //2.创建ObjectMapper对象 ObjectMapper mapper = new ObjectMapper(); //3.转换为Java对象 Person person= mapper.readValue(json, Person.class);
格式化注解
@JsonIgnore:排除属性
@JsonIgnore //忽略日期属性,该属性不进行转化 private Date birthday;
@JsonFormat:属性值的格式化
@JsonFormat(pattern= "yyyy-MM-dd") //转化时,将日期格式化为yyyy-MM-dd private Date birthday;
maven架构
表现层Controller
Servlet
基础
体系结构
方法
service()
配置
web.xml
HTTP
协议内容
request消息
请求消息
①请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
②请求头
请求头名称 : 请求值
User-Agent
代表浏览器版本,解决兼容性
Referer
代表请求的来源,用于防盗链
③请求空行
④请求体
response消息
响应消息
①响应行
协议/版本 响应状态码 状态码描述
②响应头
头名称:值
①Content-Type
代表响应体格式
②Content-disposition
代表打开响应体方式
in-line:默认值,在当前页面内打开 attachment;filename=xxx:以附件形式打开
③响应空行
④响应体
Request对象
获取请求数据
获取请求行数据
获取请求的URL
getRequestURL()
String requestURL= request.getRequestURL();
返回一个URL
获取请求头数据
获取请求头名称
getHeaderNames();
通过请求头名称获取请求头的值
getHeader(String name);
获取请求体数据
其他功能
①获取请求参数
获取所有参数名称
get ParameterNames()
根据参数名称获取参数值
get Parameter(String name)
②请求转发
RequestDispatcher requestDispatcher= request.getRequestDispatcher("/requestDemo9"); //通过request对象获取请求转发器对象 requestDispatcher.forward(request, response); //使用 RequestDispatcher 对象进行转发
③共享数据
①setAttribute(String name, Object obj);
②Object getAttribute(String name);
③removeAttribute(String name);
④获取ServletContext对象
ServletContext getServletContext()
Response对象
设置响应数据
设置响应头
setHeader(String name, String value)
重定向
状态码为302,设置响应头的location为资源路径
response.sendRedirect("/day15/responseDemo2");
ServletContext对象
可获取所有用户所有请求数据
获取ServletContext对象
通过request对象获取
request.getServletContext();
ServletContext context1 = request.getServletContext();
使用ServletContext对象
获取请求数据
setAttribute(String name, Object value)
获取文件的真实路径[重点]
String getRealPath(String path)
String realpath= servletContext.getRealPath("/b.txt"); //获取文件的真实路径 File file= new File(realpath);
SpringMVC
SpringBoot
服务层Service
Spring
Spring原生
IoC
基本实现
①导入坐标
在pom.xml中导入Spring的坐标
②定义Spring管理的类(接口的实现类)
public class BookServiceImpl implements BookService{ //定义接口的实现类 private BookDao bookDao= new BookDaoImpl(); }
③配置bean
在配置文件applicationContext.xml中配置
<!--配置bean--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" /> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" />
④拿这个IoC容器去运行bean
public class App2{ public static void main(String[] args){ ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml "); BookDao bookDao= (BookDao) ctx.getBean("bookDao"); //别忘了要对bean进行强制转型 bookDao.save(); } }
DI
基本实现
①在Service里面写一个set方法,用来传入Dao对象
public class BookServiceImpl implements BookService{ private BookDao bookDao; //提供对应的set方法,用于代替new,来传入对象 public void setBookDao(BookDao bookDao){ this.bookDao= bookDao; } }
②在配置文件中进行配置,告知Dao与Service的关系
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" /> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" > <propertyname="bookDao" ref="bookDao" /> </bean>
核心容器
从核心容器获取bean
ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml"); //利用配置文件获得核心容器 BookDao bookdao=(BookDao)ctx.getBean("bookDao"); //从核心容器中获得对象
bean
bean的配置
<bean id="bookDao" bean的id name="dao bookDaoImpl" bean的别名 class="com.itheima.BookDaoImpl" bean类型 scope="singleton" 控制bean实例化数量 init-method="init" 生命周期初始化方法 destory-method="destory" 生命周期销毁方法 autowire="byType" 自动装配类型 factory-method="getInstance" bean工厂方法 factory-bean="com.itheima.BookDaoFactory" 实例化工厂bean lazy-init="true" 控制bean延迟加载 />
配置
Spring注解开发
注解开发bean
bean的声明
使用@Component注解表示配置一个bean 里面的内容表示其id
@Component("bookDao") public class BookDaoImpl implements BookDao{ }
bean的管理
控制是否为单例对象
@Component @Scope("prototype") //prototype表示是非单例对象,singleton表示单例对象
控制初始化及销毁
@PostConstruct //@PostConstruct注解控制初始化方法 public void init(){} @PreDestory //@PreDestory注解控制销毁方法 public void destory(){}
bean的依赖注入
直接注入对象
@Autowired
@Autowired private BookDao bookDao;
指定对象id注入
用@Qualifoer注解指定名称 @Qualifoer必须依赖于@Autowired注解
@Autowired @Qualifier("bookDao") private BookDao bookDao;
注入基本数据类型
用@Value注入简单类型
@Value("100") private String connectionNum;
注入引用数据类型
用@PropertySource注解加载配置文件
@Configuration @ComponentScan("com.itheima") @PropertySource("jdbc.properties") public class SpringConfig{ }
注解开发配置文件
①创建配置类
@Configuration @ComponentScan("com.itheima") public class SpringConfig{ }
②改变核心容器传入参数
//原来的加载配置文件的 ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml"); //现在应该改成读取配置类的容器 ApplicationContext ctx= new AnnotationConfigApplicationContext(SpringConfig.class);
③将其他配置类导入核心配置类中
用@import注解
@Configuration @import(JdbcConfig.class) public class SpringConfig{ }
把jdbc的配置类独立成一个文件 把datesource的配置类独立成一个文件 最后将这些文件导入spring的核心配置类中 这样才称得上优雅
AOP
事物
事务的使用
①告诉Spring核心配置文件,使用了事务
@EnableTransactionManagement //把这个注解写到核心配置类上,开启事务
②制作事务管理器
Spring在业务层提供了接口:PlatformTransactionManager(平台事物管理器)来控制事务 还给出了一个最基本的实现类:DataSourceTransactionManager,用于创建事务管理器
@Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ //这里要输入数据源的 DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource); return transactionManager; }
③在需要事务管理的方法或者类或者接口上,使用@Transactional注解,表示开启事务
@Transactional public void transfer(String out, String in, Double money);
事务的配置
@Transactional(readOnly = true, timeout=-1, rollbackFor={NullPointException.class,IOException}, propagation = Propagation.REQUIRES_NEW)
①readOnly: 设置是否为只读事务 ②timeout: 设置事务超时时间,-1表示永不超时 ③rollbackFor: 设置事务回滚异常,出现那些异常时要回滚 ④propagation: 设置事务传播行为
SpringBoot
业务层快速开发
①做业务层接口
业务层接口继承业务层通用接口IService<T>
public interface IBookService extends IService<Book>{ }
②做业务层实现类
业务层实现类继承业务层通用实现类ServiceTmpl<M,T>,并实现业务层接口
@Service public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService{ }
数据层Mapping
SpringBoot
数据层标准开发
数据层与业务层开发有所不同,二者定义接口的名称有区别,不要混用
①数据层开发偏重数据库内容,是以操作数据库的逻辑进行命名,如: selectByUserNameAndPassword(String username, String password);
②业务层开发偏重业务逻辑,是让人看到这个业务是做什么的,如: login(String username, String password);
maven本体
常用命令
compile 编译
mvn compile
将Java文件编译为字节码文件夹target,并放到--src目录旁边
package 打包
mvn package
将Java文件编译并打包为war文件,并放入target中
clean 清理
mvn clean
将target文件夹删除
install 安装
mvn install
将项目安装到本地仓库中
依赖
Maven引入坐标与配置依赖范围
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
Maven导入插件
<build> //添加插件 <plugins> <plugin> <groupId>maven.plugins</groupId> <artifactId>plugin</artifactId> <version>3.1</version> </plugin> </plugins> </build>
可选依赖
<dependency> <groupId>com.itheima</groupId> <artifactId>maven_03_pojo</artifactId> <version>1.0-SNAPSHOT</version> <optional>false</optional> //这个就是来控制可选依赖的。如果是true,则表示隐藏该依赖 </dependency>
排除依赖
<dependency> //注意排除依赖是写在<dependency>标签内的 <groupId>com.itheima</groupId> <artifactId>maven_03_pojo</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> //这个就是排除依赖 <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
聚合与继承
父工程通过聚合,把各种各样的依赖聚集在一个项目中
父工程中配置可选依赖
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifctId>junit<artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement>
子工程通过继承,获得父工程中可以直接继承的依赖
<parent> //这个就是在配置父工程依赖,表示继承了父工程 <groupId>com.itheima</groupId> <artifactId>maven_03_pojo</artifactId> <version>1.0-SNAPSHOT</version> <raletivePath>../maven_parent/pom.xml</relativePath> //这个是在配置父工程pom.xml文件的路径 </parent>
子工程通过选择,获得父工程中的可选依赖
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> //注意,这里不要写版本号 </dependency> </dependencies>
Maven分模块开发
①导入坐标,建立依赖
从外部引入模块,首先要导入这个模块的坐标到配置文件中
②保存模块到本地
用maven指令,安装需要的模块到本地仓库(对外部模块使用install指令)
SpringBoot
配置文件
yml配置文件
读取方式
方法①:用@Value读取单个数据
使用${一级属性名.二级属性名…}作为承载数据的方式,用@Value进行注入
@Value("${lesson}") private String lessonName;
方法②:用Environment环境变量对象读取数据
①环境变量等同于配置文件的信息,用@Autowired自动装配,将配置信息放入environment对象中 ②用getProperty()方法,从environment对象中读取属性
@Autowired private Environment environment; System.out.print(environment.getProperty("lesson"));
方法③:使用自定义对象封装数据[最常用]
①写自定义的类,对应配置中一部分属性 ②用@Component将该类作为一个bean ③用@ConfigurationProperties注解中的prefix属性,指定要加载配置文件中的那些内容
@Component @ConfigurationProperties(prefix = "enterprise") //将配置中enterprise的内容加载到该对象中 public class Enterprise{ private String name; //这些都是enterprise中的属性 private Integer age; }
多环境开发
①在不同环境间加上3个横线"---"分割,表示多环境; ②用profiles属性配置每个环境的名称(虽然这个已经过时了,但都在用) ③用active标签可以指定加载哪一个环境
#这是默认环境 spring: profiles: active: pro //用于指定使用哪一个环境,比如这里用生产环境pro --- #开发环境 spring: profiles: dev //这是开发环境的配置 server: port: 80 --- #生产环境 spring: profiles: pro //这个是生产环境的配置 server: port: 81 --- #测试环境 spring: profiles: test //这个是测试环境的配置 server: port: 82
多环境分组管理
用group属性,将不同的配置文件进行分组管理
spring: profiles: active: dev group: "dev": devDB,devRedis,devMVC "pro": proDB,proRedis,proMVC
通过group属性,给配置文件分组 然后给每个组后面编配各自的配置文件
测试
运维
数据库
MySQL
Redis