在IDEA中创建并运行Web工程

1 篇文章 0 订阅
1 篇文章 0 订阅

Tomcat

1、Tomcat端口被占用的话,是不能启动成功的,就是先启动一个Tomcat,那么这个Tomcat已经占用了8080端口,然后又启动一个Tomcat,会出现闪退现象。如果此时还行再启动一个Tomcat,此时8080端口已经被占用了,那么就要改配置文件。【网络端口默认是80端口】

一、在IDEA中使用Tomcat

在IDEA中配置好Tomcat之后,启动Tomcat,然后在浏览器里面输入http://localhost:8080/webapps/host-manager/index.jsp ,会显示:404,这是因为需要添加一个Web工程,这个Web工程如果还没创建的话,就会显示:404。在IDEA解析时,默认的要访问一个Web工程。

二、在IDEA中动态的创建Web工程

1、创建Web工程

File——>New——>Module

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后点击Next,然后给这个工程起一个名字,例如:first_web,然后点击Finish。

注意:有的软件由于版本问题,创建出来的web工程可能不是完整的,如果创建的web工程下,web目录没有WEB-INF,且该目录下没有classes以及lib,以及web.xml配置文件,需要手动补全。

src目录:是存放java源代码的目录

web目录:是Web工程的根目录

2、补全web.xml配置文件

​ 选中Web项目——File——Project Structure——Modules——选中工程(例如:first_web)——点开这个工程,它下面有一个Web目录——选中这个Web目录——点击右边的“+”——在弹出的对话框的目录里面,将该目录手动补全(web工程下,有web目录,web目录里面有WEB-INF目录,这个WEB-INF目录里面有web.xml文件)——补全之后点击OK——然后点击Apply,再点击OK——此时web目录下就有了WEB-INF目录,以及这个目录里面的web.xml文件

在这里插入图片描述

3、此时WEB-INF还是可能不完全,可能会缺少classes,以及lib目录

​ classes目录:是以后我们写好的java文件编译后class文件的存放目录

​ lib目录:是存放第三方依赖的jar包(比如连接Mysql时,Mysql的驱动,Mysql的驱动都会放到web目录下)

补全的方式:

​ 选中Web项目——File——Project Structure——Modules——选中工程(例如:first_web)——右边出现Sources——选中web目录下的WEB-INF目录——右键,New Floder(创建新的文件夹)——第一个命名为classes,然后点击OK——第二个命名为lib,然后点击OK——最后点击OK——这时会发现WEB-INF目录下出现了classes目录和lib目录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、需要将classes目录设置为class文件保存目录

​ 选中Web项目——File——Project Structure——Modules——选中工程(例如:first_web)——右边出现Paths——选中这个Use module compile output path——Output path与Test output path,这两个编译文件的位置都选刚才创建的classes文件位置——然后点击Apply,最后点击OK

在这里插入图片描述
这个表示Module文件编译输出的位置

在这里插入图片描述

Output path表示正式的,Test output path表示测试的,这两个编译文件的位置都选刚才创建的classes文件位置

在这里插入图片描述

5、将当前创建的Web工程发布到Tomcat上

​ 选中Web项目——File——Project Structure——选择Artifacts——这个里面默认是有的,可以点击“—”先进行移除——再点击“+”——点击Web Application Exploded——再点击From Module(这个就是将项目打成一个包)——选中Web项目(此处以first_web项目为例)——此时会出现一个包(w包)——选择这个包,右边会出现Output Layout——选中这项——点击Apply,再点击OK——在上面选中Tomcat,然后点击Edit Configurations——再选择Deployment(将当前创建的w包发布到Tomcat上)——点击右边的“+”,再点击Artifacts——这时就将刚才创建的w包发布到Tomcat上了,可以在右边写上当前工程的名称,就是如何才能访问到这个项目,此时已first为例,点击Apply,再点击OK——此时就将这个w包(web项目)发布到Tomcat上,然后可以点击运行按钮,启动Tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

默认访问的是web工程下的index.jsp文件,即:

在这里插入图片描述

在这里插入图片描述
当能访问到创建的index.jsp的时候,那么就表示这个Tomcat的发布成功了。

三、第一个Servlet程序

在src文件夹下的com.ServletTest包下创建一个类,起名为MyFirstServlet,这个程序要充当Servlet

我们自己定义的类如果要作为Servlet程序,我们需要实现javax.servlet.Servlet接口(Servlet是一套标准)

配置w包时,旁边的名字,也有可能是项目名,有可能是业务名

1、使创建的类实现Servlet接口,然后重写Servlet接口里面的方法

init():是servlet初始化执行的方法,(这个方法还算是比较常用,有可能会在初始化的时候读取一些信息)

getServletConfig():获取servlet配置信息的方法,(这个方法基本不用)

service():是提供真正服务的方法,对于请求的处理和响应都在service方法中

getServletInfo():获取信息的方法,(这个方法不用)

destroy():销毁servlet的方法,(这个方法自动会调用的)

2、在service()里面写请求
3、在web.xml中注册servlet
  • 为什么要注册servlet?

      因为你不知道你这个servlet处理的是什么样的请求,所以得告诉Tomcat你这个servlet要处理那个请求。
    

    语法:

	   <servlet>
            <!--给servlet起名字-->
            <servlet-name>名称</servlet-name>
            <!--指明这个servlet是哪一个类-->
            <servlet-class>包名.实现Servlet接口的类</servlet-class>
        </servlet>
