Live2D
复制代码

04-idea实现web项目

1、idea的web项目

第一步

正常新建一个java项目,该项目在idea中的名字叫idea-servletweb-01,编写的代码存放在这个路径下F:\Git_Repositories\J2EE-servelet\projects,该路径下有着之前没用集成开发工具写的三个项目

第二步

在工程上点击鼠标右键,选择添加框架支持Add Framework Support,

然后选择JavaEE的版本,具体选什么更具自己安装的Tomcat的版本选择,具体选择如下图

javaEE8的子规范是Servlet4.0,我们所安装的Tomcat9实现了Servlet4.0,JDK是1.8,所以选择javaEE8,然后勾选WebApplication,默认创建web.xml。点击OK。

这样就该项目就是一个web项目了。可以看到左边新生成了一个web,打开里面可以看到里面帮我们建好了WEB-INF文件夹,以及该目录下的一个web.xml文件。我们自己可以在web目录下新建目录如css、html和js,但这不是必须的。但是在WEB-INF目录下必须要建classes和lib目录,具体要不要手动创建,还是以后idea会自动生成还不确定,这里手动新建。

第三步

配置项目的Tomcat服务器。选择Run->Edit Configuration->左上角加号->Tomcat Server->Local

点开后,找到右边的Configure,选择自己Tomcat的路径

可以看到上面Tomcat Home跟我们之前配CATALINA_HOME一样,路径是找到Tomcat中的bin的上级目录就是Tomcat的家,Name那里可以自己命名,Tomcat 9。选好号点击OK。

该界面中可以设置项目调试的浏览器,不用管,以及端口号的设置。

第四步

回到Edit Configurations,选择第二个选项Deployment(部署),选中项目

我们可以修改部署到Tomcat服务器中该项目的名字,可以看到Application context中默认是/idea_servletweb_01_war_exploded,我们可以修改为taobao,这就是该项目部署到Tomcat里webapps中的项目的名字,到时候浏览器中请求路径中的项目名就是taobao,而不是我们之前创建项目时的Project Name:idea-servletweb-01,这个名字只是在本项目在idea中的项目名。

示例:

我们先在html目录下新建一个welcome.html,在里面写一个超链接,连接到该项目的一个Servlet实现类,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>welcome page</title>
</head>
<body>
    <a href="/taobao/hello">hello</a>
</body>
</html>

然后点开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">

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.javaweb.servletstudy.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

复制其中的包名,在src下创建包

发现创建的包是如此显示

点击上面的小齿轮,将Flatten Packages和Compact Middle Packages的勾去掉

复制类名,新建一个Servlet实现类HelloServlet

package javaweb.servletstudy;

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

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        servletResponse.setContentType("text/html;charset=UTF-8");
        PrintWriter out = servletResponse.getWriter();
        out.print("<html>");
        out.print("<head>");
        out.print("<title>hello servlet</title>");
        out.print("<body>");
        out.print("我正在学习中.....");
        out.print("</body>");
        out.print("</head>");
        out.print("</html>");

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
还有一点需要注意,idea工具不提供JavaEE Libraries全套规范,我们要实现Servlet接口,需要导入Tomcat的lib目录中的servlet-api包。先点击右上角的文件图标,Project Structure。然后点击Libraries,点击加号,点击java,找到要导入的包,选中要加到哪个项目模块,点击OK,点击Apply应用,点击OK。完成

编写号代码后,在右上角选择Tomcat 9,然后运行

运行后就会调用之前设置的浏览器和默认的请求http://localhost:8080/taobao/

然后输入http://localhost:8080/taobao/html/welcome.html

点击hello,调转

我们可以看到Tomcat服务器启动的一些乱码问题,之后会解决

2、web项目连接数据库

1、首先创建普通的java项目,Project Name命名为idea-servletweb-02,保存在F:\Git_Repositories\J2EE-servelet\servletstudyproject下

2、点击工程名字,右键选择添加框架支持Add Framework Support,选择JavaEE8,选择WebApplication,应用Apply,OK。

3、在新生成的web中选择WEB-INF,打开web.xml文件,编写请求与资源的绑定,此次绑定一个类,命名为servlet jdbc query,完整的类名为com.servletstudy.jdbc.ListServletEmp,请求虚拟路径/query,保存

4、根据web.xml文件中的信息,建包com.servletstudy.jdbc,建ListServletEmp类,实现Servlet规范。

