zoukankan      html  css  js  c++  java
  • JavaWeb:笔记(一)

    昨天已经把JavaWeb 课的所有内容都听完了。今天开始补上 MVC 案例之前的 上课的笔记,算一个复习的过程,重新整理一遍自己的知识点,然后再开始写网上书店的案例。

    1、部署并启动 Tomcat 服务器:

    1)、解压 apache-tomcat-6.0.16.zip 到一个非中文的目录下

    2)、配置一个环境变量 java_home(指向 JDK 安装的根目录)或 jre_home

    3)、通过双击 apache-tomcat-6.0.16in 目录下的 startup.bat 来启动服务器。

    4)、可以在浏览器中输入 localhost:8080 来检验 Tomcat 安装是否正确。

    5)、若已经启动了一个 Tomcat 应用,再启动同一个 Tomcat 应用,会抛出异常:java.net.BindException: Address already in use: JVM_Bind:8080 ,因为端口已经被占用了。

    2、Tomact 是一个开源的Servlet 容器。

    3、可以通过修改 servlet.xml 文件中的配置信息来修改 Tomcat 服务器的端口号,在 servlet.xml  文件中下面这个加粗的值改成其他端口号即可:

    <Connector port="8989" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

    4、如何在任意目录下启动 Tomcat 服务器:

    4.1、把 D:apache-tomcat-6.0.16in 添加到环境变量 path 下,添加成功后,若在任意目录下通过 startup 启动 Tomcat 服务器,会有提示:

    The CATALINA_HOME environment variable is not defined correctly
    This environment variable is needed to run this program

    即: 要求设置 CATALINA_HOME 这个环境变量。

    4.2、设置 CATALINA_HOME 这个环境变量:

    通过阅读 startup.bat 批处理文件,可知 CATALINA_HOME 环境变量下有一个 bin 目录,而 bin 目录又有一个 catalina.bat 文件,由此可知 CATALINA_HOME 指向的应该是 Tomcat 安装的根目录。于是把 Tomcat 的根目录设为 CATALINA_HOME  环境变量。此时即可在任意目录下通过 startup.bat、shutdown.bat 来启动、关闭 Tomcat服务器。

    5、继续阅读 startup.bat 文件, 发现启动 Tomcat 服务器的是 catalina.bat 文件,在命令行窗口直接输入 catalina,提示如下:

      commands:
      debug             Start Catalina in a debugger
      debug -security   Debug Catalina with a security manager
      jpda start        Start Catalina under JPDA debugger
      run               Start Catalina in the current window
      run -security     Start in the current window with security manager
      start             Start Catalina in a separate window
      start -security   Start in a separate window with security manager
      stop              Stop Catalina
      version           What version of tomcat are you running?

    catalina 命令有如上的可选参数,

    run:在 catalina 同一个命令行窗口下启动服务器;

    start:开启一个新窗口启动服务器;

    stop:关闭服务器。

    6、第一个 WEB 应用程序:开发,并部署到 Tomcat 服务器下运行

    1)、在 Eclipse 新建一个 Java Project

    2)、在 Java 项目下创建 WEB 开发的目录结构

    -WebContent
      -WEB-INF
        -classes (编译后的 class 文件必须放在该目录下)
        -lib
        -web.xml (从 apache-tomcat-6.0.16webappsdocsWEB-INF 中复制过来,可以不做修改)
      html 页面
      JSP 页面
      图片...

    3)、在 src 下新建 Person 类

    package com.hnust.test;
    
    public class Person {
    
        public String getPersonInfo(){
            return "person info...";
        }
    
    }

    4)、手工的将 Person 类对应的 class 文件(含包)复制到 classes 目录下,可以通过修改默认的输出目录达到自动把编译好的 class 放到 classes 目录下。

    5)、在 WebContent 目录下新建一个 JSP 文件:

    <%@page import="com.atguigu.test.Person"%>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    
    
    <% 
        Person person = new Person();
        System.out.print(person.getPersonInfo()); 
    %>

    6)、把 WebContent 目录复制到 Tomcat 的 webapps 目录下,并改名为:helloworld

    7)、在浏览器的地址栏中输入:http://localhost:8989/helloworld/hello.jsp 即可看到命令行的打印信息

    8)、配置任意目录下的 Web 应用程序:在 conf 目录下一次创建 catalinalocalhost 目录,然后在 localhost 目录下为 test 这个 Web 应用程序建立 test.xml 文件,编辑这个文件输入一下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context
    docBase="E:\Java\Source\hnust\java-1\firstWebApp\WebContent"
    reloadable="true"/>

    7、使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWeb 项目)

    1)、把开发选项切换到 JavaEE 

    2)、可以在 Window -> Show View 中找到 Package Explorer,并把其拖拽到开发区的左边

    3)、在 Service 面板中新建 Tomcat 服务器,一定要关联到 Tomcat 安装的根目录。

    4)、新建一个 Dynamic Web Project,其中 Target Runtime 需选择 Tomcat7.0(按照你自己安装的版本的来)

    5)、开发 Java Web 应用,可以通过 run on server 来运行 WEB 项目。

    8、Servlet 的 Helloworld

    1)、创建一个 Servlet 接口的实现类

    public class HelloServlet implements Servlet

    2)、在 web.xml 文件中配置和映射这个 Servlet

     1     <!-- 配置和映射 Servlet -->
     2     <servlet>
     3         <!-- Servlet 注册的名字 -->
     4         <servlet-name>helloServlet</servlet-name>
     5         <!-- Servlet 的全类名 -->
     6         <servlet-class>com.hnust.javaweb.HelloServlet</servlet-class>
     7     </servlet>
     8     
     9     <servlet-mapping>
    10         <!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
    11         <servlet-name>helloServlet</servlet-name>
    12         <!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
    13         <url-pattern>/hello</url-pattern>
    14     </servlet-mapping>

    9、Servlet 容器:运行 Servlet、JSP、Filter 等的软件环境。

    1)、可以来创建 Servlet,并调用 Servlet 的相关生命周期方法。

    2)、JSP, Filter, Listener, Tag ...

    10、Servlet 生命周期的方法:以下方法都是由 Servlet 容器负责调用。

    1)、构造器:只被调用一次,只有第一次请求 Servlet 时,创建 Servlet 的实例,调用构造器。这说明 Servlet 是单实例的。

    2)、init 方法:只被调用一次,在创建好实例后立即被调用,用于初始胡当前 Servlet。

    3)、service:被多次调用,每次请求都会调用 service 方法,实际用于响应请求的。

    4)、destroy:只被调用一次。在当前 Servlet 所在的 WEB 应用被卸载前调用,用于释放当前 Servlet 所占用的资源。

    11、load-on-startup 参数:

    1)配置在 servlet 节点中:

        <servlet>
            <!-- Servlet 注册的名字 -->
            <servlet-name>secondServlet</servlet-name>
            <!-- Servlet 的全类名 -->
            <servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class>
            <!-- 可以指定 Servlet 被创建的时机 -->
            <load-on-startup>2</load-on-startup>
        </servlet>

    2)、load-on-startup:可以指定 Serlvet 被创建的时机。 若为负数,则在第一次请求时被创建;若为 0 或正数,则在当前 WEB 应用被Serlvet 容器加载时创建实例,且数组越小越早被创建。

    12、关于 serlvet-mapping:

    1)、同一个 Servlet 可以被映射到多个URL上,即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个Servlet 的注册名。

    2)、在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:

    一种格式是“  *.扩展名 ”,另一种格式是以正斜杠(/)开头并以“ /* ”结尾。

    <servlet-mapping>
        <servlet-name>secondServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    或者

    <servlet-mapping>
        <servlet-name>secondServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    注意: 以下的既带 / 又带扩展名的不合法

    <servlet-mapping>
        <servlet-name>secondServlet</servlet-name>
        <url-pattern>/*.action</url-pattern>
    </servlet-mapping>

    13、ServletConfig:封装了 Serlvet 的配置信息,并且可以获取 ServletContext 对象。

    1)、封装了 Serlvet 的配置信息, 并且可以获取 ServletContext 对象

     1     <servlet>
     2         <servlet-name>helloServlet</servlet-name>
     3         <servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>
     4         
     5         <!-- 配置 Serlvet 的初始化参数。 且节点必须在 load-on-startup 节点的前面 -->
     6         <init-param>
     7             <!-- 参数名 -->
     8             <param-name>user</param-name>
     9             <!-- 参数值 -->
    10             <param-value>root</param-value>
    11         </init-param>
    12         
    13         <init-param>
    14             <param-name>password</param-name>
    15             <param-value>1230</param-value>
    16         </init-param>
    17         
    18         <load-on-startup>-1</load-on-startup>
    19         
    20     </servlet>

    2)、获取初始化参数

      > getInitParameter(String name): 获取指定参数名的初始化参数

      > getInitParameterNames(): 获取参数名组成的 Enumeration 对象. 

    1     String user = servletConfig.getInitParameter("user");
    2     System.out.println("user: " + user);
    3     
    4     Enumeration<String> names = servletConfig.getInitParameterNames();
    5     while(names.hasMoreElements()){
    6         String name = names.nextElement();
    7         String value = servletConfig.getInitParameter(name);
    8         System.out.println("^^" + name + ": " + value);
    9     }

    3)获取Servlet 的配置名称(了解)

    14、ServletContext

    1)、可以由 SerlvetConfig 获取:ServletContext servletContext = servletConfig.getServletContext();

    2)、该对象代表当前 WEB 应用:可以认为 SerlvetContext 是当前 WEB 应用的一个大管家,可以从中获取到当前 WEB 应用的各个方面的信息。

    ①、获取当前 WEB 应用的初始化参数:设置初始化参数: 可以为所有的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 可以获取。

    1 <!-- 配置当前 WEB 应用的初始化参数 -->
    2 <context-param>
    3   <param-name>driver</param-name>
    4   <param-value>com.mysql.jdbc.Driver</param-value>
    5 </context-param>

    方法:

    getInitParameter
    getInitParameterNames

    代码:

    ServletContext servletContext = servletConfig.getServletContext();
    
    String driver = servletContext.getInitParameter("driver");
    System.out.println("driver:" + driver);
    
    Enumeration<String> names2 = servletContext.getInitParameterNames();
    while(names2.hasMoreElements()){
      String name = names2.nextElement();
      System.out.println("-->" + name); 
    }

    ②、获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的路径

    getRealPath(String path);

    代码:

      String realPath = servletContext.getRealPath("/note.txt");
      System.out.println(realPath);

    ③、获取当前 WEB 应用的名称:

    getContextPath()

    代码:

      String contextPath = servletContext.getContextPath(); System.out.println(contextPath);  

    ④、获取当前 WEB 应用的某一个文件对应的输入流。

    getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录

    代码:

    InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");

    ⑤、和 attribute 相关的几个方法:(后续)

    over。

     
  • 相关阅读:
    【Java技术系列】爱情36技之暗送秋波的技术
    【Java技术系列】爱情36技之追美妹的技术
    设计模式(五)——建造者模式
    设计模式(四)——一文搞清楚三种工厂模式
    设计模式(三)—— 工厂方法模式
    设计模式(二)—— 简单工厂模式
    设计模式实战——开发中常用到的单例模式
    设计模式(一)—— 单例模式
    设计模式(开篇)—— 设计模式概述
    设计模式系列博客传送门
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6338096.html
Copyright © 2011-2022 走看看