Live2D
复制代码

03-实现web项目

1、不使用IDE实现一个webapp

第一步:

在某个文件夹中新建一个名为FirstApp的文件夹,该文件就是一个项目,名字叫FirstApp

第二步

打开FirstApp,在里面新建一个名为login的html文件login.html,并在里面编写简单的静态页面代码

<html>
    <head>
        <title>login page</title>
    </head>
    <body>
        <form action="">
                username<input type="text" name="username"/><br>
                password<input type="password" name="password"/><br>
                <input type="submit" value="login">
        </form>
    </body>
</html>
第三步

开发完程序后部署到服务器上,这里是Tomcat服务器,直接将FirstApp文件复制粘贴到Tomcat所在文件夹的webapps文件夹中,这就算部署完成了。

第四步

启动Tomcat服务器,在浏览器输入http://localhost:8080/FirstApp/login.html,回车

第五步

我们在FirstApp文件中新建一个html的文件夹,打开后在里面新建一个welcom.html文件

<html>
    <head>
            <title>welcome page</title>
    </head>
    <body>
        <h1 align="center"><font color="red">welcome page</font> </h1>
    </body>
</html>
第六步

需要重新部署该FirstApp项目,先关闭Tomcat服务器,因为Tomcat中关闭的命令shutdown和Windows关闭系统命令冲突,我们将Tomcat的bin文件目录中的shutdown.bat改为stop.bat。此时在dos命令窗口键入stop,回车,关闭服务器。然后删除原先部署的FirstApp,之后的步骤与上一致。启动服务器,浏览器,输入http://localhost:8080/FirstApp/html/welcome.html,可以看到返回一个欢迎页

第七步

我们想在获取的welcome.html页面中添加一个点击按钮名为login page,点击它跳转到login.html资源页面。可以在welcome.html的代码中添加超链接的方式,如下

<html>
    <head>
            <title>welcome page</title>
    </head>
    <body>
        <h1 align="center"><font color="red">welcome page</font> </h1>
        <hr>

        <!--超链接的方式-->
        <a href = "http://localhost:8080/FirstApp/login.html">login page</a>

         <!--为了更好的通用,URL路径中的IP地址、端口号可以省略,但前面的/不能省-->
        <!--以下网络资源路径还是一个绝对路径,目前必须以/开始,不加/就是一个相对路径,就会跳转到当前webapp项目的/FirstApp/login.html这个资源,导致404。这和Linux中学的绝对路径和相对路径是一样的-->
        <a href = "/FirstApp/login.html">login page</a>
    </body>
</html>
第八步

关闭服务器,覆盖webapps中的FirstApp,启动服务器,浏览器输入请求路径,如下:

2、实现带有servlet的webapp

第一步

创建一个名为FirstServletWebApp的项目文件夹,该文件夹里有多个文件夹,有存放css资源的css文件夹,有存放html资源文件的html文件夹,也有存放JavaScript文件的js文件夹等等,但为了遵循Servlet规范,必须创建一个名为WEB-INF的文件夹,不能改变大小写,不然服务器不能辨识。

WEB-INF文件夹中要建一个classes文件夹,存放该项目的.class字节码文件;建一个lib文件夹,libraries,存放的是项目所需的jar包,就像Tomcat中的lib一样,Tomcat中的是全局的jar包,本项目的是局部的jar包,虽然我们将数据库的驱动jar包放进了系统的calsspath变量中,但当我们这个项目需要连接数据库,服务器是不会到系统中找数据库连接的jar包的,而是到你这个项目的lib中寻找;建一个web.xml文件,存放的是请求路径和资源的关联信息。

第二步

建一个HelloWorld.java文件,该类实现Servlet接口,得实现该接口的所有方法,具体有什么方法,查阅javaEE版本的帮助文档。一共有五个方法

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;

public class HelloWorld implements Servlet{

    public void init(ServletConfig config) throws ServletException{

    }

    public void service(ServletRequest request,ServletResponse response) throws IOException,ServletException{

        //将信息打印到控制台,而不是输出到浏览器
        System.out.println("Hello World!");

    }

