本帖最后由 大山哥哥 于 2017-12-31 20:23 编辑
什么是Servlet?
* 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.* Servlet就是SUN公司提供的一个动态网页开发技术.
servlet的使用步骤
a) 创建一个类实现servlet接口
[Java] 纯文本查看 复制代码 public class CustormServlet implements Servlet{
public void init(ServletConfig config) throws ServletException {}
public ServletConfig getServletConfig() {return null;}
/**为用户处理请求和响应的方法.*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
//ServletRequest代表外部请求
//ServletResponse代表对外相应
}
public String getServletInfo() {return null;}
public void destroy() {}
}
b)配置文件中配置servlet
[Java] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]" id="WebApp_ID" version="2.5">
<display-name>ServletDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<!-- servlet名称 -->
<servlet-name>CustormServlet</servlet-name>
<!-- servlet全路径 -->
<servlet-class>com.b3a4a.servlet.CustormServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet名称 -->
<servlet-name>CustormServlet</servlet-name>
<!-- url访问路径 -->
<url-pattern>/custom</url-pattern>
</servlet-mapping>
</web-app>
c)发布项目后访问路径
[Java] 纯文本查看 复制代码 http://localhost:8080/项目名称/servlet对应的url访问地址
eg:
http://localhost:8080/ServletDemo/custom
servlet中获取请求的参数
ServletRequest的方法:
[Java] 纯文本查看 复制代码 //获取指定参数的值
String getParameter(String name);
//接收一个名称对应多个值的数据(checkbox)
String[] getParameterValues(String name)
//用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值
Map getParameterMap();
servlet执行流程
servlet生命周期
- servlet创建时执行的方法(即第一次访问的时候才创建)
init(ServletConfig config){} - servlet被访问时调用的方法(即每访问一次就触发一次)
service(ServletRequest req, ServletResponse res){} - servlet被销毁的时候调用的方法
destory(){}
注意:
a) 让对应servlet在tomcat启动时自动创建:
在配置文件中的servlet标签中配置load-on-startup标签,注意:该标签中的值为正整数且该值越小优先级越高(2最大!!!)
[Java] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]" id="WebApp_ID" version="2.5">
<display-name>ServletDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<!-- servlet名称 -->
<servlet-name>CustormServlet</servlet-name>
<!-- servlet全路径 -->
<servlet-class>com.b3a4a.servlet.CustormServlet</servlet-class>
--------------------------------------
<load-on-startup>2</load-on-startup>
--------------------------------------
</servlet>
<servlet-mapping>
<!-- servlet名称 -->
<servlet-name>CustormServlet</servlet-name>
<!-- url访问路径 -->
<url-pattern>/custom</url-pattern>
</servlet-mapping>
</web-app>
b) servlet的配置文件中servlet-mapping标签中的url-pattern的配置细节
[Java] 纯文本查看 复制代码 1.完全路径匹配 :以 / 开始,匹配单文件 例如:/ServletDemo4
2.目录匹配 :以 / 开始 需要以 * 结束.访问对应目录后都会执行该servlet 例如:/aaa/bbb/*
3.扩展名匹配 :不能以 / 开始 以 * 开始的.匹配所有访问的url后缀为指定扩展名的 例如: *.do , *.action
***** 错误的写法 : /*.do
* url-pattern配置三种方式的优先级
完全路径匹配 > 目录匹配 > 扩展名匹配
c) servlet中路径
[Java] 纯文本查看 复制代码 绝对路径(推荐):不需要找位置相对关系. 以 / 开始的
绝对路径中分为客户端路径和服务器端路径:
* 客户端路径一定要加工程名(从浏览器访问). /ServletDemo/custom
* 服务器端路径不需要加工程名(在web程序中配置). /custom
* 服务器端路径以WebContent为根路径
相对路径:都是需要找位置相对关系.不能以 / 开始的.
HttpServlet引入
a)创建一个类继承HttpServlet,重写doGet和doPost方法
[Java] 纯文本查看 复制代码 public class CustomHttpServlet extends HttpServlet{
private static final long serialVersionUID = 5915003527953971372L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//逻辑
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
b)配置文件中配置servlet
[Java] 纯文本查看 复制代码 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
id="WebApp_ID" version="2.5">
...
<servlet>
<servlet-name>CustomHttpServlet</servlet-name>
<servlet-class>com.b3a4a.servlet.CustomHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CustomHttpServlet</servlet-name>
<url-pattern>/customhttp</url-pattern>
</servlet-mapping>
</web-app>
c)发布项目后访问路径
[Java] 纯文本查看 复制代码 http://localhost:8080/ServletDemo/customhttp
Servlet添加响应头
HttpServletResponse设置响应头
- addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
- addDateHeader(String name,long date);
- addIntHeader(String name,int value);
- setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
- setDateHeader(String name,long date);
- setIntHeader(String name,int value);
例如:头信息: xxx:aaa
[Java] 纯文本查看 复制代码 resp.addHeader(“xxx”,”bbb”); -->xxx:aaa,bbb
resp.setHeader(“xxx”,”bbb”); -->xxx:bbb
Servlet控制页面跳转
1.控制响应头的refresh头
[Java] 纯文本查看 复制代码 public class CustomHttpServlet extends HttpServlet{
private static final long serialVersionUID = 5915003527953971372L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("access success");
//=================================
//设置Refresh的响应头,5秒后跳转到success页面
resp.addHeader("Refresh", "5;url=/ServletDemo/html/success.html");
//=================================
}
}
2.通过302重定向进行跳转
[Java] 纯文本查看 复制代码 public class CustomHttpServlet extends HttpServlet{
private static final long serialVersionUID = 5915003527953971372L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("aaaa");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//=================================
resp.setStatus(302);
resp.setHeader("Location", "/ServletDemo/custom");
//sendRedirect(String url)方法等价于上面2行
//resp.sendRedirect("/ServletDemo/custom");
//=================================
}
}
ok~先到这里把~下次则给大家带来关于ServletConfig和ServletContext的内容~~~~
|