不要告诉别人(java高级是什么)java重点知识点梳理.pdf,Java高级重点归纳,java setattribute()方法,
考完了,押中了全部考点和简答题,希望该过的都过,该挂的都挂。
第一章
ssm框架:spring+spring mvc+mybatis
C/S:客户端/服务器端体系结构
客户端需要实现绝大多数的业务逻辑和界面展示安全性较好开发维护成本都比CS高B/S:浏览器端/服务器端体系结构
随着Internet技术的兴起,对C/S架构的一种变化或者改进的结构。用户工作界面是通过WWW浏览器来实现的,极少部分事务逻辑在前端实现,主要事务逻辑在服务器端实现。基于B/S架构的Web应用通常由客户端浏览器、Web服务器和数据库服务器三部分组成。Tomcat
lib目录主要用来存放tomcat运行需要加载的jar包。修改端口号:conf文件夹下的server.xml文件第二章
Servlet生命周期
init():只在第一次创建Servlet时调用service():执行任务的主要方法。doGet():请求类型是Get时调用,由service()调用。doPost():请求类型是Post时调用,由Service调用。destroy():Servlet生命周期结束时调用。响应状态码
200:请求成功500:服务器内部错误404:请求的资源不存在302:该资源原本确实存在,但已经被临时改变了位置重定向和请求转发
重定向:告诉客户机去访问另一个URL,发生在客户端,会返回两个响应。使用sendRedirect()方法。请求转发:把请求转发给服务器的另一个组件,发生在服务器端,只会返回一个响应,使用RequestDispatatcher对象的forward()或include()方法。请求转发时的forward()和include()
forward():从一个servlet中将请求转发给另一个资源,让第一个组件做出预处理,而让另一个组件处理并返回响应,控制权会交给另一个组件。不会忽略调用者和被调用者设置的状态码和响应头。转发后不可以继续输出响应信息。include():在响应中包含另一个资源,被包含页面产生的任何响应都将并入原来的response对象,然后一起输出到客户端,控制权还在自己身上。会忽略被调用者设置的状态码和响应头。转发后仍然可以继续输出响应信息。第三章
JSP会先被转换成Servlet,所以JSP和Servlet的响应状态码是一样的
JSP指令:<%@ %>设置整个JSP页面相关的属性,JSP指令是被服务器解释并执行的,不会产生任何内容输出到网页中.JSP注释:<%-- --%>JSP脚本:分为JSP表达式、JSP程序段、JSP声明。JSP表达式:<%= %>,里面只能包含一个表达式
JSP程序段:<% %>,里面可以插入任意数量的JAVA代码。
JSP声明:<%! %>,用于声明全局变量和方法,可以重写jspInit()和jspDestroy()。
内置对象
request对象:每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。作用域是一个request请求,主要用于接收客户端通过HTTP传送给服务器的数据。response对象:表示服务器对象的响应,创建request时同时创建responseout对象:用来在response对象中写入内容。session对象:用来跟踪在各个客户端请求间的会话。application对象:用于获取应用程序上下文环境中的信息,作用域是整个Web容器的生命周期。pageContext对象:用来代表整个JSP页面,主要用来访问页面信息,这个对象存储了request对象和response对象的引用,application对象、config对象、session对象和out对象也可以通过访问这个对象的属性来导出。拥有setAttribute()和getAttribute()方法,用来存取值。
config对象:允许开发者访问Servlet或者JSP引擎的初始化参数。page对象:页面实例的引用,可以被看作整个JSP页面的代表,是this对象的同义词。exception对象:用来产生对出错条件的适当响应。当form标签没有action属性的时候,会提交到当前页面,P57猜数游戏。
第四章
Session和Cookie
Cookie是存储在客户端计算机上的文本文件,其中保留了各种跟踪信息,识别返回用户包括三个步骤:
服务器脚本向浏览器发送一组Cookie,浏览器将这些信息存储在本地计算机上,以备将来使用。当下一次服务器向Web服务器发送任何请求时,浏览器会把这些Cookie信息发送到服务器。服务器将用这些信息来识别用户。Cookie通常设置在HTTP头信息中。
Session
Session存储在服务器上,Servlet容器会为每个用户建立一个HTTP会话(即HttpSession),HttpSession对象会在第一次访问服务器时由容器创建,所有保存在HttpSession中的数据不会被发送到客户端。Servlet容器为每个HttpSession生成唯一的标识,并将标识发送给浏览器,在后续的请求中浏览器会将标识提交给服务端,这样服务器就可以识别该请求是由哪个用户发起。
Session相比Cookie更安全
第五章
例:${expression}
EL表达式的变量需从JSP四大作用域范围中依序进行查找。
JSP四大作用域:
page:只在当前页面有效。request:在当前请求中有效。session:在当前会话中有效。application:在所有应用程序中都有效。第十章
// 读取mybatis-config.xml文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 初始化mybatis,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例:
SqlSession sqlSession = sqlSessionFactory.openSession();
类名 mapper = session.getMapper(类名.class);
Student student = mapper.getStudent("20171509");
sqlSession.commit()
sqlSession.close();
第十一章
select标签的resultType属性:
只返回结果map<a,b>中a=resultType值的对应的b(键值)。
resultMap属性:

