我开始了一份小合同工作,要求我使用Java.我被项目经理给了一本Java书,但是它涵盖了Java 1.3,我知道Java现在大概是1.6.我想知道在获得本书的基础知识后,我是否可以阅读该语言的主要核心内容?
我知道这是一个常见的错误,但请耐心等待.我一直在追求CLASSPATH问题,我认为这不是问题所在.我收到这样的错误.
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
Run Code Online (Sandbox Code Playgroud)
我安装了Tomcat和Java SDK,我知道Tomcat应该提供servlet API.但它究竟在寻找什么文件?
我有以下设置:JAVA_HOME =/usr/java/jdk1.6.0_16 CLASSPATH =/usr/share/java;/usr/share/java/tomcat6
tomcat的基本目录:/ usr/share/tomcat6在这个目录中,/ usr/share/tomcat6/lib只是/ usr/share/java/tomcat6的符号链接
tomcat6-servlet-2.5-api-6.0.18.jar在/ usr/share/java/tomcat6中,还有什么我需要告诉javac所以它会使用这个库吗?我需要另一个图书馆吗?
作为背景,我正在尝试运行一个hello world servlet.代码如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class process extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用javac编译它时,我得到以下错误(其中包括这是根本原因):
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
./src/process.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
Run Code Online (Sandbox Code Playgroud)
我尝试使用-cp选项在命令行上指定类路径,但我最终得到了相同的结果.
我真的不明白命令行参数如何与escripts一起使用.从联机帮助页中,我了解到参数作为字符串列表传递给main/1.如何解析传递给main的参数?
考虑以下:
#!/usr/bin/env escript
usage() ->
io:format("Usage: ~s <port#>~n",[escript:script_name()]),
halt(1).
main([]) ->
usage();
main(Args)->
io:format("Starting test server on port #~s~n",[Args]).
Run Code Online (Sandbox Code Playgroud)
一个简单的测试,只用一个参数看起来很好.
./test_server.erl 17001
Starting test server on port #17001
Run Code Online (Sandbox Code Playgroud)
如果我传入多个参数怎么办?
./test_server.erl 17001 8 9 abc
Starting test server on port #1700189abc
Run Code Online (Sandbox Code Playgroud)
那不是我想要的.我尝试在空格字符上拼出字符串:
....
ArgsList = string:tokens(Args, " "),
io:format("Length: ~w~n",[length(ArgsList)]),
....
Run Code Online (Sandbox Code Playgroud)
产量长度:1
我正在从Erlang Programming一书中练习练习12-2.我有一个模块db_server_otp,它实现了一个OTP gen_server行为.作为一个独立的模块,我测试了它,它按预期工作.我现在必须为它添加一个主管.根据本章中的示例,我创建了一个模块db_server_sup,如下所示:
-module(db_server_sup).
-export([start/0,init/1]).
-behavior(supervisor).
start() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init(_Arguments) ->
DbServerOtp = {db_server_otp, %% Id
{db_server_otp, start, []}, %% child process
permanent, %% restart
30000, %% shutdown (ms)
worker, %% type
{db_server_otp}}, %% required modules
{ok,
{{one_for_all, %% terminate all children and restart
5, %% max of n restarts in MaxSeconds
3600}, %% MaxSeconds (s)
[DbServerOtp]}}. %% child process list
Run Code Online (Sandbox Code Playgroud)
两个模块都位于同一个目录中,我用.beam文件编译这两个模块都在我启动erlang shell的同一个工作目录中.但是,使用erlang shell,我无法启动主管.
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:2] [rq:8] [async-threads:0] [hipe] …Run Code Online (Sandbox Code Playgroud)