javase:cs架构 client server
bs:browser server
传输控制协议tcp协议(传输层):4层
应用层:http https
传输层:Tcp,udp
网络层:
数据链路层(物理层):
ctrl+q:查看类、方法提示
ctrl+F7:查找整个项目中的类、方法、变量
ctrl+空格:类名智能提示
ctrl+n:在编辑器中找类
chrl+B或chrl+鼠标左键:进入类、方法、变量声明处
ctrl+f12:浏览整个编辑器的文件结构
ctrl+o:重写基类方法
ctrl+shift+空格:应该是提示补全合理的变量名,或者是智能提示,或new之后参数的类型提示
Tab:显示突出的选择
alt+insert:生成getter和setter方法
Alt+F1:在任何视图(项目视图、结构视图或其他视图)中快速选择当前编辑的元素(类、文件、方法或字段)
在所有树(左侧的项目列中)直接输入要搜索的文件名就能搜到
任何工具窗口中的Esc键都会将焦点移到编辑器上。
Ctrl+Alt+T:(代码|环绕)并选择try / catch。块中抛出的所有异常的捕获块将自动生成。
Ctrl+Alt+V:提取成方法
Ctrl+/和Ctrl+Shift+/注释或取消注释行和代码块。
Shift+F1:在浏览器中搜索
ctrl+d:复制当前行或块到下一行
Tab:在提示中进行上下移动
ctrl+空格:提示变量名(可以设置)
Ctrl+P:如果光标位于方法调用的圆括号之间,按Ctrl+P将显示有效参数列表。注意:有效
ctrl+shift+backspace(删除键):显示上一次更改的代码位置
使用Ctrl+Shift+F7(编辑|查找|高亮文件中的用法)快速高亮当前文件中某个变量的用法。
按Alt+Q(查看|上下文信息)查看当前方法的声明,而不需要 滚动到它。
Ctrl+E(查看|最近的文件)会弹出一个最近访问过的文件列表。选择所需的文件并按Enter键打开它。
alt+上下箭头
要查看所选类的继承层次结构,请按Ctrl+H(导航|类型层次结构)。您还可以从编辑器中直接调用hierarchy视图来查看当前编辑类的层次结构。
Ctrl+Shift+Enter:完成当前语句,如if、do-while、try-catch、返回(或方法调用)到语法正确的结构(如添加花括号)。
Ctrl+Shift+向上箭头 or Ctrl+Shift+向下箭头:移动行
IDEA:将tomcat服务器集成到开发环境中的软件
java:不支持javaWab程序,支持javaSE
java Enterprise:支持javaWeb
jsp:将java代码和html融合到一块的东西
web.xml:项目中的web.xml是配置该项目的配置信息的,conf中的server.xml是配置tomcat信息的
1、使用Tomcat部署java应用
bin:用于各个系统启动和停止tomcat的命令
lib:存放jar包的文件夹,例如js.jar,el.jar,可以通过java程序访问web中的jar包,扩展开发。
conf:tomcat的配置文件,里面的server.xml中有端口号等
logs:存放Tomcat web应用服务器运行的日志
temp:Tomcat运行时的临时文件(文件上传下载时用的,io流)
webapps:存放允许客户端访问的资源(Java程序)
work:存放Tomcat将JSP转换之后的Servlet文件,javaSE时只需要jdk就可以,做javaweb开发必须有tomcat提供的一些jar包,例如jsp.jar,servlet.jar
2、jsp和servlet
jsp是servlet,springMVC的前控制器就是servlet
Servlet是javaWeb开发的基石,与系统无关的服务器组件。它是运行在servlet容器/web应用服务器/tomcat中的,负责和客户端通信的
Servlet的功能:
1、创建并返回基于客户请求的动态HTML页面
2、与数据库进行通信。
如何使用Servlet:
Servlet本身是一组接口,自定义一个类,并且实现Servlet接口,这个类就具备了接受客户端请求以及做出响应的功能
javax.servlet.Servlet
servlet接口的五个抽象方法:
init(初始化),getServletConfig(获取servlet的一些信息,比如名字、上下文内容等)Servlet(处理控制代码)destroy(销毁servlet)getServletInfo()
配置web.xml映射关系或者使用注解才可以访问servlet文件,这两种配置方式的结果相同
servlet-servlet-name,servlet-class。servlet-servlet-name,url-pattern。
@webServlet
Servlet生命周期:
init:初始化,如果servlet容器中有servlet文件对象就不会执行此方法,只调用一次
service:调用就会执行
destroy:tomcat关闭就会调用
servlet的声明周期,调用的方法顺序:
无参构造:创建类,调用一次
init方法:出初始化对象 调用一次
service:调用n次
destroy:调用一次,释放资源
1、当浏览器访问servlet的时候,Tomcat就会查询Servlet的实例化对象是否存在,如果不存在,则通过反射机制动态创建对象,如果存在,直接调用service方法。
2、调用init方法初始化操作
3、调用service方法完成业务逻辑操作
4、关闭Tomcat时,会调用destroy方法,释放servlet
init的参数:servletConfig,在web.xml中的servlet标签下添加init-param,param-name,param-value标签,然后在init方法中调用作为参数servletConfig的getInitParameter(“key”),来获取值
init的参数ServletConfig:
该接口使用来描述servlet的基本信息的
getServletName()返回servlet的名称,全类名
getinitparameter(key)获取init参数值的(web.xml中的)
getinitparameterNames()返回所有的initParameter的name值
getServletContext()返回servletcontext对象,它是servlet的上下文,整个servlet的管理者
servletConfig和servletContext的区别
servletConfig是作用于某个servlet实例的,每个servlet的都有对应的额ServletConfig,ServletContext作用于整个web应用,一个Web应用对应一个ServletContext。
Servlet的层次机构:
Servlet->GenericServlet->HttpServlet
Http请求常用的四种:
GET 读取
POST 保存
PUT 修改
DELETE 删除
JSP
jsp本质上就是一个Servlet,jsp主要负责与用户交互,将最终的界面呈现给用户,是HTML+JS+SCC+JAVA的混合文件
为什么访问jsp文件会返回一个页面:因为jsp里是写的html代码,然后tomcat容器会把jsp转成servlet,然后servlet调用response的write方法一行一行的返给浏览器,浏览器解析html代码,最后就是一个页面,如果用postman工具就会展示源码(没有自动解析thml的功能,浏览器是html写的)
当服务器接收到一个后缀是jsp的请求时,将该请求交给JSP引擎去处理,每一个JSP页面第一次被访问的时候,JSP引擎会将它翻译成一个Servlet文件,再由Web容器调用servlet完成响应。
单纯从开发的角度看,JSP就是在HTML中嵌入java程序。
具体的嵌入方式有3种:
1、JSP脚本,执行Java逻辑代码
<% Java代码%>:里面可以有输出语句,定义变量等
2、JSP声明:定义java方法
:创建java方法
3、JSP表达式:把java对象直接输出到HTML页面中
<%=java变量%>
p7
JSP的9个内置对象
1、request:表示一次请求,HttpServletRequest。
2、response:表示一次响应,HttpServletResponse
3、pageContext:页面上下文,获取页面信息,pageContext
4、session:表示一次会话,保存用户信息,HttpSession
5、application:表示当前Web应用,全局对象,保存所有用户共享信息,SerrvletContext
6、config:当前JSP对应的Servlet的ServletConfig对象,获取当前Servlet的信息
7、out:向浏览器输出数据,JspWriter
8、page:当前JSP对应的Servelt对象,Servlet
9、exception:表示JSP页面发生的异常,Exception
常用的是request,response,session,application,pageContext
request常用方法:
1、String getParameter(String key)获取客户端传来的参数。1和3的区别:返回值不同 1是客户端传到服务端,3是服务端传服务端(jsp到jsp)
先在jsp1中setAttribute,然后getRequestDispatcher(jsp2.jsp).forward(1页面的请求,1页面的响应)调度到jsp2,然后转发
2、void setAttribute(String key,Object value)通过键值对的形式保存数据
3、Object getAttribute(String key) 通过key取出value
4、RequestDispatcher getRequestDispatcher(String path)返回一个RequestDispatcher对象,该对象的forward方法用于请求转发
5、String[] getParameterValues()获取客户端传来的多个同名参数
6、void setCharacterEncoding(String charset)指定每个请求的编码
http请求状态码
200:正常
500:Java程序抛出异常
404:资源未找到
400:请求类型不匹配
response常用方法:
1、sendRedirect(String path)重定向,页面之间的跳转。
转发getRequestDispatcher和重定向sendRedirect的区别:
转发是将同一个请求传给下一个页面,重定向是创建一个新的请求传给下一个页面,之前的请求结束生命周期。
转发:同一个请求在服务器之间传递,地址栏不变,也叫服务器跳转。
重定向:由客户端发送一次新的请求来 访问跳转后的目标资源,地址栏改变,也叫客户端跳转。
如果两个页面之间需要通过request来传值,则必须使用转发,不能使用重定向。
Session
用户会话
服务器无法识别每一次HTTP请求的出处(不知道来自哪个终端-浏览器),他只会接收到一个请求信号,所以就存在一个问题:将用户的响应发送给其他人,必须用会话技术来解决此问题
会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程
会话状态:就是sessionID,指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。
实现会话的两种方式:session和cookie
区别:session是java提供的,cookie是浏览器提供的。session是在服务端存放的,cookie是在终端存放的
属于同一次会话的请求都有一个相同的标识符:sessionID
session常用方法:(这些九大内置对象都是在jsp中的),在servlet中,session对象是HttpRequest的一个方法getSession()
String getId 获取sessionID
void setMaxInactiveInterval(int interval)设置session的失效时间,单位为秒
int getMaxInactiveInterval()获取当前session的失效时间
void invalidate() 设置session立即失效
void setAttribute(string key,Object value) 存储数据
Object getAttribute(string key)获取对应的数据
void removeAttribute(String key)删除对应的数据
Cookie:
cookie是服务端在Http响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个Cookie,在之后的请求中都会将此cookie携带着。
生命周期就是浏览器关闭,或者清除缓存cookie,或者打开无痕模式。
cookie创建:Cookie cookie=new Cookie(key,value);response.addCookie(Cookie cookie);
读取cookie:request.getCookies();
一般情况下浏览器第一次访问服务器的时候:浏览器不会携带cookie,服务器返回cookie。
第二次访问的时候,浏览器会携带cookie,服务器不会返回cookie。
Cookie常用方法:
void setMaxAge(int age),设置cookie的有效时间 若设置成30秒那么关闭浏览器也没事,应该是只能设置自己配置的cookie,也就是服务器返回给浏览器的cookie时间。
int getMaxAge();获取cookie的有效时间,默认是-1就是关闭浏览器就会失效,可以获取到系统自动生成的cookie时间,也可以获取自己设置的cookie时间
String getName()获取cookie名字
string getValue()获取值
Session和Cookie的区别:
session:保存在服务器
保存的数据类型是Object
是一个java类对象,可以设置时间,如果服务器关闭或者到期或者浏览器关闭就会失效
保存重要信息
cookie:保存在浏览器
保存的数据是String
是一个文本文件,关闭浏览器(因为默认时间是-1)或者清除缓存就会失效)(还可以设置有效期,有效期过了就失效)
保存不重要的信息
JSP内置对象作用域
4个:page,request,session,application
setAttribute,getAttribute
page作用域:对应的内置对象是pageContext,意思是存取都在pageContext.setAttribute中,
request作用域:对应的内置对象是request
session作用域:对应的内置对象是session
application作用域:对应的内置对象是application
page
request:只在一次请求中有效,可以转发,只要是同一个请求就可以
session:只在一次会话中有效
application:在整个web应用中有效,整个tomcat服务器,关闭服务器失效
网站访问量统计:使用application
EL表达式
Expression Language表达式语言,代替JSP页面中的数据访问时的复杂编码,可以非常便捷的取出域对象(pageContext,request,session,application)中保留的数据,前提是一定要先setAttribute,EL就相当于在简化getAttribute
变 量 名 变 量 名 就 是 s e t A t t r i b u t e 中 的 k e y 值 1 、 E L 对 于 4 种 域 对 象 的 默 认 查 找 顺 序 : p a g e C o n t e x t < r e q u e s t < s e s s i o n < a p p l i c a t i o n 2 、 指 定 作 用 域 进 行 查 找 p a g e C o n t e x t : {变量名}变量名就是setAttribute中的key值 1、EL对于4种域对象的默认查找顺序:pageContext
request: r e q u e s t S c o p e . k e y s e s s i o n : {requestScope.key} session: requestScope.keysession:{sessionScope.key}
application:${applicationScope.key}
EL执行表达式:
&& || ! < <= > >= == !=
&&:and ||:or !:not <:lt <=:le ==:eq !=:ne >:gt >=:ge
empty:判断域对象是否为空,空就返回true 变量为null或者string类型的长度为0,或者集合的size为0
注意:使用el表达式时如果要遍历for循环里面有li表达式,需要注意el里的for变量i不会改变,因为循环是在jsp脚本中而el表达式是在${}中
JSTL
JSP Standard Tag Library:Jsp标准标签库,jsp为开发者提供了一系列的标签,使用这些表签可以完成一些逻辑处理,比如循环遍历集合,让代码更加简洁,不在出现jsp脚本和el表达式或者html穿插的情况。
实际开发中EL和JSTL结合起来使用,JSTL负责逻辑处理,EL负责展示
JSTL的使用:
1、需要导入jar包(jsp.jar和standard.jar)存放的位置web/WEB-INF
2、在JSP页面开始的地方导入JSTL标签库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
3、使用
JSTL优点:可以用于编写各种动态功能
核心core:常用标签:
foreach,set,out,remove,catch
set:向域对象中添加数据但是不能添加类对象,或者修改数据,添加时:var是key的意思,value是value 可以指定域对象Scope。修改时target:目标对象(注意里面需要用el表达式,可以是类对象),property:要修改的属性名,value:想要修改为什么
out:输出域对象中的数据
注意和el标签${key}有区别,el如果为空就什么都不输出out有默认值,有default 属性,如果var中的值为null,就输出default中的值
remove:参数有var 和scope 删除域对象的值,注意要加域范围Scope,避免把其他作用域的值删除
catch:参数有var=“异常变量名”需要在catch外面使用el输出异常名 捕获异常 如:除数为0异常
核心core:判断标签
if:
choose:
格式化标签库:http://java.sun.com/jsp/jstl/fmt
函数标签库:http://java.sun.com/jsp/jstl/functions
f n : c o n t a i n s ( s , " h " ) , {fn:contains(s,"h")}, fn:contains(s,"h"),{fn:split(s,",")[0]},indexOf(s,“v”),substring(s,1,2),startsWith(s,“java”),endWith(s,“hello”),replace(s,“java”,“python”)
未完待续。。。