`
brandNewUser
  • 浏览: 456236 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的Java Web项目搭建流程

阅读更多

 

今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作。当很久没有做过web项目时,有些东西还是很容易忘记的。

 

Maven配置

使用maven进行整个项目的构建,使用intellij idea IDE,填写完groupIdartifactId之后,声明packaging元素为war包,在build中注意需要设置war-pluginwebResources

 

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>web</directory>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
 

 

 

其中的dependency项中除了要包含的依赖jar包外,有些编译期依赖的jar包也需要填写(scope=provided),比如javaee-api

 

Servlet编写和配置

Java Web项目中使用Servlet来处理具体的http请求,请求url的处理是配置在webResources目录下的web.xml文件中的:

 

<servlet>
        <servlet-name>monitor</servlet-name>
        <servlet-class>具体的ServletClass</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>monitor</servlet-name>
        <url-pattern>/monitor</url-pattern>
</servlet-mapping>

 

 

其中servlet-mapping中的/monitor就是对应的处理URL,也即http://主机名称web服务器端口/web项目的Context/url-pattern

 

Servlet中通常继承javax.servlet.http.HttpServlet类,重写其中的doGetdoPost方法(分别处理GETPOST请求)。事实上,Servlet中包含HTTP的所有请求方式的相关方法(PUT, DELETE等)一般情况下,我们对于数据量稍微比较大的数据都使用POST方式提交HTTP请求(GET方式一般用于查询资源,会限制提交数据长度,GET请求的参数数据会显示在浏览器的地址栏URL中)。

 

通过HttpServletRequest.getParameter(parameterName)来获取请求中提交的参数数据,这里指的仅仅是Request范围的参数名。

 

Servlet的数据返回

如何返回Servlet中的数据,这需要我们使用参数中的HttpServletResponse的相关方法了,其中getWriter()方法提供了一个输出流,可以将html中的数据写入到这个输出流中,这样在浏览器就能以页面到形式查看到这个html页面。

 

Servlet可以以Java程序的方式对请求进行处理并返回,可以说,ServletJava代码中包含html页面,如果生成的html页面比较大,其中的getWriter().print()的代码会非常恐怖而且难以理解。JSP正是基于这个原因出现的,JSP使用的方式是html页面加入java代码(scriptlet),在html页面较大而java逻辑较少的情况下比较适用。

 

Servlet中也可以根据处理逻辑来forword到对应的jsp页面,使用如下的方法:

   getServletConfig().getServletContext().getRequestDispatcher(jsp的相对路径).forward(request,response);

 

 

我们知道HTTP返回的代码代表这不同的含义,比如

1xx-信息提示;
2xx-成功;
3xx-重定向;
4xx-客户端错误;
5xx-服务器错误;

 

 

我们可以手动在HttpServletResponse.setStatus()方法中指定返回的HTTP Code,给客户端对应的提示。

 

Web项目处理逻辑中,经常需要处理本地资源,比如读取本地(Web项目中)的配置文件。这就需要使用ServletContext中的getResource系列方法, getResourcegetResourceAsStream方法以“/”开头的字符串为参数,它指定上下文根路径的资源相对路径。文档的层级可能存在于服务器的文件系统,war文件,远程服务器或者在一些其它位置中,注意在使用完成后,需要将流关闭。

 

日志(log4j)配置

在进行任何项目开发都需要记录必要的日志,尤其是对应web项目的开发,你需要能够查询到对应的处理错误,这里使用了log4j来进行日志的处理。

 

日志的配置需要进行初始化,这个初始化的时机需要在web项目启动时做。这里就需要为log4j单独创建一个Servlet,用于初始化。在web.xml中建立对应的Servlet,并不需要声明servlet-mapping,因为它并不负责真正处理HTTP请求。

<servlet>
        <servlet-name>log4j-init</servlet-name>
                  <servlet-class>com.xxx.monitor.servlet.Log4jInitServlet</servlet-class>
        <init-param>
            <param-name>log4j</param-name>
            <param-value>WEB-INF/log4j.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

 

 

将其load-on-startup声明的顺序改成1,这样就能保证在其他Servlet初始化之前,Log4j已经初始化完毕。其中的init-param参数指定了log4j配置文件对应WebResources的位置,这在ServletConfig中可以通过getInitParameter来进行获取。

 

Log4jInitServlet中,由于不需要处理HTTP的各种类型请求,只需要重写初始化方法init

@Override
    public void init(ServletConfig servletConfig) throws ServletException {
        String prefix = servletConfig.getServletContext().getRealPath("/");
        String filePath = String.format("%s/%s", prefix, servletConfig.getInitParameter("log4j"));
        FileInputStream inputStream = null;
        Properties properties = new Properties();
        try {
            inputStream = new FileInputStream(new File(filePath));
            properties.load(inputStream);
            String logFilePath = String.format("%s%s", prefix, properties.getProperty("log4j.appender.R.File"));
            properties.setProperty("log4j.appender.R.File", logFilePath);
 
            PropertyConfigurator.configure(properties);
        } catch (IOException e) {
            throw new ServletException("log4j module initialized failed!");
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                }
            }
        }
}

 

 

这里log4j.properties中的log4j.appender.R.File参数只是指定输出log文件的相对地址,这就需要我们使用servletConfig.getServletContext().getRealPath("/")将其拼接成运行时的绝对地址。

 

HTTP请求测试

在编写代码完后,我们都需要对其正确性进行测试。Java中提供了对于HTTP请求发送的相关API,在这个基础上,我们进行测试代码的编写:

 

URL postUrl = null;
        try {
            postUrl = new URL(url);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
        HttpURLConnection connection = null;
        DataOutputStream dataOutputStream = null;
        BufferedReader reader = null;
        try {
            connection = (HttpURLConnection) postUrl.openConnection();
            //Read from the connection
            connection.setDoInput(true);
            //http body is in the content
            connection.setDoOutput(true);
            //we use post method
            connection.setRequestMethod("POST");
            //post can't use caches
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
 
            connection.connect();
            dataOutputStream = new DataOutputStream(connection.getOutputStream());
            String content = "userName=clamaa&password=bbb&json=jsonstring";
            dataOutputStream.writeBytes(content);
            dataOutputStream.flush();
            dataOutputStream.close();
 
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
 
            System.out.println("====================");
            System.out.println("read line started...");
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
                result.append(line).append(System.getProperty("line.separator"));
            }
            System.out.println("====================");
            return result.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                }
            }
        }

 

 至此,一个基本的Java项目就已经编写完毕,由于整个项目使用maven来构建的,只要在项目目录下,执行maven clean install命令,将生成的target/下的war包部署到tomcatwebapp目录下即可。 

分享到:
评论

相关推荐

    一个基于maven的Java Web项目(只是搭建了环境)

    【标题】: "一个基于maven的Java Web项目(只是搭建了环境)" 在这个项目中,我们关注的是如何使用Maven构建一个基础的Java Web项目框架。Maven是一个流行的项目管理和综合工具,它帮助开发者管理项目的构建、依赖...

    Java Web项目开发环境搭建说明文档

    在进行Java Web项目的开发工作前,首先需要搭建一个完整的开发环境。这个过程涉及到多个步骤,包括Java环境的安装与配置、集成开发环境MyEclipse的使用以及相关设置。以下是对这些知识点的详细说明: 1. **Java环境...

    Java Web项目模板

    Java Web项目模板是一种预先设计和...总之,"Java Web项目模板"是一个预配置的开发起点,包含了运行一个基本Java Web应用所需的所有组件,它降低了项目初始化的复杂性,让开发者能够更高效地进行Web应用的开发和维护。

    Java_Web项目开发平台搭建方法(加精)

    本文档主要介绍如何搭建一个完整的Java Web项目开发环境。此过程主要包括安装必要的软件组件、配置环境变量、设置开发工具等步骤,最终目的是为了能够顺利地开发、测试并部署Java Web应用。 #### 二、准备工作 在...

    java web 项目开发案例精粹 第一章 源代码

    在Java Web项目开发中,第一章...通过对这些知识点的学习,开发者可以了解一个完整的Java Web项目是如何运作的,以及如何构建一个能够处理日常事务的管理系统。同时,这也有助于提升开发者在实际工作中的技能和经验。

    基于java web开发的购物商城项目源码

    描述中提到,这个购物商城项目是“适合毕业设计,小型项目参考”,意味着它具有一定的教学价值和实用性,可以作为学习Java Web开发的实战案例,同时也适用于那些需要快速搭建一个简单电商系统的学生或团队。项目可能...

    基于Spring Mvc的Java Web项目

    通过以上描述,我们可以看出这个项目是一个典型的Java Web应用,它利用现代开发工具和技术,实现了用户友好的交互和高效的数据处理。开发者需要对Java、Spring框架、数据库操作以及前端开发有深入理解,才能有效地...

    Java Web项目的创建与测试

    整个创建和测试的过程是一个标准的Java Web开发流程,适用于初学者学习如何搭建和测试一个简单的Web应用程序。在开发过程中,初学者需要注意的是不同版本的Eclipse IDE和Tomcat服务器的具体操作步骤可能会有细微差别...

    深入体验Java+Web项目开发(开发日记)2

    同时,Spring Boot的引入使得初始化和配置变得更加简单,能快速搭建起一个完整的应用环境。 数据库是Web项目中存储数据的核心组件。MySQL是一个广泛应用的关系型数据库,理解SQL语言,包括CRUD操作(创建、读取、...

    基于 LeeSite 的项目骨架生成工具,可以快速的搭建一个将 LeeSite 作为依赖的 Java Web 项目.zip

    LeeSite 是一个可能的开源 Java Web 开发框架,旨在简化项目的搭建过程,提高开发效率。项目骨架生成工具允许开发者快速生成包含基本目录结构、配置文件、MVC 结构等在内的完整项目模板,以便于开发者能够快速投入...

    spring mvc 搭建(java web)

    本文将详细介绍如何搭建Spring MVC框架,并结合Spring与Hibernate实现一个简单的Java Web应用。 #### 二、准备工作 在正式搭建Spring MVC框架之前,我们需要准备以下资源: - **相关jar包**:包括Spring MVC的核心...

    JAVA零基础入门和从网页搭建入门Java Web

    【标题】"JAVA零基础入门和从网页搭建入门Java Web" 涵盖了学习Java编程语言的基础知识以及如何利用Java...这个过程中,"JAVA imooc"可能是一个在线教育平台或课程系列的标识,暗示了这些教学资料可能来源于该平台。

    Java Web项目企业事务管理系统源码

    【Java Web项目企业事务...以上就是Java Web项目企业事务管理系统源码涉及的主要技术点,这些知识点相互配合,共同构成了一个功能完备、健壮的Web应用。通过学习和理解这些技术,开发者可以更好地理解和维护此类系统。

    Java Web开发入门很简单源代码

    第1篇为准备篇,主要为Java Web开发概述,并手把手带领读者一块搭建Java Web开发环境;第2篇为基础篇,主要介绍HTML、CSS、JavaScript、Servlet、JSP和JavaBean等Java Web开发所需的基础知识,并对这些基础知识进行...

    一些轻量的java web项目...zip

    【标签】:“java项目”标签再次强调了项目的技术栈,这可能意味着项目中采用了Spring框架,Spring是Java Web开发中的一个核心框架,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    java web程序开发项目资源

    【Java Web程序开发项目资源】是一个综合性的学习资料包,主要涵盖了使用Eclipse IDE进行Java Web应用程序开发的相关知识。这个项目旨在帮助开发者理解和掌握如何在Eclipse环境下搭建、设计和实现Web应用程序。以下...

    Myeclipse整合flex4搭建java的Web项目

    2. **创建Java Web项目**:打开MyEclipse 8.0,创建一个新的Java Web项目,并选择Java EE 5.0作为项目类型。 - 如图2所示。 3. **部署Blazeds到Web项目**:将Blazeds解压后的两个文件夹复制到项目的`WebRoot`目录...

    java常用4种框架搭建过程

    Spring框架是一个全面的企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心功能,同时集成了大量其他组件,如数据访问/集成、Web、测试等。SpringMVC是Spring框架的一部分,专门用于构建Web...

Global site tag (gtag.js) - Google Analytics