返回对应id的resultMap中存在的属性的键值对。
resultType和resultMap同时只能存在一个,不能同时出现。
一对一映射:association
一对多映射:collection
多对一映射:association
多对多映射:collection
映射参数:select(触发n对n的方法的完整地址),ofType(查找目标的完整路径或小写类名(定义了别名时)),javaType(返回类型),column(查询的输入参数)
查询结果是普通类型时用javaType,是集合类型的时候用ofType
第十二章
<if>:在if标签中的判断条件为真的情况下,添加if标签之间夹着的语句。
<choose><when><otherwise>:switch、case、default。
<where>:在select语句中使用,添加一个where,而且where函数体中的if语句为真时添加if标签夹着的语句,如果where后面的字符串是以and和or开头的,则会自动删除and或or(where语句里面会有很多if语句,用来确定搜索条件)。
<set>:在update语句中使用,使用方法同上,只不过剔除掉的是逗号(用来确定设置的列)。
MyBatis的一个接口对应的xml文件里的select可以使用trim标签中的prefix属性增加前缀,使用prefixOverrides属性删除指定的前缀。
<select id="findEmployee_5" resultMap="employeeMap"> SELECT * FROM employee_basic <trim prefix="where" prefixOverrides="and "> <if test="dept_id != null "> and dept_id = #{dept_id} </if> <if test="emp_marriage != null and emp_gender != null"> and emp_marriage = #{emp_marriage} and emp_gender = #{emp_gender} </if> </trim> </select>第十三章
mybatis的注解方式类似JDBC,直接写在接口文件中的对应的接口上方。
第十五章
Spring的两大核心:依赖注入和控制反转。
设值注入配置文件的写法:applicationContext中:在bean之间写<property name="需注入类名" ref="被注入类名">
在类中创建set方法
构造函数依赖注入配置文件的写法:applicationContext中:在bean之间写<constructor-org name="需注入类名" ref="被注入类名">
依赖注入的调用语句都是:this.xxx=xxx;
AOP
切面:组织多个增强处理。
连接点:程序执行过程中明确的点。
设值注入
与传统的JavaBean的写法更相似,程序开发人员更容易理解、接收。通过setter方法设定依赖关系显得更加直观、自然。对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而通过设值注入能避免这些问题。在某些成员变量可选的情况下,多参数的构造器更加笨重。构造注入
构造注入可以在构造器中决定依赖关系的诸如顺序,优先依赖的优先注入。对于依赖关系无需变化的Bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定,无需担心后续的代码对依赖关系产生破坏。依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系,对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。AOP的基本概念:
切面:切面用于组织多个增强处理。连接点:程序执行过程中明确的点,它实际上是对象的一个操作,在Spring AOP中,连接点就是方法的调用。增强处理:在定义好的切入点出所要执行的程序代码。切入点:可以增强处理的连接点。当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。第十六章
Spring MVC是围绕DispatcherServlet(前端控制器)设计的,所有的前端请求都要通过它找到相对应的处理器。
使用Spring MVC时要在web.xml中配置
<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param>第十七章
输出模型数据(传递数据给其他模块用)的途径(在小知识点部分详述了这两个注解)
ModelAndView:处理方法返回值为ModelAndView时,方法体可以通过该对象添加模型数据。Map及Model:向Map中加入数据,待处理方法返回时,会将其自动添加到模型里。@SessionAttribute@ModelAttribute得到ModelAndView或Map及Model的值要使用${requestScope.time}或${time}
第十八章
preHandle:在请求处理之前进行调用。postHandle:在Controller中的方法调用之后执行。afterCompletion:在整个请求结束之后(DispatcherServlet渲染了对应的视图之后)执行。多个拦截器同时运行
preHandle:先进入的先执行。
postHandle和afterCompletion:先进入的后执行。
小知识点
SpringMVC是基于Spring框架开发的,在spring框架中加入了MVC框架。
ORM:对象关系映射ORM模式是一种用于解决面向对象与关系数据库存在的互不匹配现象的技术。简单地说,ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
IOC:控制反转AOT:运行前编译OOP:面向对象程序设计MVC:model、view、controllerprefix和suffix(前后缀)在springmvc-config.xml文件里定义。
springmvc-config.xml中的<mvc:interceptors>配置拦截器。
getParameter()和getAttribute()
getParameter()获取的是客户端设置的数据,getAttribute()获取的是服务器设置的数据。getParameter()永远返回字符串,getAttribute()返回值是任意类型。既然parameter和attribute都是传递参数,为什么不直接使用parameter呢?
服务器端不能通过setParameter(key, value)来添加参数,因为没有这个函数所以如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,则没法实现。但是Attribute可以,可以通过setAttribute(),将值放入到request对象,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息parameter返回值是字符串,意味着不能传递其他的对象,如Map,List,但是attribute则可以存放任意类型的Java对象JDBC连接数据库
配置中DB_URL的写法:“jdbc:mysql://localhost:3306/book”
注册JDBC驱动器:Class.forName("com.mysql.jdbc.Driver");打开一个连接:conn = DriverManager.getConnection(DB_URL, USER, PASS)执行SQL查询:stmt = conn.createStatement();String sql;sql=SQL语句;ResultSet rs=stmt.executeQuery(sql);只有jsp才有内置对象,servlet没有
用JSP开发的Web应用是跨平台的。
JSP编译后按顺序执行jspInit();_jspService();jspDestroy
Mybatis并没有将Java对象和数据库表关联起来,而是将JAVA方法和SQL语句关联起来。
在mybatis-config.xml里用<typeAlias>设置别名,使得xml文件中的各种type(parameterType、resultType)可以直接使用别名而不用写包名。
MyBatis配置项的顺序不能颠倒。
mybatis-config.xml里的别名设置:
第一种:
<typeAliases><package name="包名">
<typeAliases>
第二种:<typeAliases>
<typeAlias alias="JavaBean名" type="包名.Bean名"/>
<typeAlias alias="JavaBean名" type="包名.Bean名"/>
</typeAliases>
Spring拥有的注解
@Component:标注一个普通的Spring Bean类@controller:标注一个控制器组件类。@Service :标注一个业务逻辑组件类。@Repository:标注一个Dao组件类。@Autowired:自动装配(写在需要量依赖注入的语句前面)Spring MVC拥有的注解
@Controller和@RequestMapping@Autowired和@Service@RequestParam:给参数赋值时@PathVariable:得到URL中的花括号参数时@SessionAttribute:控制器加入此注解后,可以数据将另外存储到Session中,以便多个请求共享这个属性。@ModelAttribute:若一个方法标注了@ModelAttribute则在调用目标方法之前会调用这个方法。简答
servlet生命周期
(1)Servlet 通过调用init()方法进行初始化。
(2) Servlet 调用service()方法来处理客户端的请求。
(3) Servlet 通过调用destroy()方法终止(结束)。
(4) Servlet 是由JVM的垃圾回收器进行垃圾回收的。forward()和include()的区别
forward():从一个servlet中将请求转发给另一个资源,让第一个组件做出预处理,而让另一个组件处理并返回响应,控制权会交给另一个组件。不会忽略调用者和被调用者设置的状态码和响应头。转发后不可以继续输出响应信息。include():在响应中包含另一个资源,被包含页面产生的任何响应都将并入原来的response对象,然后一起输出到客户端,控制权还在自己身上。会忽略被调用者设置的状态码和响应头。转发后仍然可以继续输出响应信息。JSP生命周期的运行过程:
客户端第一次发出请求访问JSP文件JSP容器先将JSP文件转换成一个JAVA源文件(Servlet源程序),在转换过程中如果发现JSP文件中存在任何语法错误,则中断转换过程,并返回出错信息。产生Servlet源文件之后,Servlet容器就可以将它编译成Servlet类文件,然后由“类载入器”将Servlet类文件载入Servlet容器的JVM。成功载入Servlet类文件之后,Servlet容器将会建立一个Servlet实体,然后运行jspInit()方法,进入JSP初始化程序。每当用户送出JSP运行请求时,Servlet将会调用jspService()方法,并且传入request和response对象。当JSP被编译成Servlet时,所有HTML标签都会包含在_jspService()方法中。如果Servlet容器想要移除某个JSP所产生的Servlet实体,则将调用其jspDestroy()方法,并清除相关的系统资源。JSP四大作用域:
page:只在当前页面有效。request:在当前请求中有效。session:在当前会话中有效。application:在所有应用程序中都有效。mybatis相比JDBC的优点:
JDBC数据库连接过于频繁,每次都需要配置数据源、进行数据连接,结束时还要关闭数据源,而mabatis只需要连接一次JDBC的SQL语句过于零散,不利于管理,而mybatis的SQL语句都在同一个文件中,所以mybatis取出sql在数据库端运行更为方便。JDBC的可读性很差,而mabatis的可读性比JDBC好;JDBC改动java代码需要重新编译、打包和部署,而mybatis不需要。mybatis比JDBC的SQL语句参数更灵活。JDBC不支持结果映射和结果缓存而mybatis支持,jdbc每次执行后都需要手动取结果,而且没有自动映射功能,需要手动将结果映射到实体中,而且结果无法缓存。mybatisSQL重用度比JDBC高,jdbc每个sql语句都有不同的配置,无法重用。JDBC有些地方使用字符串拼接容易sql注入,所以相比mybatis不够安全。设值注入
与传统的JavaBean的写法更相似,程序开发人员更容易理解、接收。通过setter方法设定依赖关系显得更加直观、自然。对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而通过设值注入能避免这些问题。在某些成员变量可选的情况下,多参数的构造器更加笨重。构造注入
构造注入可以在构造器中决定依赖关系的诸如顺序,优先依赖的优先注入。对于依赖关系无需变化的Bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定,无需担心后续的代码对依赖关系产生破坏。依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系,对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。Spring MVC的工作流程
用户向服务器发送请求,请求被前端控制器拦截。前端控制器调用处理器映射器查找Handler处理器。处理器映射器根据请求URL找到对应的处理器,生成Handler对象和对应的拦截器,这一切会返回给前端控制器。前端控制器根据获得的Handler选择一个处理器适配器。处理器适配器调用Controller类。处理器执行完成后返回给处理器适配器一个ModelAndView对象,处理器适配器向前端控制器返回此对象。根据返回的对象选择合适的逻辑视图传给视图解析器。视图解析器把逻辑视图解析成视图并返回给前端控制器,前端控制器根据视图和模型数据渲染视图并返回给客户端。非重点的东西
servlet
servlet中的web.xml对servlet文件进行配置(访问哪个url对应哪个servlet)
总体使用生命周期中的五个方法完成任务
init():会在这个方法的ServletConfig参数中传递ServletConfig对象(Servlet的配置信息)给Servlet。service()doGet()doPost()destroy()获取值的方法
servletConfig.getInitParameter(xxx);获取Web.xml中的<init-param>中的值。(servlet,servletConfig接口,P28)request.getParameter(String name)获取表单中的请求参数(本地数据)(Servlet,HttpServletRequest接口,P30)request.getParameterValues(String name)当请求得到的是数组时(复选框)request.getAttribute(String name)获取存储在HttpServletRequest对象中的数据(服务器端数据)(Servlet,HttpServletRequest接口,P31)Mybatis接口必须要和 xml 文件同名且在同一个包下,也就是说 xml 文件中的namespace是接口的全类名
junit是一个单元测试框架
创建web应用程序的编程模式有:web pages、MVC、webforms。
BeanFactory为依赖注入提供支持。
ApplicationContext是BeanFactory的子接口,它可以加载配置文件中定义的Bean,将所有的Bean集中在一起,当有请求的时候就分配Bean。
在applicationContext中配置Bean的时候,Bean至少要有id和class两个属性。
依赖注入分为构造器注入、Setting注入和接口注入,接口注入意味着注入的内容来自外界,配置的数据源是在Tomcat服务器的context.xml文件中配置的(tomcat接口设置在server.xml中)。
使用Spring框架主要做两件事:开发Bean,配置Bean
Spring容器中的Bean实例化有三种方式:构造器实例化、静态工厂方式实例化和实例工厂方式实例化。
Bean通过Spring IOC管理
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据