    public void destroy(){

    }

    //本次的项目程序不多,这里的方法用到的不多,直接返回null
    public String getServletInfo(){
        return  null;
    }

    //本次的项目程序不多,这里的方法用到的不多,直接返回null
    public ServletConfig getServletConfig(){
        return null;
    }

}

写好保存。现在想要编译,在dos命令窗口javac HelloWorld.java是编译不成功的,因为找不到代码中导入的javax.servlet包下的接口和类,之前我们在Tomcat的lib类库文件夹中发现有jsp和servlet规范的jar包,这是SUN公司写的,Tomcat服务器想要调用我们写的实现Servlet规范的Java Web程序,就得需要面向这两个规范调用,所需要把这两个SUN公司写的规范jar包放到Tomcat的类库lib中。这里我们也需要servlet jar包,直接将Tomcat中lib中的servlet-api.jar中的路径添加到环境变量classpath中。这样只是为了我们编译用的,运行是服务器中找它自己lib类库中的规范包

在编译过程中,由于java文件写完后是已UTF-8的字符编码方式保存,dos命令窗口是GBK简体中文,编译报错,所以将.java文件用记事本打开,然后另存为时选择简体中文字符编码方式ANSI保存,就可以正常编译了

第三步

编译完成后将生成的HelloWorld.class文件放进FirstServletWebApp/WEB-INF/classes中,

第四步

编写web.xml配置文件。怎么样编写,可以参考Tomcat中conf文件夹中的web.xml文件,将其打开,将头部复制过来,注释不用复制。要注意标签的头和尾<web-app ...后面这里得与前面对应

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">
    
    <!--这是一个合法的web.xml文件-->
    <!--一个webapp只有一个web.xml文件-->
    <!--web.xml文件主要配置请求路径和实现Servlet的类名之间的绑定关系-->
    <!--web.xml文件在Tomcat服务器启动阶段被解析-->
    <!--web.xml文件解析失败,就会导致服务器启动失败-->
    <!--web.xml文件的标签不能随便编写,Tomcat服务器早就知道该文件中需要编写的标签,该标签也是SUN制定的规范-->
    <!--直接记住下面的个标签写法和含义-->
    <servlet>
        <!--下面这个servlet-name标签位置的名字随便起,但要与下面同一个标签名一致-->
    	<servlet-name>thisIsServletName</servlet-name>
        <!--下面这个servlet-class标签位置写的是项目中的类名-->
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--下面这个servlet-name标签位置的名字随便起,但要与上面同一个标签名一致-->
        <servlet-name>thisIsServletName</servlet-name>
        <!--下面这个url-pattern标签位置写的是请求路径,随意编写,但要以/开头,不用添加项目的名称-->
        <!--该请求路径是虚拟的路径,只是代表一个资源的名称,就是上面类的代号-->
        <url-pattern>/zzz/dada/sss/aaa</url-pattern>
        <!--url-pattern标签还可以编写多个,但都得以/开头且不需要添加项目名-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
第五步

写完后保存,开始部署项目,然后测试,输入网址http://localhost:8080/FirstServletWebApp/zzz/dada/sss/aaa

我们可以看到每一次刷新该网址Tomcat服务器的黑窗口都输出"Hello World!"

因为我们在service方法中写的是输出到控制台,所以浏览器没有输出,下个项目输出到浏览器。

第六步

我们在该项目中的html目录中新建一个welcome.html文件,在里面编写超链接代码,里面跳转的连接请求路径不像上面的url-pattern标签不需要写项目名,这个超链接是需要加项目名的,虽然这个html是在同一个项目中,但是其他项目中的html文件打开后点击里面的连接如何跳转到其他项目的资源呢,这就导致超链接里面的请求路径要加上项目的名字

<html>
    <head>
        welcome page
    </head>
    <body>
        <a href="/FirstServletWebApp/hello">HelloWorldServlet</a>
    </body>
</html>

保存重新部署,重启服务器,输入请问求路径,结果如下

点击HelloWorldServlet,跳转到另一个资源,Tomcat黑窗口输出hello world!

3、将响应结果进行输出的webapp

