JAVA学习记录 晨写 Week-9

9.20

1. 什么是servlet, servlet的本质是什么

Servlet:
     Server Appelt Java服务连接器(用户交互的浏览和生成动态web数据)
     
     Servlet的本质就是能够实现servlet接口的普通的类
          
          自定义类 继承的HttpServlet 抽象类
          HttpServlet extends GenericServlet 抽象类
          
          GenericServlet implements Servlet 接口

2. servlet的执行流程

1)浏览器向服务器发送请求

          http://localhost:8080/day44_Servlet_war_exploded/login2)

      服务器解析路径项的uri
             /day44_Servlet_war_exploded/login
                                         在web.xml解析寻找当前"/login",找到了

3)获取它url-pattern---对应的servlet-name :  默认定义Servlet的类名
   3.1)从映射配置----找到servlet基本配置 ---servlet-name: 两个名称一致
   3.2)servlet-name---->servlet-class---->获取类的全限定名称

4)反射获取当前类的字节码文件对
           Class c = Class.forName("类的全限定名称") ;

5)创建当前类实例 
          Object obj = c.newInstance() ;
6)调用当前类的方法
Method m =c.getDeclaredMethod("doGet",HttpServletRequest.class,HttpServletResponse.class) ;
    //取消Java语言访问检查
m.setAccessiable(true);
m.invoke(obj,request,response) ;
7)响应给浏览器一些内容---
response.getWiter().write("xxx") ;


3. servlet的生命周期

servlet是单例的
//自己提供了无参构造方法

int(ServletConfig config) : 初始化方法
service(请求对象, 响应对象) : 服务方法
destroy( ) : 销毁

构造方法和初始化都只执行一次
service(请求对象, 响应对象): 服务方法; 可以被执行多洗, 程序入口 
                 doXXX( )视具体的服务方法; 实际开发中, 覆盖具体的doXXX( ) , 
                 针对前端不同提交方式, 执行不同的doXXX( )


单例设计模式: 
                饿汉式和懒汉式 
                饿汉式是不会出现问题的单例 
                          类一加载就立即创建当前类对象 
                
                懒汉式是可能多线程安全问题的一种单例模式(场景:懒加载场景 mybatis框架) 
                           类一加载:不会立即创建对象, 而是去判断, 如果为null,才去new

  • 单例设计模式是创建型设计模式的一种

  • 单例设计模式思想:在内存中始终创建一个对象

  • 有两种模式

  • 饿汉式: 不会出现安全问题的一种单例模式
    ---类一加载,就立即创建当前类实例!

  • 1)当前类的无参构造方法私有化

  • 2)在类的成员位置,创建一个当前类的实例(实例变量),私有的

  • 3)对外提供静态的公共访问方法,返回值是当前类本身

  • Java提供了Runtime---标准的单例模式之饿汉式

  • 通过 Java应用程序获取计算机相关环境的信息

public class Student {
   //在类的成员位置,创建一个当前类的实例(实例变量),私有的
  private static Student s = new Student() ;

   //无参构造方法私有化
   private Student(){}

   //对外提供静态的公共访问方法,返回值是当前类本身
   public static Student getStudent(){
       return s ;
   }
   

  • 懒汉式: 可能出现安全问题的单例模式
  • 延迟加载场景或者懒加载场景,就会导致出现问题----结合多线程场景
  • 如何解决线程安全问题--------->synchronzied(锁对象){}---->或者同步方法
  • 1)无参构造方法私有化
  • 2)在当前类的成员位置提供一个私有的静态的 当前类型的变量
  • 3)对外还有提供公共的静态方法,返回值是当前类本身
  • 需要判断:如果当前 对象名是null,然后在去new 创建
public class Teacher {
    private static Teacher t ;

    private Teacher(){} //外界类不能new了
   
    public synchronized static Teacher getTeacher(){ //静态的同步方法

            if(t==null){
                t = new Teacher() ;
            }

        return t;
    }
}

4. servlet如何接受前端提交的参数

注意事项: 
     1)表单提交, 表单项必须写name属性; 给系统后端标记: 书写的什么内容
     2)接收参数
            HttpServletRequest
              String getParamenter(String name) :  //参数为表单中的name属性
                              
                 
      //通过参数名称或者参数值
      numeration<String> getParameterNames() :  //获取表单中所有的参数名称
      Map<K,V> getParameterMap( ) : //通过请求对象获取所有的键和值 
                                      //(name属性值以及对应输入的内容)
     