4、在web.xml中配置映射信息
  • 为什么要配置映射信息?

    因为只是注册servlet还不行,还得配置映射信息,目的是让注册的servlet(比如:m1)来处理某一个请求。就是说servlet不能只是注册,servlet本质上是处理请求并响应请求,起码要告诉这个注册的servlet(比如:m1)处理的是哪一个请求。

 	   <servlet-mapping>
          <!--这个servlet-name就给刚才注册的那个servlet名称(例如:m1)-->
            <servlet-name>之前注册的servlet名称</servlet-name>
          <!--处理的请求-->
          <!--就是说上面这个“包名.实现Servlet接口的类”这个程序处理“/之前注册的servlet名称”这个请求-->
            <url-pattern>/之前注册的servlet名称</url-pattern>
        </servlet-mapping>
5、运行Tomcat

假设此时有一个请求,请求到来后,要在浏览器响应一句话,给页面响应一句Hello World

package ServletTest;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServletTest implements Servlet {
    /*servlet初始化执行的方法
    * (这个方法还算是比较常用,有可能会在初始化的时候读取一些信息)
    * */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    /*获取servlet配置信息的方法
    * (这个方法基本不用)
    * */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*提供真正服务的方法
    * 对于请求的处理和响应都在service方法中
    * */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        /*
        * 假设此时有一个请求,请求到来后,要在浏览器响应一句话
        * servletRequest——代表请求,也就是说ServletRequest servletRequest用来处理请求的
        * ServletResponse servletResponse这个类是用来处理响应的
        * */
        //给页面响应一句Hello World,响应就得通过ServletResponse servletResponse来做
        PrintWriter writer = servletResponse.getWriter();//获取一个打印流
        //获取到打印流后,然后向页面上写“Hello World”
        /*原理:当请求到达这个服务器之后,这个service给提供服务,请求处理完之后打印一个Hello World,
                然后还要注册servlet,在web.xml中注册servlet
         */
        writer.print("Hello World");
    }

    /*获取信息的方法
    * (这个方法不用)
    * */
    @Override
    public String getServletInfo() {
        return null;
    }

    /*销毁servlet的方法
    * (这个方法自动会调用的)
    * */
    @Override
    public void destroy() {

    }
}

<?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">
         <!--注册servlet-->
        <!--为什么要注册servlet?
            因为你不知道你这个servlet处理的是什么样的请求,所以得告诉Tomcat你这个servlet要处理那个请求
            用一对servlet标签来注册
        -->
        <!--这个servlet-name就代表servlet的名称-->
        <servlet>
            <!--给servlet起名字-->
            <servlet-name>m1</servlet-name>
            <!--指明你这个servlet是哪一个类-->
            <!--这样就注册了一个servlet,这个MyServletTest就叫m1-->
            <servlet-class>ServletTest.MyServletTest</servlet-class>
        </servlet>

        <!--只是注册servlet还不行,还得配置映射信息-->
        <!--为什么要配置映射信息?
            目的是让m1这个servlet来处理某一个请求。就是说servlet不能只是注册,servlet本质上是处理请求
            并响应请求,起码要告诉我这个注册的m1这个servlet处理的是哪一个请求
        -->
        <servlet-mapping>
            <!--这个servlet-name就给刚才注册的那个servlet名称(m1)-->
            <servlet-name>m1</servlet-name>
            <!--处理的请求-->
            <!--就是说上面这个ServletTest.MyServletTest这个程序处理/m1这个请求-->
            <!--写好之后运行Tomcat-->
            <url-pattern>/m1</url-pattern>
        </servlet-mapping>
    <!--工程下的m1也是资源,只不过不是静态资源,是动态的资源-->
</web-app>

执行结果:
在这里插入图片描述
浏览器是直译HTML文件的,那么这块可以打印html标签,然后在页面上也可以打印出来

package ServletTest;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServletTest implements Servlet {
    /*servlet初始化执行的方法
    * (这个方法还算是比较常用,有可能会在初始化的时候读取一些信息)
    * */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    /*获取servlet配置信息的方法
    * (这个方法基本不用)
    * */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*提供真正服务的方法
    * 对于请求的处理和响应都在service方法中
    * */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        /*
        * 假设此时有一个请求,请求到来后,要在浏览器响应一句话
        * servletRequest——代表请求,也就是说ServletRequest servletRequest用来处理请求的
        * ServletResponse servletResponse这个类是用来处理响应的
        * */
        //给页面响应一句Hello World,响应就得通过ServletResponse servletResponse来做
        PrintWriter writer = servletResponse.getWriter();//获取一个打印流
        //获取到打印流后,然后向页面上写“Hello World”
        /*原理:当请求到达这个服务器之后,这个service给提供服务,请求处理完之后打印一个Hello World,
                然后还要注册servlet,在web.xml中注册servlet
         */
		//writer.print("Hello World");
		//设置响应的文件类型
        //设置响应的是一个html文件
        servletResponse.setContentType("text/html;charset=utf-8");
        writer.print("<html>");
        writer.print("<body>");
        writer.print("<h3>Hello World</h3>");
        writer.print("</body>");
        writer.print("</html>");

    }

    /*获取信息的方法
    * (这个方法不用)
    * */
    @Override
    public String getServletInfo() {
        return null;
    }

    /*销毁servlet的方法
    * (这个方法自动会调用的)
    * */
    @Override
    public void destroy() {

    }
}

执行结果:

在这里插入图片描述
注意:servletResponse.setContentType(“text/html;charset=utf-8”)表示设置响应的文件类型,设置响应的是一个html文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值