本周内容
1.servlet的本质以及他的架构体现
Servlet的本质:就是实现了Servlet接口的普通的java类(具体的子类),将HttpServlet中的具体的子类中doGet方法重写
Servlet的架构体系
最底层:Servlet接口:规定了相关的Servlet的生命周期相关的功能:
(1)init(ServletConfig配置对象)-->初始化方法
(2)处理来自客户端的对service方法的所有调用
(3)destrony():销毁Servlet
第二层:abstract Class GenericServlet实现了Servlet接口,将初始化方法init重写,并且提供了特有功能ServletConfig.getServletContext():获取全局对象
第三层:HttpServlet(抽象类),继承GenerivServlet,重写父类的Service()方法(Servlet业务功能的入口)
String method = request.getMethod();
如果得到的提交方式是get,则执行doGet();否则,执行dopost();
(4):具体的子类:根据自己的业务需要重写doGet方法和doPost();
2.Servlet的生命周期
Servlet是一个单例的(在内存中始终创建一个对象),默认创建对象的时间是访问Servlet的时候才创建对象!
通过web.xml文件中Servlet配置信息,配置正整数(值越大,优先级越小) ,实现当web容器启动的时候,就创建Servlet对象!
生命周期:
1)创建Servlet无参构造方法,然后进行初始化方法被调用:init(ServletConfig config);只执行一次
2)初始化完毕,调用业务方法Service()--重复执行
父类中的service不断获取提交方式,执行doXXX方法
实现我们业务逻辑的时候,要重写的具体的业务方法doXXX方法
get提交,执行doGet(),post提交,执行dopost()
(3)当前服务器正常关闭,,执行destony()方法,servlet被销毁了
public class LifeServlet extends HttpServlet {
public LifeServlet() {
System.out.println("servlet对象被创建了");
}
@Override
public void init(ServletConfig config) throws ServletException {
String name = config.getServletName();
System.out.println("Servlet的方法名是"+name);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service方法被调用了");
}
@Override
public void destroy() {
System.out.println("servlet被销毁了");
}
}
2.1 get提交和post提交的区别
(1)是否将数据提交到地址栏上
get提交是提交到地址栏上
post提交不是提交到地址栏上,是通过请求头下面的请求的实际参数formdata
(2)是否安全
get提交会显示在地址栏上,不适合私密数据提交,post会相对安全
(3)提交的数据大小书否有限制
get提交的数据大小是有限制的,因为地址栏是有一定长度的
post提交方式没有限制
3.Servlet里面的重要对象ServletConfig(了解)
ServletConfig:servlet配置对象,每一个servlet都有自己的配置对象;
public ServletConfig getServletConfig():获取servletconfig对象
作用:(1)获取servlet的类名:public String getServletName()
(2)通过初始化参数获取参数内容: public String getInitParameter(String name)
(3)获取Servlet里面的所有的参数名称:public java.util.Enumeration getInitParameterNames()
HttpServletResequest封装servletconfig的所有方法,所以可以直接通过HttpServletResequest的接口对象request.方法名() 直接获取
4.ServletContext(称为全局对象)(重点)
http://localhost:8080/JavaEE_2113_Serlvet_Jsp/contextDemo1:URL (统一资源定位符),它是URI的子集
/JavaEE_2113_Serlvet_Jsp/contextDemo1 :URI
/JavaEE_2113_Serlvet_Jsp:当前这个"web应用程序"的上下路径
servletcontext的作用:
(1)获取上下文路径:
1)首先获取全局对象ServletContext servletContext = this.getServletContext();
2)再通过全局对象获取上下文路径
//public String getContextPath()
(2)通过全局对象获取全局参数-->获取整个"web应用程序"的全部参数
public String getInitParameter(String name):通过参数名称获取参数值
public java.util.Enumeration getInitParameterNames() :获取全部参数名称
(3)通过全局对象请求转发(服务器请求将浏览器页面转发到服务器中,然后封装在请求响应(response)中)
1)获取分发对象:public RequestDispatcher getRequestDispatcher(String path) path 写法: "/路径",不用带上下文路径
2)转发到项目下的资源上:public void forward(ServletRequest request, ServletResponse response)
简写格式:request.getRequestDispatcher("/adv.html").forward();
备注:请求转发的特点:(1)地址栏没有变化 (2)整个请求转发的过程,请求对象request始终是一样的
(3)转发到某个jsp页面上,有业务数据的获取,必须请求转发 (4)请求转发可以访问到WEB-INF资源文件,请求转发只能访问本工程下的资源文件;
(4)作为"域对象"去使用-->域对象就是在不同的servlet容器通信
通用的方法:
1)setAttribute(String name,Object value):给属性对应的内容赋值,内容可以是任何数据类型的object(读取时进行强转)
2)Object getAttribute(String name):获取属性对应的内容
3)removeAttribute(String name):删除绑定的内容
四大域对象:从小到大 (不仅仅是域对象,而且还是jsp的内置对象)
PageContext pageContext(对象名称) 仅仅是在当前jsp页面有效
HttpServletRequest request(对象名称) 在一次请求中有效
HttpSession session(对象名称) (存储服务器端/) 在一次会话中
ServletContext application(对象名称) 在整个web应用程序 */
public class ServletContextDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取servletContext对象
ServletContext servletContext = this.getServletContext();
System.out.println(servletContext);
System.out.println("--------------------------------");
//获取上下文路径
String contextPath = servletContext.getContextPath();
System.out.println("上下文路径是:" + contextPath);
System.out.println("----------------------------------------");
//通过Httpservletcontext协议规定直接获取全局参数
//由名称获取参数
// String servletContextName = request.getServletContext().getServletContextName();
String first = request.getServletContext().getInitParameter("first");
System.out.println(first);
//获取全局参数
Enumeration names = request.getServletContext().getInitParameterNames();
while (names.hasMoreElements()) {
String s = names.nextElement();
String value = servletContext.getInitParameter(s);
System.out.println(s + "------" + value);
}
}
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request,response);
}
}
public class ServletContextDemo3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取全局对象
ServletContext servletContext = this.getServletContext();
//获取分发器对象public RequestDispatcher getRequestDispatcher(String path)
RequestDispatcher rd = servletContext.getRequestDispatcher("/adv.html");
//将请求转发到指定的资源文件中
rd.forward(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
5.RR(Request和Response)请求对象和响应对象
5.1 请求对象(Request)中一些功能
Http协议的一种规范:规定了当前浏览器发送请求的时候,规定请求内容的格式----请求行
请求头:请求的内容
tomcat8.0以上的,对于get提交的中文 自动解决乱码
获取请求头的内容:
String getMethod() ;获取提交方式
String getProtocol():获取协议版本
String getRequestURI():获取URI
request.getRequestURL().toString():获取整个请求地址(统一资源定位符)
String getHeader(String var1);获取请求头的内容,参数为请求头名称
请求对象中其他功能:获取前台的提交参数
String getParameter(String var1); 获取单个参数:通过指定name属性的属性值获取内容
Enumeration getParameterNames();获取地址栏上的所有的参数名称
5.2 响应对象(Response)中一些功能
服务器响应给浏览器,它会携带相关响应参数,doPost不管tomcat版本,必须解决中文乱码:request.setCharracterEncodig("utf-8")
response.setContentType("text/html;character =utf-8")
重定向的原理("浏览器行为"):通过服务器携带给浏览器一个响应头"location","文件资源地址"
重定向的特点:
(1)地址栏有明显变化
(2)整个重定向的过程,两次请求对象不一致,不能使用request域对象存储数据,否则jsp页面总获取不到request域中的数据值
(3)可以跨工程访问WEB资源文件
(4)不能访问web-inf下面的资源文件
状态码:404:地址栏,地址栏服务器找不到
405:提交方式有问题
500:服务器挂了(后台出错....)
6.Servlet+jsp(java Servlet page:java服务页面:本质就是Servlet)的最佳实践(重要)
jsp文件的存储路径:C:\Users\Administrator\.IntelliJIdea2019.1\system\tomcat
jsp的本质:Servlet
jsp的执行阶段
1)翻译阶段:将当前项目下jsp文件-->翻译XXX_jsp.java---->xxx_jsp.class文件
2)编译阶段:通过反射的放射 xxx_jsp.java-->xxx_jsp.class文件--运行jsp(jsp的生命周期)
jsp脚本:(1)注释<%-- --%>,不会被web解析
(2)<%java语言%>---->编写java语句
(3)<%=变量%>---->输出语句
jsp的脚本:<%java代码%>
jsp的输出表达式:<%=%>
6.1 jsp的三大指令
(1)<%@page%>:page指令
默认属性:contenttype:页面的编码格式
language:只支持java语言
buffer:默认的缓冲区大小8KB(通过jsp创建对象还是定义普通变量,不断的通过输出out)
errorpage:错误页面,当jsp出现错误,跳转到错误页面
iserrorpage:当前页面是否为错误页面
import:导包
(2)<%@include%>指令:静态导入指令-->将公共的jsp页面静态导入到其他jsp页面;被静态导入的jsp文件不会被单独的编译,比较节省内存
默认属性:file:导入文件的路径
(3)<%@taglib%>指令:结合导入jstl库---需要导入jsp标签库
<%@tagib prefix = "c" uti=""%>
taglib的属性:
1)test属性:true或者flase
2)items:从域对象中获取集合或者数组的数据
3)var:循环中的变量名
4)varstatus:循环中变量状态,他有一个固有属性index,从0开始,另一个属性count,表示序号,从1开始
taglib的标签:
(1)c:if--判断--输出语句
(2)c:choose---类似于if(){}...else{}
:判断语句
;都不成立的情况下
(3)c:foreach----类似于for循环
属性:begin:角标的起始值;end:角标的末尾值:var:循环中的变量;step:步长语句(自增1)
6.2 jsp的9大内置对象
前面四个域对象(重点) : 从小到大
从小到大 (不仅仅是域对象,而且还是jsp的内置对象)
PageContext pageContext(对象名称) 仅仅是在当前jsp页面有效
HttpServletRequest request(对象名称) 在一次请求中有效
HttpSession session(对象名称) (存储服务器端/) 在一次会话中
ServletContext application(对象名称) 在整个web应用程序
普通对象
ServletConfig config 配置对象
JspWriter(字符流) out 想浏览器输出内容
Object page(this):代表当前jsp对象(Java类:就是Servlet)
Throwable t : 异常对象
exception:运行时期异常/编译时期异常
error:严重问题
HttpServletResponse response :响应对象
6.3 el表达式–${}(重)–可以操作bean语言(javabean导航–对象图导航语言)
${}里面支持基本Java的运算符
${域对象绑定的属性}---->可以从四大域对象中按照从小到大的顺序依次寻找,找到则输出,否则为null!----就相当于{% 域对象.属性 %}
6.3.1 el表达式操作javabean导航
javabean导航:
el表达式:${绑定的属性的内容.bean属性},相当于对象.getXXX--去掉get; bean属性就是getXXX中的XXX;
User实体类有username和password两个属性
jsp中获取参数-->${user.username}-${user.password}
如果存入的数据是一个集合,获取集合内容-->${list[索引值]}
7.VM安装linux
Maven(POM:project object model:项目对象模型)
Maven项目管理工具
特点:(maven项目占用内存非常小,(不仅有本地仓库,存储了很多常用的jar包,而且通过私服(企业项目中的jar包)))
8.1 下载Maven(配置maven,本地配置,idea里面管理maven本地配置)
第一步:配置环境变量(MAVEN_HOME和path目录)
第二步:配置本地仓库路径:(maven的conf/setting.xml)D:\qianfengjiaoyu\apache-maven-3.3.9\conf
在55行左右
D:\qianfengjiaoyu\apache-maven-3.3.9\conf\repository_personal
162行左右
alimaven
aliyun maven https://maven.aliyun.com/repository/public
central
257行左右
jdk-1.8
true
1.8
1.8
1.8
1.8
8.2 创建Maven项目
第一步:创建Maven项目(推荐自动添加,不勾选)
第二步:create from archetpe(项目模板)(不勾选,选择自动创建模板)
第三步:添加项目标识
第四步:添加项目地址
9.通过Jquery文档–>Jquery的选择器以及如何触发事件
JQuery就是丰富的js库,html文档的dom操作,动画.ajax等等这些(jquery就是封装了各种各样的方法)
2.jquery的使用步骤:
(1)jq官网下载核心的js文件,导入js文件
xxx.版本号.min.js(部署闪现的js文件--使用压缩版)--js/jquery-3.4.1.min.js
(2)写一个入口函数 $(document).ready(function{})--->$(function(){ })
(3)找到你要操作的元素(jq选择器),去错操作他(给他添加属性,样式,文本等等)
jq的对象:
id选择器,$(#id属性值)
类选择器
标签选择器
页面载入事件:windows.onload()-->缺点:不能添加多个入口函数,如果添加了多个,后面的会把前面的覆盖掉;
windows.onload()和入口函数的区别:
(1):windows.onload()入口函数不能写多个,如果添加了多个,后面的会把前面的覆盖掉;但是jquery入口函数可以写多个
(2):执行时机不同,先jquery,后windows,ju入口函数是等dom树加载完毕后执行,而windows.onload()是要等页面上所有资源加载(外部css,js链接,dom树)完毕后执行;
$是什么?--->jq其实就是自执行函数,$就是jquery函数,jquery本身也是一个函数
10 bootstrap的全局样式
boostrap框架---就是提供用户的一种响应式框架(随着浏览器的视口在不断变化,网页中的内容自适应的!)
第一步:导包
布局容器:
class="container" 固定宽度并支持响应式布局的容器。
class="container-fluid" 用于 100% 宽度,占据全部视口(viewport)的容器。
栅格系统(进行具体布局的块的分析) 一行最多12列(12个格子)
容器下面需要使用 class="row" 一行
指定每一列的
class="col-设备编号-列数"
设备编号
xs超小屏幕 手机 (<768px)
sm小屏幕 平板电脑(>=768px)
md中等屏幕 桌面显示(>=992px)
lg大屏幕 大桌面显示器 (>=1200px)
表格标签:
加入boostrap的css样式 :表格基本样式 class="table"
class="table-striped" 条纹状表格
class="table-bordered" 给单元格加入边框
class="table-hover" 移动到每一行给做出"选中的响应状态"
class="table-condensed"紧缩表格
创建一个响应式表格
随着分辨率的不断改变,它会适应
将table实例表格 使用div包起来 指定calss="table-responsive"---自适应表格
表单标签:
class = "form-horizontal" 指定水平排列的表单
class="form-group" 将我们的input标签,select标签 和label包裹起来,形成一行的组件
class="form-control" :默认设置宽度属性为 width: 100%
图片标签:
class="img-rounded" 图片四角是圆角
class="img-circle" 圆形图片
class="img-thumbnail" 相框格式
class="img-responsive" 会默认将这个图片的视口---width:100%
按钮:
class="btn-group" 按钮组
dropdown-toggle 下拉式开关
class="dropdown-menu" 下拉式菜单
class="btn btn-primary":首选样式
btn-default:默认样式
btn-lg:大按钮 btn-md:中按钮 btn-xs:小按钮
10.在maveb项目中完成"管理员登录"—>使用boostrap前端框架