5、配置Tomcat服务器。Run->Edit Configurations->左边点击+号->选择Tomcat->Local->在Application server选项点击Configure->Tomcat Home中选择下载的Tomcat,选择到lib目录的上一级,点击ok。然后点击部署选项Deployment,选择要部署到服务器的项目,没有选择就右边+号点击第一个。注意选择的项目是这样的(项目名:war exploded),而不是单单一个项目名,下面Application context中修改部署到服务器中的程序名为/JDBCQuery

6、添加Servlet规范jar包。File->Project Structure->Libraries->点击+号->java->从Tomcat的lib中选择servlet-api.jar->Apply->ok。重复一遍添加MySQL驱动。

7、编写一个数据库连接工具类JDBCUtil,方便连接数据库。

8、把查询结果按照下面的HTML输出到浏览器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta charset="UTF-8">
    <title>员工信息</title>
</head>
<body>
    <h3 align="center">员工列表</h3>
    <hr width="60%">
    <table border="1" align="center" width="50%">
        <tr align="center">
            <th>序号</th>
            <th>员工编号</th>
            <th>员工姓名</th>
            <th>员工薪资</th>
        </tr>
        <tr align="center">
            <td>1</td>
            <td>111</td>
            <td>ccc</td>
            <td>13232</td>
        </tr>
    </table>
</body>
</html>

9、所以实现类这样写,将从标签到的所有内容复制到类中,批量编辑,按下 alt+caps lock ,用鼠标左键拖动,前面添加out.print("

package com.servletstudy.jdbc;

import com.servletstudy.utils.JDBCUtil;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ListServletEmp implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        servletResponse.setContentType("text/html;charset=UTF-8");
        PrintWriter out = servletResponse.getWriter();

            out.print("<html>");
            out.print( "   <title>员工信息</title>");
            out.print( "<body>");
            out.print( "<h3 align=\"center\">员工列表</h3>");
            out.print( "<hr width=\"60%\">");
            out.print( "<table border=\"1\" align=\"center\" width=\"50%\">");
            out.print( "   <tr align=\"center\">");
            out.print( "       <th>序号</th>");
            out.print( "       <th>员工编号</th>");
            out.print( "       <th>员工姓名</th>");
            out.print( "       <th>员工薪资</th>");
            out.print( "   </tr>");

        try {

            conn = JDBCUtil.getConnection();

            stmt = conn.createStatement();

            String sql = "select empno,ename,sal from emp";
            rs = stmt.executeQuery(sql);

            int i = 1;
            while (rs.next()){

                int empno = rs.getInt("empno");
                String ename = rs.getString("ename");
                Double sal = rs.getDouble("sal");
                out.print( "   <tr align=\"center\">");
                out.print( "       <td>"+(i++)+"</td>");
                out.print( "       <td>"+empno+"</td>");
                out.print( "       <td>"+ename+"</td>");
                out.print( "       <td>"+sal+"</td>");
                out.print( "   </tr>");

            }


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(conn,stmt,rs);
        }

        out.print( "</table>");
        out.print( "</body>");
        out.print( "</html>");

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

写好代码,点击Tomcat部署运行。出现如下异常

我们该项目是导入了MySQL驱动jar包的,而且在web目录下新建了一个lib类库目录,同时也将MySQL驱动粘贴进去了,但是还是报了类没找到异常,百度了一下,有一种方法是将MySQL驱动jar报放进Tomcat的lib目录里,没试过。另一种是到Project Structure->Artifacts->选中要部署的项目->选中WEB-INF->鼠标右键->Add Copy Of->Libraries->选择要添加的数据库驱动->Apply应用:因为我们是在idea项目中添加了数据库驱动,确保在idea中有这个驱动可以用,不报红,但是部署到Tomcat服务器中的的项目是没有这个驱动jar包的,Tomcat的的lib全局依赖中也没有,所以我们要将这个数据库驱动放到打包到项目中。

最后我把项目中web目录中lib里的数据库驱动删了也报异常,所以需要两者都存在驱动才行。而且是在lib中先添加MySQL驱动后才能打开Project Structure中在WEB-INF中添加数据库驱动,lib中的删除了得把Project Structure中在WEB-INF中的数据库驱动移除,先在lib加,然后WEB-INF。

posted @ 2021-08-04 23:02  Milen-jie  阅读(666)  评论(0编辑  收藏  举报