跟前面一样,建一个项目文件夹ServletPrintToClient,打开在其中建WEB-INF,再打开建classes、lib两个文件目录加一个web.xml文件

任意新建PrintToClient.java

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.IO.PrintWriter;//标准字符输出流

public class PrintToClientt implements Servlet{

    public void init(ServletConfig config) throws ServletException{

    }

    //五个方法中重点是该方法
    public void service(ServletRequest request,ServletResponse response) throws IOException,ServletException{
        
        //有时候响应到浏览器的内容中文会出现乱码,那么用响应对象设置编码方式
        /*
        	ServletResponse接口有这样一个方法:
        	void setContentType(String type)
          Sets the content type of the response being sent to the client, if the response has not been committed yet.
          该方法设置内容类型和字符编码方式,不能写错,且要在获取标准流之前设置
        */
        response.setContentType("text/html;charset=UTF-8");
        
        //想将信息输出到浏览器,就需要使用标准输出流将程序的输出位置更改
        /*
        	ServletResponse接口有这样一个方法:
        PrintWriter	getWriter()
          Returns a PrintWriter object that can send character text to the client.
          该方法返回一个将信息输出到客户端的PrintWriter类的标准字符输出流对象
        */
        PrintWriter out = response.getWriter();
        //将HTML字符串输出到浏览器上,Browser解释执行HTML语言
        //这里响应HTML代码到浏览器
        //下面不需要用println()方法,没有必要,用的话只是将HTML字符串换行输出到浏览器,浏览器看源码
        //的时候HTML源代码是换行的,这样还会占内存,影响效率。
        //但是你想要将里面夹带的文字什么的信息换行,有其他方法
         out.print("<html>");
         out.print("<head>");
         out.print("<title>welcome servlet</title>");
        //具体信息,h1标记
         out.print("<h1 align=\"center\">welcome study servlet</h1>");//该标题下一信息是自动换行的
        //该输出信息与标题不在同一行
         out.print("hello");
         out.print("world");
        //换行添加的标签<br>
         out.print("<br>");
         out.print("大家好!");
         out.print("</head>");
         out.print("</html>");

    }

    public void destroy(){

    }

    //本次的项目程序不复杂,这里的方法用到的不多,直接返回null
    public String getServletInfo(){
        return  null;
    }

    //本次的项目程序不复杂,这里的方法用到的不多,直接返回null
    public ServletConfig getServletConfig(){
        return null;
    }

}

写好编译,将.class文件放进classes目录中

编写web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">
    
    <!--这是一个合法的web.xml文件-->
    <!--一个webapp只有一个web.xml文件-->
    <!--web.xml文件主要配置请求路径和实现Servlet的类名之间的绑定关系-->
    <!--web.xml文件在Tomcat服务器启动阶段被解析-->
    <!--web.xml文件解析失败,就会导致服务器启动失败-->
    <!--web.xml文件的标签不能随便编写,Tomcat服务器早就知道该文件中需要编写的标签,该标签也是SUN制定的规范-->
    <!--直接记住下面的个标签写法和含义-->
    <servlet>
        <!--下面这个servlet-name标签位置的名字随便起,但要与下面同一个标签名一致-->
    	<servlet-name>helloServlet</servlet-name>
        <!--下面这个servlet-class标签位置写的是项目中的类名-->
        <servlet-class>PrintToClient</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--下面这个servlet-name标签位置的名字随便起,但要与上面同一个标签名一致-->
        <servlet-name>helloServlet</servlet-name>
        <!--下面这个url-pattern标签位置写的是请求路径,随意编写,但要以/开头,不用添加项目的名称-->
        <!--该请求路径是虚拟的路径,只是代表一个资源的名称,就是上面类的代号-->
        <url-pattern>/zzw</url-pattern>
		<!--url-pattern标签还可以编写多个,但都得以/开头且不需要添加项目名-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

保存,然后部署项目,启动Tomcat服务器,浏览器输入http://localhost:8080/ServletPrintToClient/zzw

posted @ 2021-08-04 22:52  Milen-jie  阅读(116)  评论(0编辑  收藏  举报