(起因是eclipse集成插件实现了J2EE的模拟服务器运行,但每次打开太慢,图片等预览效果不好,就想着只用tomcat服务器,集成自己的web项目,,然后我又把能遇到的问题都遇了个遍。。。)
.java文件编译成的.class文件是放在WEB-INF的classes文件夹里的,可能是跟tomcat内部的文件解析找寻有关。
web.xml里面储存的是servlet地址映射和项目首页设置之类的,是放在WEB-INF文件夹里的。(这个是由F:\apache-tomcat-7.0.94\conf\context.xml文件决定的,内容如下:)
context.xml:
参考教程:https://www.cnblogs.com/bennyblue/p/3365715.html
F:\apache-tomcat-7.0.94\conf\server.xml
server.xml各成分详解链接:https://www.cnblogs.com/starhu/p/5599773.html
也可以自己构建其他端口的应用(我这里兼容了80端口):
F:\apache-tomcat-7.0.94\webapps\test\WEB-INF\web.xml
hello.jsp
iisstart.htm
(报错:如果是404的错误,一般就是映射路径问题;如果是500错误,可能是后台servlet代码的问题)
Hello.html文件:
F:\apache-tomcat-7.0.94\webapps\test\Hello.html
HelloServlet.java文件:
F:\apache-tomcat-7.0.94\webapps\test\HelloServlet.java
public class HelloServlet extends HttpServlet {
//public class公共类的类名要跟文件名一致!
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String message = request.getParameter("message");//获得前端传的数据
//System.out.println(message);//这里输出在了tomcat服务器界面里
response.setContentType("text/html;charset=utf-8");
response.setHeader("charset", "utf-8");
PrintWriter out=response.getWriter();
out.write(""+message+"
");
//response.getWriter().print("{\"success\":\""+ true +"\"}");//表示{"success":"true"}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
web.xml映射文件:
F:\apache-tomcat-7.0.94\webapps\test\WEB-INF\web.xml
HelloServlet
HelloServlet
HelloServlet
/HelloServlet
hello.jsp文件:
F:\apache-tomcat-7.0.94\webapps\test\hello.jsp
HelloServlet.java文件:
F:\apache-tomcat-7.0.94\webapps\test\HelloServlet.java
@WebServlet("/HelloServlet") //没有";"分号,有"/",对应类名,servlet有了这种@WebServlet语法就可直接找寻对应class类了,不用配置web.xml映射
public class HelloServlet extends HttpServlet {
...
}
}
hello.html文件:
servlet文件:略,同上。
(.class文件是二进制流,更具有跨平台兼容性,所有平台的jvm都可以使用,所以最后解析的是.class文件)
注意:tomcat中.class文件要放在(例)F:\apache-tomcat-7.0.94\webapps\test\WEB-INF\classes里面
1.(cmd)javac命令:
javac -encoding utf-8 -d F:\apache-tomcat-7.0.94\webapps\test\WEB-INF\classes F:\apache-tomcat-7.0.94\webapps\test\HelloServlet.java
(-d是HelloServlet.class文件保存的目录,没有的话就保存到了HelloServlet.java同目录下)
注意:javac命令环境变量配置的path用C:\Program Files\Java\jdk1.8.0_144\jre\bin;C:\Program Files\Java\jdk1.8.0_144\bin绝对地址,不要用%JAVA_HOME%/...相对地址,javac.exe的程序就在jdk\bin里面
可能报错:非法字符:“\ufeff”,... ,需要class,interface,enum,... 。是保存格式GBK或者UTF-8 with BOM的问题,需上文命令是-encoding utf-8,所以.java文件要用utf-8的编码格式保存。VS中修改是ctrl+shift+p->更改文件编码;或者文件->首选项->设置->encode里的编码格式默认值修改)
2.JavaComplier:
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
compiler.run(null,null,null,"F:\\apache-tomcat-7.0.94\\webapp\\test\\HelloServlet.java");
可能报错:程序包javax.servlet.*不存在。设置环境变量CLASSPATH为F:\apache-tomcat-7.0.94\lib\servlet-api.jar(servlet接口配置),并把该jar包拷到jdk\jre\lib\ext下。
参考教程:https://blog.csdn.net/u010897392/article/details/50162809
ctrl+shift+I或右上角的首页->更多工具->开发者工具
点击request servlet后
Network下点开现在运行的文件名,可看到请求该文件页面的request与response请求头、响应情况等,可追踪报错。