使用IDEA創建一個Servlet應用程序


使用IDEA創建一個Servlet應用程序

第一步:創建web應用

選擇web application應用,之后填寫項目名稱等。

第二步:項目配置

在WEB-INF目錄下創建兩個文件夾:classes和lib,其中classes是Servlet類和其他JAVA類必須存放的位置,類以下的目錄反映了類包的結構。lib是Servlet應用程序所需JAR文件要在這里部署。但是Servlet API的JAR文件不需要在這里部署,容器中已經有了它的備份。

2.1 修改class文件的輸出目錄

選擇菜單File ---> Project Structure.. --->選擇modules ---->path選項 將class文件的輸出改為之前創建的classes目錄

2.2 修改jar文件的存儲

還是在modules菜單下,選擇Dependencies 選項卡 ---> 點擊右側的 “+”號,選擇“JARs or directories…”,選擇創建的lib目錄

目錄改為我們在WEB-INF下創建的lib目錄,選擇如下:

第三步:編寫Servlet程序

在src目錄下,創建一個servlet文件,其內容如下:

package app01a;

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

@WebServlet(name = "MyServlet",urlPatterns = {"/my"})

public class MyServlet implements Servlet{
    private transient ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig = servletConfig;
    }

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

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        String servletName = servletConfig.getServletName();
        //網頁響應類型,瀏覽器將其渲染為HTML格式
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.println("<html><head></head>" + "<body> Hello from " + servletName + "</body></html>");
    }

    @Override
    public String getServletInfo() {
        return "My Servlet";
    }

    @Override
    public void destroy() {

    }
}

第四步:配置Tomcat

選擇Edit Configurations..

這里要注意JRE的路徑,不要選擇默認,要選擇安裝JRE的路徑,我在運行的時候出現了1099端口被占用的情況,但是用netstat -ano|findstr 1099並沒有找到任務PID,百度后說是JRE的版本路徑要嚴格一致。

同時,Deployment標簽下修改訪問的URL路徑。

參考:IDEA的Tomcat配置Web的項目創建以及Servlet簡單運行

第五步:運行程序

訪問localhost:8080/應用名稱/servlet名

遇到的問題

啟動TomCat時,日志出現亂碼

百度了各種博客,修改了一大堆還是繼續亂碼,偶然間因為1099端口占用,去tomcat/bin目錄下啟動tomcat時,發現win10的命令行下也是亂碼情況,參考的博客,完美解決了問題:

解決最新版tomcat在window10下啟動可能出現啟動日志亂碼的情況

關於web.xml的錯誤

在第四步配置Tomcat后,我們訪問這個ServletTest的路徑變成了http://localhost:8080/my,這樣訪問的路徑是WEB-INF下的index.jsp文件,在web.xml中配置了servlet-mapping后,才能訪問對應的servlet對象

 <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>app01a.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

訪問http://localhost:8080/my/test可以訪問對應的servlet對象,調用service方法,瀏覽器應該渲染出service方法中的HTML內容。但是訪問時出現了錯誤 錯誤代碼500

中午睡了一覺起來,沒問題了。。。。。先記錄一下別的錯誤,如果下次再遇到,再記錄叭(」><)」

Servlet使用注解

使用注解WebServlet時,剛開始只是取代了web.xml中的 標簽,運行程序后404頁面,參考博客: Servlet使用注解配置URl提示404錯誤

在web.xml的 標簽中使用屬性metadate-complete="false"之后即可運行成功。

<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"
         metadata-complete ="true">

原因:

Servlet 3.0 的部署描述文件 web.xml 的頂層標簽 有一個 metadata-complete 屬性,該屬性指定當前的部署描述文件是否是完全的。如果設置為 true,則容器在部署時將只依賴部署描述文件,忽略所有的注解(同時也會跳過 web-fragment.xml 的掃描,亦即禁用可插性支持;如果不配置該屬性,或者將其設置為 false,則表示啟用注解支持(和可插性支持)。

至此,一個簡單:(的Servlet應用終於調通遼。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM