程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet學習筆記--Servlet初步

Servlet學習筆記--Servlet初步

編輯:關於JSP

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()方法

 


摘自 沐子松

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved