今天试图在服务器上搭建一个web服务器,顺便回顾了javaweb项目的入门,使用Servlet处理HTTP请求,并记录日志等操作。当很久没有做过web项目时,有些东西还是很容易忘记的。
其中的dependency项中除了要包含的依赖jar包外,有些编译期依赖的jar包也需要填写(scope=provided),比如javaee-api。
JavaWeb项目中使用Servlet来处理具体的http请求,请求url的处理是配置在webResources目录下的web.xml文件中的:
其中servlet-mapping中的/monitor就是对应的处理URL,也即http://主机名称:web服务器端口/web项目的Context/url-pattern。
在Servlet中通常继承javax.servlet.http.HttpServlet类,重写其中的doGet和doPost方法(分别处理GET和POST请求)。事实上,Servlet中包含HTTP的所有请求方式的相关方法(PUT,DELETE等)一般情况下,我们对于数据量稍微比较大的数据都使用POST方式提交HTTP请求(GET方式一般用于查询资源,会限制提交数据长度,GET请求的参数数据会显示在浏览器的地址栏URL中)。
通过HttpServletRequest.getParameter(parameterName)来获取请求中提交的参数数据,这里指的仅仅是Request范围的参数名。
如何返回Servlet中的数据,这需要我们使用参数中的HttpServletResponse的相关方法了,其中getWriter()方法提供了一个输出流,可以将html中的数据写入到这个输出流中,这样在浏览器就能以页面到形式查看到这个html页面。
Servlet可以以Java程序的方式对请求进行处理并返回,可以说,Servlet是Java代码中包含html页面,如果生成的html页面比较大,其中的getWriter().print()的代码会非常恐怖而且难以理解。JSP正是基于这个原因出现的,JSP使用的方式是html页面加入java代码(scriptlet),在html页面较大而java逻辑较少的情况下比较适用。
在Servlet中也可以根据处理逻辑来forword到对应的jsp页面,使用如下的方法:
我们可以手动在HttpServletResponse.setStatus()方法中指定返回的HTTPCode,给客户端对应的提示。
在Web项目处理逻辑中,经常需要处理本地资源,比如读取本地(Web项目中)的配置文件。这就需要使用ServletContext中的getResource系列方法,getResource和getResourceAsStream方法以“/”开头的字符串为参数,它指定上下文根路径的资源相对路径。文档的层级可能存在于服务器的文件系统,war文件,远程服务器或者在一些其它位置中,注意在使用完成后,需要将流关闭。
在进行任何项目开发都需要记录必要的日志,尤其是对应web项目的开发,你需要能够查询到对应的处理错误,这里使用了log4j来进行日志的处理。
在Log4jInitServlet中,由于不需要处理HTTP的各种类型请求,只需要重写初始化方法init:
这里log4j.properties中的log4j.appender.R.File参数只是指定输出log文件的相对地址,这就需要我们使用servletConfig.getServletContext().getRealPath("/")将其拼接成运行时的绝对地址。
在编写代码完后,我们都需要对其正确性进行测试。Java中提供了对于HTTP请求发送的相关API,在这个基础上,我们进行测试代码的编写:
至此,一个基本的Java项目就已经编写完毕,由于整个项目使用maven来构建的,只要在项目目录下,执行mavencleaninstall命令,将生成的target/下的war包部署到tomcat的webapp目录下即可。
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。