1. Servlet快速入门
1.1. 编写servlet 类
入门:找Servlet所在包... 建立的工程必须web工程!! 自动导入javaee.jar类库!!
第一步: 创建普通java实现Servlet接口
第一种写法:
package cn.itcast.day01_tomcat.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyServlet1 implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// 表示 当前servlet对象被容器创建...该方法只执行一次.....
System.out.println("hello ----init 初始化方法执行");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// 浏览器请求一次 该方法就执行一次.....
System.out.println("hello ----service 业务方法执行");
}
}
浏览器如何访问该servlet对象呢? http://localhost/day01_tomcat/
1: 该对象谁创建?
服务器端开发: 对象servlet组件由容器创建(tomcat)
2: 浏览器如何访问该资源?
当浏览器访问该资源的时候(http://localhost/day01_tomcat/),容器执行该对象创建 ...对应Init 方法就会执行,,,,
第二步:配置web.xml
web.xml 是当前工程的主配置文件 ,
容器根据web.xml文件中的相关标签配置,自动创建该对象,并执行相关方法!!
标签:<servlet> <servlet-mapping>
<!-- 配置标签告知容器当浏览器请求目标资源给予相关的配置让服务器加载该servlet对象 -->
<servlet>
<servlet-name>MyServlet1</servlet-name>
<!--类的全路径-->
<servlet-class>cn.itcast.day01_tomcat.servlet.MyServlet1</servlet-class>
</servlet>
<!-- mapping映射通过在地址栏输入虚拟路基来使得浏览器访问servlet资源,虚拟路径对应着servlet的资源-->
<servlet-mapping>
<servlet-name>MyServlet1</servlet-name>
<!--虚拟路径一定以斜杠(/)开头 -->
<url-pattern>/servlet1</url-pattern>
<!-- /servlet1表示浏览器访问servlet对应的虚拟路径-->
</servlet-mapping>
<servlet-class>cn.itcast.day01_tomcat.servlet.MyServlet1</servlet-class>
右键类名 选择 copy qualiedfied Name 即可!!,不要手写,容易出错!!!
Servlet接口
------ 实现类 GenericServlet ----- 子类 HttpServlet ---- 自定义Servlet 继承HttpServlet
第二种写法:
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
// GenericServlet 对象不包含 具有http协议 api 的
public class MyServlet2 extends GenericServlet{
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// 编写业务即可与 获取客户端浏览器getMethod
System.out.println("------servlet2 ----");
// 浏览器访问服务器.... ServletRequest (该对象 接受 浏览器(客户端)发送请求参数 )
// ServletResponse 服务器通过 该对象给予 客户端 响应数据 ..
}
}
第三种写法:
分析
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
第三种写法实现:
package cn.itcast.day01_tomcat.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet3 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 浏览器的访问 请求方式... 7 种 get post service 方法 接受所有请求方式...
// HttpServlet 类 重写GenericServlet 提供抽象service 方法 自定义了一个service方法
// 该方法里面 请求的方式 分类..根据浏览请求方式不同 调用不同的方法
// 自定义的 servlet 不用重写 service 直接重写 具体请求方式业务方法!!
String value = req.getMethod();
System.out.println(value+"-----");
}
}
第四种实现方法:为了划分请求方式
因为HttpServelt中的已经帮我们区分了从浏览器发起的不同请求
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getMethod();
if (method.equals(METHOD_GET)) {
long lastModified = getLastModified(req);
if (lastModified == -1) {
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
} else {
long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
// If the servlet mod time is later, call doGet()
// Round down to the nearest second for a proper compare
// A ifModifiedSince of -1 will always be less
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
}
} else if (method.equals(METHOD_HEAD)) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
} else if (method.equals(METHOD_POST)) {
doPost(req, resp);
} else if (method.equals(METHOD_PUT)) {
doPut(req, resp);
} else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
//
// Note that this means NO servlet supports whatever
// method was requested, anywhere on this server.
//
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
}
package cn.itcast.day01_tomcat.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 该方法执行 只接受get请求...
System.out.println("----do get----");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 只接受Post请求...
System.out.println("----do post----");
}
}
第五种:相同的业务,代码冗余。
package cn.itcast.day01_tomcat.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);// get请求 业务方法由dopost执行
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get---post");
}
}
第6种:用eclipse创建servlet,Name:Myservlet6
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet6 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 开始进行servlet代码开发吧
System.out.println("servlet 6 ---");
}
}
第7种:优化模板
2014版本:
C:\Users\Administrator\AppData\Local\MyEclipse Professional 2014\plugins
修改 com.genuitec.eclipse.wizards_11.5.0.me201310291746.jar
2010版本:
C:\Users\lili\AppData\Local\MyEclipse\Common\plugins
修改Servlet.java种的doGet和doPost方法
用工具生产Servlet代码,以及web.xml种的配置