• JavaWEB之Jsp基础知识总结_慕课手记


    理论
    第一章 javaWEB基础
    1、桌面应用程序一般分为两种
    B/S(Browser/Server)客户端浏览器和服务器
    C/S(Client/Server)客户端和服务器端
    2、WEB开发指的是
    开发部署在远程服务器上的应用程序,该应用程序可以用浏览器访问
    WEB应用是基于HTTP(Hyper text transfer protcol ,超文本传输协议)的
    而HTTP又是基于TCP/IP协议。客户端浏览器发送相关请求(request)道远程web服务器,又
    远程服务器效应然后返回请求(response)响应并传输给客户端浏览器
    3、HTTP请求的方法主要有
    请求行(request line)
    请求头(request header)
    请求体 (request body)
    get:直接由浏览器地址发送url(可以包含查询字符串,查询字符串有长度限制(64kb))
    post:把由原来可以通过查询字符串发送到服务器上的数据改为http请求主体部分
    (没有数据大小限制,并且相对来说更安全,适用于提交form表单)
    用的较少的有put和delete
    表单中action表示web服务器端用于接收此表单数据的页面
    method采用哪一种http请求方法

    4、JSP WEB服务器(又叫做WEB容器):用于存储html,jsp,servlet和其他一些web组件

    5、Tomcat目录结构
    bin:用于存放一些Tomcat提供的命令
    conf:Tomcat server的一些默认配置
    logs:用于存放一些日志文件的目录
    webapps:用于存储web应用(WEB应用部署的目录)
    work:web引用的临时目录
    7、如何部署jspWEB应用
    在webapps目录下创建一个文件夹,该文件夹是用于存储jsp页面的,然后再该目录下创建
    jsp页面,并创建WEB-INF目录,然后在WEB-INF目录下创建web.xml应用描述文件
    <welcome-file-list>
    <welcome-file></welcome-file>
    <welcome-file></welcome-file>
    <welcome-file-list>
    然后在conf目录下的server.xml文件中b的<host>标签内添加<context>标签
    <context path="项目名" docBase="项目名" debug="0" reloadable="true">
    </context>
    1)、path表示url访问时所指定的应用名称:
    2)、docBase指明整个应用文件的位置(备注:该位置相对与webapps这么目录)
    3)、debug表示调试等级
    4)、reloadable表示重启tomcat是是否重新加载
    8、如何手动打包一个WAR包,并部署
    创建一个web项目,进入到该目录下,使用java -cvf 项目名.war 生成一个包含有web.xml和WEB-INF目录的war包
    9、jsp的执行过程
    1、browser发送request请求
    2、jsp页面由JSP parser转换成Servlet.java文件
    在_jspService方法由out.write方法输出JSP页面中的内容
    3、由web容器和jdk吧Servlet.java文件编译成.class字节码文件
    4、执行.class字节码文件生成response响应并传输给browser(浏览器)
    第二章 JspServlet
    1、Servlet的优点有
    1、移植性好
    2、功能强大
    3、性能好
    4、可靠安全
    2、Servlet包结构
    javax.Servlet.
    提供了基本的servlet基本库,抽象类和接口
    javax.Servlet.http.扩展和继承了javax.Servlet.中的一些类和接口
    如何插件一个我们自己的servlet:

    public abstract interface Servelt{
    //得到ServletConfig的初始化信息和启动参数
    ServlettConfig getServletConfig();
    //被servlet容器调用,并根据初始化信息来创建一个servlet实例
    void init(ServletConfig servletConfig)throwsException;
    //接收用户请求并返回用户信息
    void service(ServletRequest servletRequest ,ServletResponse servletResponse)
    //返回Servlet相关信息,包括作者,版本,版权等
    String getServletInfo()
    //被Servlet容器调用,当该servlet不用的时候释放掉所占有的所有资源
    void destroy()
    }
    总结:
    1、Servlet接口只定义了servlet和客户端联系的方法并没有具体的实现
    2、Servlet开始接收客户请求前由servlet容器调用init()方法对其初始化并将该实例放到了服务器中
    3、Service()方法被servlet容器调用接受客户的请求处理
    1)、ServletRequest类:包含客户端的请求信息
    2)、ServletResponse类:包含例客户端做出的相应
    该方法会抛出ServletException和IOException两个异常
    4、当Servlet实例长期不用,将被servlet容器通过垃圾处理器回收,并释放其所占的资源
    3、javax.servlet.Servlet接口的派生类
    //该类实现了Servlet接口并实现了部分方法,当创建普通的和HTTP无关的操作是可以通过是可以通过继承该类来创建新的servlet
    javax.servlet.GenericServlet
    该类继承了GenericServlet,并新增了HTTP有关的几种操作
    javax.servlet.http.HttpServlet
    //用来处理Http get请求
    doGet(HttpServletRequest request, HttpServletResponse response);
    //用来处理Http post请求
    doPost(HttpServletRequest request, HttpServletResponse response);
    // 用来处理Http请求的,可以处理get, post,delete
    service(HttpServletRequest request, HttpServletResponse response);
    4、如何创建及配置Servlet
    1、新建Java类,继承javax.Servlet.http.HttpServlet
    2、实现service(HttpServletRequest servletRequest ,HttpServletResponse
    servletResponse)throwservletException,IOException;
    3、进入WEB-INF目录,更新web.xml文件,增加Servlet描述信息,告诉web容器已经创建了一些Servlet
    4、servlet说明:
    <servlet>
    <servlet-name></servlet-name>
    <servlet-class></servlet-class>
    <servlet>
    5、servlet url匹配:
    <servlet-mapping>
    <servlet-name><servlet-name>
    <url-pattern></url-pattern>
    </servlet-mapping>
    5、Servlet生命周期
    1)、在web容器启动时,调用initial(ServletConfig)方法初始化Servlet
    2) 、由响应的Http请求方法或者service()方法处理请求并返回响应
    3)、当servlet使用时,web容器调用destroy()方法销毁servlet
    6、jsp的工作原理是什么?
    答:在一个jsp文件第一次被请求时,jsp引擎把该jsp文件转换成servlet,而servlet则是一个java原文件,如果转换时发现jsp文件有语法错误转换过程将中断
    并向服务端或者客户端发出错误信息否则则转换成功,jsp引擎用javac把该java文件编译成相应的class文件,然后通过构造方法创建一个servlet实例该实例的jspinit方法被执行
    jspinit在整个servlet的生命周期只被执行一次。然后jspService方法被调用来执行客户端浏览器的请求。对于每一个请求jsp引擎都会创建一个新的线程来处理该请求由于servlet
    始终驻留在内存中所以需要是非常快的。如果.jsp文件被修改,服务器根据设置决定是否将该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用, 然后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式如下:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源

    7、三层WEB结构是哪三层?并解释每一层的作用?
    答:分别是:数据层,表示层,业务层
    数据层:用于与数据打交道
    表示层:用户显示的表示层
    业务层,表示层与业务层的桥梁
    三层的好处在于表示明确,扩展性好,逻辑性好,当要加开发成本
    8、在IE地址栏中输入http://localhost:8080/ServletExample/HelloServlet去访问servlet,那么请问该请求会去调用servlet的那个方法?为什么?
    答:首先又客户端ie浏览器发送请求,那么服务器会调用相对的servlet程序去处理请求而servlet先会创建一个实例又实例去然后调用实例的init初始化方法,通过调用service方法去创建线程处理一个个客户端的请求
    9、请描述一下HttpServletReuqest和HttpServletResponse的作用
    HttpServletRequest是专门用于Http协议的ServletRequest的子接口他用于封装HTTP请求同HttpServletResponse一样在servic()方法内部调用HttpServletRequest对象的各种方法请求,来获取请求信息,web客户端发送给web服务器的消息分为请求行,请求消息头,消息正文。
    获取请求行的相关信息有如下一些getMethod方法返回HTTP请求消息中的请求方式。
    getRequestURI方法返回请求行中的资源名部分。
    getQueryString 方法返回请求行中的参数部分。
    getProtocol方法返回请求行中的协议名和版本。
    getContextPath方法返回请求资源所属于的WEB应用程序的路径。
    getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
    getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。
    getServletPath方法返回Servlet的名称或Servlet所映射的路径。
    获取网络连接信息的主要方法有如下一些:
    getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。
    getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。
    getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。
    getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。
    getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
    getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。
    getServerName方法返回当前请求所指向的主机名。
    getServerPort方法返回当前请求所连接的服务器端口号。
    getScheme方法返回请求的协议名,例如http、https或ftp。
    getRequestURL方法返回客户端发出请求时的完整URL。
    至于获取请求头方法基本上就是get加上相应请求头的名字。
    第三章 JSP动作指令
    1、指令标签
    <%@page %> page指令标签:申明当前jsp页面的编码格式,文本类型,编写语言和需要导入的类文件
    import属性为导入相关类文件的权限定名,每个类文件用","号隔开
    errorPage属性指明当页面出现java异常时跳转到某个页面,errorPage="errorPage.jsp";
    session="true/false"表示当前jsp页面是否可以使用Session会话对象
    <%@ include file=""%>
    表示动态的引用一个文件,如果是纯html,则copy到主页面中
    如果其中还包含有java代码,加载到主页中后java代码会被编译
    被包含的页面中不需要出现主页面中已经有的不重复出现的html标签,只需要写放在body标签内的内容

    2、Java程序判断
    <%%>不能在程序片段内定义方法,包含在此标签内部的代码最终会被放在由JSP引擎转换成的Servlet java文件的_JspServlet方法内部
    所以此处不能定义方法,定义的变量为局部变量
    <%!%>变量和方法定义的标签,变量在多个线程间共享,变量和方法只在当前页面有效,最好使用<%%>变量作为Servlet的成员变量,方法为成员方法
    3、如何对变量进行输出
    1)、使用out.write()或者out.print()方法
    2)、使用<%=变量名或方法%>也可以直接对集合类型进行输出,不需要加分号
    4、JSP动作指令
    <jsp:include>表示动态的包含另外的一个文件,并且可以使用<jsp:param>给包含的文件传递参数在被包含的文件中使用request.getParamenter()方法获取传递过来的参数
    <jsp:include>指令每次都动态的加载页面,所以页面有修改,也能及时被重新编译在
    <jsp:forword>指令用于在web容器内部进行Jsp页面的转发,由一个jsp转发到另外一个jsp页面并且可以使用jsp:param指令传递参数给转发到的页面,在转发的页面中通过 request.getParamenter()方法获取传递过来的参数;
    <jsp:plugin>运用运行applet小应用程序,也可以使用jsp:param传递参数
    <jsp:useBean>可以引用Bean对象
    1)、<jsp:uesBean id="" class=""/>id表示Bean对象的名称,在setProperty和getProperty中id用来表示Bean对象
    2)、<jsp:setProperty name="" property="" value=""/>name表示哪个Bean对象,引用uesBean里的id,Property表示bean对象中某个属性的名称,value即为该对对象 指定Property的值
    3)、<jsp:getProperty name="" property=""/>并且setProperty和getProperty可以不在uesBean使用uesBean所产生的对象放在PageContext页面上下文中

    5、请求状态响应
    1)、正常响应status code(状态码):200
    2)、重定向一个页面:302
    3)、内部服务器错误(java代码异常):500 如何处理此错误? 使用page指令的errorPage属性
    4)、请求的资源不存在:404
    6、include指令与include动作比较

        include指令           jsp:include动作

    语法格式 <%@include file=".."%> <jsp:include page="">
    发生作用时间 页面转换期间 请求期间
    包含的内容 文件的实际内容 页面的输出
    转换成的servlet 一个servlet 两个servlet
    编译时间 较慢 较快
    执行时间 稍快 较慢

    第四章 九大内置对象
    session.setMaxInactiveInterval(10); // 用来设置session会话保持的最长时间,以秒为单位
    response.setIntHeader("Refresh", 5); // 每隔5秒刷新本页面
    response.setHeader("Refresh", "10;URL=http://www.baidu.com"); // 10秒后转到指定页面
    out.print("body in bytes: " + request.getContentLength() + "<br />"); // 获取请求体部分的内容的长度,以byte为单位
    out.print("content type: " + request.getContentType() + "<br />"); // 获取请求的内容类型
    out.print("context path: " + request.getContextPath() + "<br />"); // 获取应用的路径信息
    out.print("server ip: " + request.getLocalAddr() + "<br />"); // 服务器端IP
    out.print("client" + request.getRemoteAddr() + "<br />"); // 获取浏览器端IP地址
    out.print("http method: " + request.getMethod() + "<br />"); // 获取请求方法
    out.print("query string: " + request.getQueryString() + "<br />"); // 获取查询字符串
    out.print("request uri: " + request.getRequestURI() + "<br />"); // 获取URI(统一资源标识符)
    out.print("request url: " + request.getRequestURL() + "<br />"); // 获取URL(统一资源定位符)
    out.print("session id: " + request.getRequestedSessionId() + "<br />"); // 返回 客户端对应的session id
    HttpSession sess = request.getSession(); // 由request获取HttpSession会话对象
    out.print("session id:" + sess.getId());
    out.getBufferSize()//缓冲区大小
    out.getRemaining()//缓冲区剩余大小
    out.isAutoFlush() //是否自动清空缓冲区
    1、out隐含对象(输出对象)
    直接用于在JSP页面输出内容
    Javax.servlet.jsp.JspWriter(抽象类)继承制java.io.Writer
    Jsp中的out对象最终被转换成servlet中的jspWriter对象
    2、request隐含对象(请求对象)
    用于获取Http请求相关信息,比如查询字符串,表单数据
    javax.servlet.http.HttpServletRequest
    3、page对象(页面对象)
    表示对应单个JSP页面,servlet中声明如下:
    final java.lang.Object page=this//page表示当前对象
    4、PageContext(页面上下文)
    finaljavax.servlet.jsp.pageContext pageContext;
    页面上下文可以使用setAttribute(String,String)设置当前页面所存储的信息,页面间不共享数据使用getAttribute(String)方法获取在页面上下文中设置的属性
    5、session对象(会话对象)
    会话对象可以保存用户的基本信息,如一个用户登录到一个网站,该网站可以记录此用户的信息,并且用户信息在网站的所有页面间共享会话信息存储在服务器端(数据库,
    文件系统,web容器本身实现的session存储)在A页面中使用session对象的setAttribute(String,String)方法存储数据,在其他页面中直接使用session.getAttribute (String)方法获取数据
    javax.servlet.http.HttpSession session=null;
    对Tomcatweb容器来说,一个会话的持有时间为30分钟(会话超时时间,单位为分钟)
    在conf目录的web.xml
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    6、application对象(应用程序对象)
    整个应用都能使用,不限于某个用户,所有用户都能访问的数据应该放在application对象中同样有setAttribute(String String)和getAttribute(String)方法
    final javax.servlet.ServletContext application
    7、response对象(响应对象)
    response、sendRedirect("url")重定向到某个页面
    8、config对象(Servlet配置信息)
    final javax.servlet.servletConfig config;为jsp页面配置Servlet
    <servlet>
    <servlet-name>configServlet</servlet-name>
    <jsp-file>/config.jsp</jsp-file><!-- 由哪个JSP页面转化成的servlet -->
    <init-param> <!-- servlet初始化参数 -->
    <param-name>configName</param-name>
    <param-value>myValue</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup><!-- 在web容器启动时被初始化 -->
    </servlet>
    <servlet-mapping>
    <servlet-name>configServlet</servlet-name>
    <url-pattern>/config</url-pattern>
    </servlet-mapping>
    在config.jsp页面中由config对象的getInitParameter()获取初始化参数
    9、exception对象(异常对象)
    java.lang.Throwable exception =
    如果想要使用exception对象,则使用该对象的页面(错误处理页)必须在page指令中声明isErrorPage="true"

    10、隐含对象的作用范围
    1、pageScope 只能作用于页面 page ,out,pageContext
    2、reqyestScope 作用于Http请求,到了另外一个页面,request失效 request由页面A转发到页面B,则request同时作用于页面A和页面B
    3、SessionScope session作用域,用于所有页面 session
    4、applicationScope 应用程序作用域,作用于整个应用程序的所用用户的所用页面 application
    11、重定向和转发的区别
    转发:
    web容器内部由一个JAP转发到另外一个JSP页面,客户端地址栏URL不会改变request.getReauestDispatcher("url").forWord(request,response);转发时指定的URL前可以 加 "/"转发中url相当于ContextPath,转发可以用request的setAttribute给目标页面传递参数,目标页面也可以通过request.getAttribute()方法获取传递过来的参数
    重定向:
    实际是告诉浏览器由一个页面跳转到另外的一个页面,客户端浏览器地址栏会发生改变,显示出目标地址HTTP Response status Code:状态码为302response.sendRedirect ("url")重定向中,URL相对于ContextPath来重定向,所以不需要再URL前加"/"。
    12、Cookie
    保存网站信息到客户端浏览器, 这个数据可以轻易地被获取到
    JSP中,通过Cookie对象保存信息,key-value
    通过response.addCookie(Cookie)添加cookie到浏览器端
    通过request.getCookies()方法获取由客户端发送过来的Cookie对象数组,如果没有cookie,则返回 null
    所以服务端需要进行null判断
    1)cookie信息是在浏览器中的,但并不是所有的浏览器都支持cookie功能;
    2)cookie对象不能单独使用,必须和request对象或response对象结合使用;
    3)不同的浏览器中存储的cookie不是通用的。例如:IE存储的cookie只有IE自己使用;
    4)存储在浏览器中的cookie对任何Web服务器都是开放的,所以写入的cookie可能被其它网页读取或覆盖掉

    第五章 JavaBean
    1、什么是JavaBean
    JavaBean是一个普通的Java类,封装了get,set方法,并且可以增加一些通用的逻辑,增加了代码的重用性
    1)、javabean是一个公开的(public)类
    2)、javabean类必须有一个无参的构造方法
    3)、javabean中变量通常称为属性
    4)、取得或设定属性是,必须使用getXXX()和setXXX()方法。(java技术规范)

    复习:
    变量:
    成员变量:
    类变量:在类里面用static关键字修饰的变量,通过类或对象来 访问,通常使用类来访问,实例方法不能访问静态变量
    实例变量:在类里面未用static关键字修饰的变量,只能通过对象来访问
    局部变量:
    在方法里定义的变量,必须进行初始化,只作用于该方法内部,如果方法内部有局部内部类使用方法里的某个变量,则该变量必须声明为final变量
    方法:
    成员方法:
    静态方法
    实例方法
    构造方法:
    2:jsp:uesBean
    uesBean指定的id==>session.setAttribute("user",com.gs.bean.User user);
    所以可以使用removeAttribute方法移除page,request,session,application对应的java Bean组件
    jsp:setProperty jsp:getProperty的自省机制
    表单里的name与setProperty和getProperty所指定的bean对象的属性名称一致
    在使用setProperty的时候,可以使用*号匹配所有的属性
    找到eclipse内置的tomcat的目录

    第六章 数据源和连接池
    1、JNDI java Naming and Directory Interface(JAVA命名和目录服务接口)
    通过一个指定的字符串就能找到指定的资源JNDI规范通常提供一个lookup方法通过资源字符串查找所指定的资源
    2、DataSource 通过一定的配置信息告诉WEB容器,应用连接到哪一个数据源
    3、配置数据源和数据连接池
    1)、在tomcat的conf目录下的context.xml文件中添加资源描述标记
    <Resource name="jndi/datasource" 数据连接池资源的名称
    auth="Container"认证类型,由容器提供认证
    type="javax.sql.DataSource"表示此资源的类型是什么,javax.sql.Datasource表示为jdbc的数据源类型
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"
    username="user_name"
    password="user_password"
    maxTotal="20"最大连接数
    maxIdle="5"最大空闲连接数
    maxWaitMillis="10000"最大等待时间
    />
    备注:对于tomcat的来说版本有差异,可以参考<ResourceParams>标记信息
    对于6.0及以上的tomcat,只需要使用<Resource>标记,把相关的参数配置直接放在该标记的属性部分
    对于5.0 6.0 7.0 来说最大连接数是maxActive,最大等待时间是maxWillis
    2)、在应用的web.xml文件中声明引用了哪个资源
    <resource-ref>
    <description>JNDI JDBC DataSource</description>
    <res-ref-name>jndi/datasource<res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <resource-ref>
    3)、使用Context去获取配置的jndi资源
    javax.naming.Context context = new javax.naming.InitialContext();
    Object obj =context.lookup("javax:comp/env/jndi/datasource");
    javax.sql.DataSource ds=(javax.sql.DataSource)obj;
    javax.sql.Connection conn=ds.getConnection();
    4、数据库连接池对数据库相关对象的关闭操作
    rs.close(); conn.close();
    以上的关闭操作,是交由Tomcat容器来做的,conn.close并没有真正的把建立好的数据库连接关闭,而是把此数据库连接放回到数

    第七章 过滤器和监听器
    1、什么是过滤器?
    过滤器是在某个URL之前所需要做的事情,URL可能是某个servlet所对应的,也有可能是jsp页面
    特点:
    声明式的 动态的 灵活的 模块化的 可移植的 可重用的 透明的
    用处:
    统一认证处理
    对用户的请求做检查,做更精确的记录
    监听或对用户所传递的参数做前置处理,如防止数据隐藏码攻击
    改变图像文件的格式
    对响应做编码的动作
    对响应做压缩处理
    对呀XML的输出使用xslt来转换
    2、过滤器的写法
    1)、自定义类,实现javax.servlet.Filter接口
    2)、分别实现init(FilterConfig)doFilter(ServletRequest ,ServletResponse,FilterChain) destroy()
    3)、在web.xml中配置该filter 告诉web容器存在这么一个filter,可以使用<init-param>配置filter的初始化参数,在Filter代码中 用FilterConfigd对象来获取初始化参数
    <filter>
    <filter-name></filter-name>
    <filter-class></filter-class>
    </filter>
    告诉web容器此filter对那个URL进行过滤
    <fliter-mapping>
    <filter-name></filter-name>
    <serlvet-name></servlet-name>
    <url-pattern></url-pattern>
    <filter-mapping>
    3、Filter的-生命周期
    *1)、init(FilterConfig)在tomcat容器启动时就会对过滤器进行初始化
    2)、在执行其过滤的url时,先初始化该URL所对应的servlet

    据库连接池
    备注:如果想让eclipse直接使用数据连接池的方式运行应用,则把context.xml文件copy到WebContent目录下的META-INF目录





  • 相关阅读:
    红旗桌面版本最新行使方法和效果解答100例4
    红旗桌面版本最新运用行为和标题问题解答100例3
    红旗桌面版本最新运用方式和成效解答100例2
    Linux下Resin JSP MySQL的部署和设置配备铺排2
    在Linux下Turbomail简易快捷的装置体式格局
    企业级Linux红旗桌面版可以可能登岸日本
    从红旗5.0说起——看Linux的内存管理
    红旗Linux桌面4.1文本布置过程图解(一)
    Linux下Resin JSP MySQL的装置和设置装备安排1
    Ubuntu 8.04中竖立Apache PHP MySQL基本环境
  • 原文地址:https://www.cnblogs.com/Jxiaobai/p/6622169.html
Copyright © 2020-2023  润新知