Java基础-面试题

文章目录
  1. 1. 准备环境
  2. 2. Coding

在今年四月份,公司及岗位变动之后,需要给团队招人,按照以往传统的面试方法,从Java基础知识到项目经验,也是面了好多人,结果都差强人意,而且也比较浪费时间,于是想起来以前自己学习的时候,只有Jdk、Windows系统、Tomcat、系统自带记事本工具或Editplus等记事本工具,来实现一个简单的Web应用。把这当做面试题,发现能达标的人更少了ㄟ( ▔, ▔ )ㄏ,此文对此来做一个简单记录介绍(此文只讲实践,原理可参考之前的Tomcat相关博客)。

准备环境

安装Jdk、Editplus或Sublime记事本工具(当然,windows或mac自带的记事本工具也可以)、Tomcat,配置相关的环境变量。

此处省略几百字…

此处多加一句,在系统环境变量classpath中,不仅需要配置Jdk的jar包,由于我们不借助于开发工具开发Web应用,所以为了省事,直接将需要的servlet-api.jar、jsp-api.jar配置到classpath下。

JVM Jar包加载顺序

在日常工作中,一般都会借助于开发工具来进行项目的编译运行,项目依赖的jar包等相关资源都由开发工具完成了,那如果没有开发工具,开发工具完成的事儿开发人员改怎么完成呢,这个时候就要特别关注classpath了。

使用java -XX:+TraceClassPaths 或者jinfo [pid] 就可以查看当前classpath下的jar包了。

一般的,JVM会从以下几个地方去加载jar包:

  • ${JRE_HOME}/lib/ext目录
  • 系统环境变量CLASSPATH目录
  • 使用Java命令在启动时,通过-classpath参数指定的目录

如果在使用Idea启动程序的时候有注意过控制台,会发现通过开发工具启动项目时,使用的还是java命令,后面跟着包括开发工具的jar包在内的各种依赖包。

所以在不依赖开发工具,使用命令来编译打包时,就需要格外注意classpath了。

Coding

随意的英文目录下新建Demo/WEB-INF/classes、Demo/WEB-INF/lib目录,并在WEB-INF目录下新建web.xml文件。

HelloServlet.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.demo.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
this.doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String name = request.getParameter("name");
StringBuilder htmlStr = new StringBuilder();
htmlStr.append("<html>");
htmlStr.append("<head>");
htmlStr.append("<title>测试页面</title>");
htmlStr.append("</head>");
htmlStr.append("<body>");
htmlStr.append("<h2>Hello, " + name + "</h2>");
htmlStr.append("</body>");
htmlStr.append("</html>");
PrintWriter out = response.getWriter();
out.write(htmlStr.toString());
out.flush();
}
}

web.xml

1
2
3
4
5
6
7
8
9
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.demo.servlet.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

web.xml可以从webapps目录下的其他示例项目中的WEB-INF目录里复制,无用的都删除,只保留web.xml最基本的格式,将上面的配置添加进去。

代码写好之后就需要去编译打包

  • 编译

通过javac命令中的-cp指定编译需要的jar包。(java运行类时也是一样的,此处我们通过tomcat启动)

1
javac -cp $CATALINE_HOME/lib/servlet-api.jar:$CATALINE_HOME/lib/jsp-api.jar:. -d . HelloServlet.java
  • 打包

在Demo目录的上级目录打开命令窗口,执行以下命令打包

1
jar -cvf Demo.war Demo/*
  • 启动

将打好的war包复制到tomcat的webapps目录下

1
cp Demo.war $CATALINE_HOME/webapps/

然后启动tomcat。通过http://localhost:8080/Demo/hello?name=admin访问即可。


关注我的微信公众号:FramePower
我会不定期发布相关技术积累,欢迎对技术有追求、志同道合的朋友加入,一起学习成长!


微信公众号

如果文章对你有帮助,欢迎点击上方按钮打赏作者