LAMP:Linux + Apache + MySql + PHP 不花錢黃金組合
1.tomcat初步
設置環境變量JAVA_HOME:JDK目錄--否則無法啟動startup.bat
修改conf/server.xml文件中的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
表示tomcat占用的端口號
修改conf/context.xml文件中的
<Context reloadable="true">
如果有更新,自動加載
2.Http初步
安裝 HTTPLook
手動發送請求到服務器
若要通過http協議訪問網絡資源,規定的請求開頭格式:
GET /latest.html HTTP/1.1
Host: www.foo.com
Content-Type: text/html
{空行}
------------------TestHTTP.java
[java]
public class TestHTTP {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 8080);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("GET / HTTP/1.1");//GET方式連接服務器,'/'訪問根目錄下的文件,'HTTP/1.1'基於什麼協議
bw.newLine();
bw.write("Host: 127.0.0.1:808");//因為一個ip下面可能管理多個域名,所以要指明ip地址下的哪個域名
bw.newLine();
bw.write("Content-Type: text/html");//指明訪問的資源類型
bw.newLine();
bw.newLine();//必須有個空行,表明請求結束
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = null;
while((str = br.readLine()) != null) {
System.out.println(str);
}
bw.close();
br.close();
s.close();
}
}
----------------------
3.第一個servlet
必須有個WEB-INF文件夾,如下
WEB-INF
web.xml
該web app的配置文件
lib
該web app用到的庫文件
classes
存放編譯好的servlet
導入api:
項目-右鍵-properties - java build path - Libraries - Add External JARS :E:\apache-tomcat-7.0.27-windows-x64\apache-tomcat-7.0.27\lib\servlet-api.jar
[java]
------------------------HelloServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter pw = resp.getWriter();
pw.write("Hello Servlet!--doPost");
pw.flush();
pw.close();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//解決中文亂碼
resp.setContentType("text/html;charset=gbk");
PrintWriter pw = resp.getWriter();
pw.write("你好Hello Servlet!--doGet");
pw.flush();
pw.close();
}
}
---------------------------
配置步驟:
把編譯好的HelloServlet.class拷到WEB_INF/classes
如果這個類在eclipse中被包裹著,那麼classes文件夾下面也要新建對應的文件夾
例如:HelloServlet這個類是在ls/per包下面,則在classes下新建ls文件夾,在ls文件夾下面新建per文件下,per下面存放HelloServlet.class
修改web.xml
[html]
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>//servlet的名稱
<servlet-class>HelloServlet</servlet-class>//class文件的目錄d,完整包路徑,如果class是放在包裡面的,就要這樣寫"ls.com.HelloServlet"
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>//servlet的名稱,必須與上面的一致
<url-pattern>/hs</url-pattern>//url訪問地址,‘/’表示“http://127.0.0.1:8080/web應用目錄”+/hs 才能訪問到這個servlet
</servlet-mapping>
</web-app>
4.Servlet生命周期
從始至終只有一個Servlet對象,以多線程的形式處理客服端請求
第一個客服端請求調用Servlet時,被實例化,調用Servlet類的構造方法,只調用一次
接著調用初始化方法init()做些前奏准備,只調用一次
web應用程序退出時或者類的定義發生變化時,調用destroy()方法處理善後
5.中文亂碼問題
必須在取字符之前調用
返回響應字符處理:response.setContentType("text/html;charset=gbk");
接受post請求字符處理:request.setCharacterEncoding("gbk");
接受get請求字符處理:修改conf--server.xml--修改端口的地方--加上 URIEncoding="GBK"
6.為什麼有兩個init()方法
init()
init(ServletConfig config)
為了避免重寫init(ServletConfig config)時,忘了調用父類的init()方法,導致參數初始化錯誤,所以寫個空的init()方法,重寫時調用這個空的init()方法
摘自 沐子松