5. 如何让servlet在web容器启动时就创建对象

servlet默认访问的时候创建对象!

web.xml 中配置servlet的时候, 可以servlet基本配置

<load-on-startup><servlet> 
          <servlet-name>MyLifeServlet</servlet-name> 
          <servlet-class>com.qf.servlet_life_02.MyLifeServlet</servlet-class> 
          
   <!--
        配置servlet初始化时机 tomcat服务器启动的时候,就立即创建当前servlet对象
        --> 

        <load-on-startup>1</load-on-startup> 
        </servlet> 
        <servlet-mapping> 
        <servlet-name>MyLifeServlet</servlet-name> 

        <!--路径必须唯一 精确匹配 --> 
        <url-pattern>/life</url-pattern>
        </servlet-mapping>



9.21

1.请求转发的特点以及代码实现

1) 地址栏没有变化, 始终访问后端地址
2) 请求转发的整个过程request对象是一致的, 某个jsp页面需要后端传递的数据, 就需要使用请求转发
3)可以访问WEB-INF下的资源文件

请求转发的原理及注意事项

/**
 * ServletContext的作用3(重点)
 *  请求转发:后端能够控制的一种页面跳转(可以在不同的servlet之间进行跳转)
 */
   request.getRequestDispatcher("/WEB-INF/adv.jsp").forward(request,response);

2. 获取前端表单提交的参数方式是什么(补充)


String 实际内容= request.getParameter(表单中的name属性值) ;
Enumeration<String> en = request.getParameterNames( );  
                                 //获取所有表单中的name 属性值(参数名称)

while(en.hasMoreElements()){ 

                String paramenterName = en.nextElement() ; 
                String 实际内容 = request.getParameter(表单中的name属性值) ; 
} 

Map <String, String[ ]>map = request.getParameterMap( ) ;


3. 四个域对象从小到大分别是什么

四个域对象: 从小到大的单位
PageContext    -----page域, 在某个jsp页面中有效
HttpServletRequest    ----request域, 在一次请求中有效   (使用最频繁) 请求对象
HttpSession   -----Session域, 在一次会话中有效  (用户登录)      将数据存储在服务器端
ServletContext    -----application域, 全局对象, 在整个web application有效

4. jsp的核心标签库的使用步骤(JSTL)

  即 JSP 标标签库, 使用里面核心库
  
  <1>需要导入两个包     jtsl 1.1.2.jar
                              standard 1.1.2.jar 
  <2>引入jsp第三个指令  ----taglib指令
         
         <%@taglib prefix = "c"  uri = "http://sun公司/jsp/jstl/core" %>
         
         prefix = "前缀名称"
         uri : c 标签的网络地址
   <3> 使用c标签      
    el    -----${ == 或者是运算符 }
   ①<c: if> 判断
     格式
           <c : if test= "${ }">   ------>相当于Java中的if语句, 如果成立, 则成立于具体
           </ c : if>
           
           el 表达式, 有关键字empty 
           
           ${empty 域对象属性名称 }
           
      ② <c: choose>   
       格式   
          <c: choose>
          
          <c: when test= ""{number==1}>
          <h1>周一</h1>
          </c:when>
          .....
          </c: choose>
           
       ③<c: forEach>  ------>遍历    
       
       <c: forEach item = "获取的数据">
       
                item属性: 从后端集合数据包 ${ 域对象中存储属性名称 }
                var属性: 循环中的变量名
                varstatus  : 内置的循环中变量名的状态属性
 

5. MVC三层架构思想

MVC 是一种架构思想, 代码分层的思想

M: model 业务模型 
      最基本的业务模型: Java实体类, 给里面的数据封装数据 ---- pojo
      
com.qf.pojo    ---->实体类; 最基本的业务模型
com.qf.service    ----> 业务代码, 业务接口以及业务接口实现; 完成业务逻辑; 获取数据
com.qf.dao    ---->数据库访问层(持久层) ; 接口以及jdbc实现; 完成对数据库的crud(增删查改)
com.qf.controller    ----->控制器代码 ----写servlet 后端, java服务连接器
com.qf.utils/common    ---->通用的控制器

