Week09手写笔记

本周内容

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

  1. 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前端框架

你可能感兴趣的:(手写笔记,java,数据库,sql)