zoukankan      html  css  js  c++  java
  • 使用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应用终于调通辽。。。。

  • 相关阅读:
    拍皮球 (Java实现)
    余弦 (java实现)
    循环输出
    从1输出n位数字
    数值的整数次方
    旋转数组的最小数字
    简单使用栈实现队列
    重建二叉树
    链表逆序输出
    替代空格
  • 原文地址:https://www.cnblogs.com/zz-1226/p/11229616.html
Copyright © 2011-2022 走看看