当前位置:编程学习 > JS >>

Servlet学习笔记--Servlet初步

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

 


摘自 沐子松

补充:Web开发 , Jsp ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,