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 ,