V : view 视图
              目前技术jsp ---- 展示数据 ----通过jsp的jstl标签库展示数据
              通过jsp或者html渲染一种视图效果(在jsp的el表达式里面获取数据)
             
             html ----- > 结合jquery+ajax完成
             网页静态化技术 freemaker -----${ }
             thyemleaf ----${ } ----在springboot
             
             jsp, thyemleaf, freemaker ---- 模板引擎
 
C : controller 控制器
           servlet: 编写的服务端程序 ---->控制视图
           前端访问后端的连接器(中间层) ---- servlet 
      

(图解)

9.22

1. 重定向的原理


        //1)响应对象HttpServletResponse---有一个方法
        //void setHeader(String var1, String var2):设置响应头

       response.setHeader("location",request.getContextPath()+"/adv.jsp");
        //2) 设置响应状态码 302
        //void setStatus(int var1);

        response.setStatus(302) ;
        request.setAttribute("name","高圆圆");  //requrest域存储数据,重定向过去获取不到

    //简写格式HttpResponse对象--->void sendRedirect(String var1) throws IOException; 重定向'
        
       response.sendRedirect(request.getContextPath()+"/xxx.jsp或者xxx.html") ;


2. 请求转发和重定向的区别

1)地址栏是否有变化
请求转发: 没有变化
重定向 : 地址栏有明显变化

2) 是否能够访问WEB-INF下的资源文件
只有请求转发可以访问
重定向: 不能访问

3) 整个过程request对象是否一致
请求转发 : 是一致的 , 所以使用request域存储数据, jsp页面获取数据
重定向 : request对象不一致, request域中存储数据, jsp页面获取不到数据, 仅仅页面跳转


3. 四个域对象分别是什么

pageContext ;    page域, 在当前jsp页面中有效
HttpServletRequest ;    request域, 在一次请求中有效
HttpSession ;    session域, 在一次会话中有效
ServletContext ;     application, 在整个web application 域中有效


9.23

1. 什么是maven

Maven : POM project Object Model 项目对象模型
      核心思想   
           通过一小段描述信息jar文件  一种索引(坐标地址)>来管理项目的构件, 报告文档, ...
     

maven工作原理

 

2. 获取一个类的字节码文件对象的方式

三种
          任意Java对象                      getClass() 方法
          任意Java类型的class属性:           类名.class
          Class.forName("类的全限定名称")
    

3. Servlet的注解方式替代xml配置方式的书写格式

    <!--项目地址工程名称标识-->
    <groupId>com.qf</groupId>
    <artifactId>Maven_Project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--项目打包成war包-->
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <!--添加依赖jar包-->
    <dependencies><!-- 通过这段信息:本地仓库的jar依赖了-->
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
        </dependency>

    </dependencies>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于心脏病预测的问题,使用循环神经网络(RNN)是一种常见的方法。RNN适用于处理序列数据,而心电图信号就是一种序列数据。在使用RNN进行心脏病预测时,你可以将心电图信号作为输入序列,然后通过训练RNN模型来预测患者是否患有心脏病。 首先,你需要准备一个合适的数据集,其中包含心电图信号和相应的心脏病标签。可以使用公开的心电图数据集,如PTB数据库或MIT-BIH数据库。然后,你可以对数据进行预处理和特征工程,如数据清洗、滤波、降采样等。 接下来,你可以构建一个RNN模型。RNN模型由一系列循环层组成,每个循环层都会处理一个时间步的输入数据。你可以选择不同类型的RNN单元,如简单循环单元(SimpleRNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)。通过添加适当的全连接层和激活函数,你可以将RNN模型输出映射到二分类问题(有或无心脏病)的结果。 然后,你可以使用训练集对RNN模型进行训练,并使用验证集进行模型调优。在训练过程中,你可以使用适当的损失函数(如交叉熵)和优化算法(如随机梯度下降)来最小化模型的预测误差。 最后,你可以使用测试集对训练好的模型进行评估,并计算模型的性能指标,如准确率、精确率、召回率等。这些指标可以帮助你评估模型的预测能力和泛化能力。 需要注意的是,心脏病预测是一个复杂的医学问题,仅仅使用心电图信号可能不能得到准确的预测结果。通常情况下,还需要结合其他患者的临床信息和医学知识来进行综合评估。因此,在进行心脏病预测时,建议与专业医生合作,并遵循相关的医学准则和规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值