11.servlet接口-2018/07/23
1.servlet
是一个接口,需要导包javax.servlet.Servlet;
第一种编写一个servlet程序的方法
写一个Java类,实现servlet接口
修改web.html文件,给servlet提供一个可访问的url地址(创建servlet实例,提供一个可访问的URL地址)
部署应用到Tomcat服务器
测试:http://localhost:8080/day11/demo1
2.生命周期
servlet第一次访问时调用实例化和初始化方法,service方法每次方法都被调用
如何让servlet在服务器启动时就创建
添加<load-on-startup>2</load-on-startup>
3.servlet的三种创建方式
上边那种
extends GenericServlet
extends HttpServlet(开发常用)
4.映射细节
.do 以 .字符串的请求都可以访问
/*任意字符串都可以访问
/action/* 以action开头的请求都可以访问
/(斜杆)优先于.(后缀名)
5.ServletConfig的使用
作用:
可以获取servlet配置信息
可以获得ServletContext对象
方式:
用init方法把服务器创建的对象进行操作 ...init{this.config = config;} ...config.getInitParameter("encoding")根据配置文件中的名,得到值
通过继承父类的方法得到ServeltConfig对象 ...this.getServletConfig().getInitParameter("encoding")
通过继承父类方法 ...this.getInintParameter("encoding")
6.ServletContext: 代表的是整个应用
一个应用只有一个ServletContext对象
作用:
域对象:在一定范围内(当前应用),使多个Servlet共享数据。
常用方法: void setAttribute(String name,object value);//向ServletContext对象的map中添加数据 Object getAttribute(String name);//从ServletContext对象的map中取数据 void removeAttribute(String name);//根据name去移除数据
获取全局配置信息:修改web.xml文件:
获取资源路径:可以得到任何路径的任何资源 String path = this.getServletContext().getRealPath("/WEB-INF/a.properties"); Properties pro = new Properties(); pro.load(new FileInputStream(path)); System.out.println(pro.getProperty("key"));
实现请求转发 ServletContext application = this.getServletContext(); application.getRequestDispatcher("/servlet/demo6").forward(req, resp);
7.与Servlet相关的对象
Servlet 接口javax.servlet.Servlet
GenericServlet 抽象类javax.servlet.GenericServlet
HttpServlet 抽象类javax.servlet.HttpServlet
ServletConfig 接口 javax.servlet.ServletConfig
ServletContext 接口 javax.servlet.ServletContext
ServletRequest 接口 javax.servlet.ServletRequest
ServletResponse 接口 javax.servlet.ServletResponse
HttpServletRequest 接口 javax.servlet.http.HttpServletRequest
HttpServletResponse 接口 javax.servlet.http.ServletResponse
8.HttpServletResponse
1.响应行
setStatus(int sc) 设置响应状态码
2.响应头
sendRedirect(String location) 请求重定向
setHeader(String name, String value) 设置响应头信息 //告诉客户端用什么编码 response.setHeader("content-type", "text/html;charset=UTF-8");
3.响应正文(主体)
getWrite(); 字符输出流,得到ServletOuputStream对象
getOutputStream(); 字节输出流,得到PrintWriter对象,与上一个方法不能同时使用
setCharacterEncoding(String charset) 告知服务器使用什么编码
setContentType(String type) response.setContentType("text/html; charset=UTF-8");
9.文件下载
URLEncoder.encode(filename,"UTF-8");将不安全的文件名改为UTF-8格式
10.缓存问题
告诉客户端不使用缓存 response.setHeader("pargma","no-cache"); response.setHeader("cache-control","no-cache"); response.setIntHeader("expires",0);
11.刷新
注册成功后跳转 response. getWriter().write("注册成功!3秒后跳转页面..."); response. setHeader("refresh","3;url=要跳转页面的路径");
12.HttpServletRequest
请求行 Get http://localhost:8080/day09/servlet/req1?username=zs http/1.1 getMethod(); 获得请求方式 getRequestURL();返回客户端发出请求时的完整URL。问号前的 getRequestURI(); 返回请求行中的资源名部分。/day09/servlet/req1 getContextPath();(重要)当前应用的虚拟目录(名称) /day09 getQueryString() ; 返回请求行中的参数部分。问号后的东西
请求消息头 String getHeader(String name) 根据头名称得到头信息值 Enumeration getHeaderNames() 得到所有头信息name Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值
请求正文(重要)
与获取表单数据相关的方法 input type="text" name="username" /> getParameter(name) 根据表单中name属性的名,获取value属性的值方法 getParameterValues(String name)专业为复选框取取提供的方法 getParameterNames() 得到表单提交的所有name的方法 getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用 getInputStream 以字节流的方式得到所有表单数据
与操作非表单数据相关的方法(request也是一个域对象) void setAttribute(String name, Object value); Object getAttribute(String name); Void removeAttribute(String name);
与请求转发相关的方法
转发request由服务器执行,客户端只发送一次请求,地址栏不变,转发能传递数据
重定向由客户端执行,客户端发送两次请求,地址栏发生变化,不能传递数据,可以跳转到其他应用 //得到请求转发或请求包含的协助对象 RequestDispatcher getRequestDispatcher(String path) forward(ServletRequest request, ServletResponse response) //转发的方法 include(ServletRequest request, ServletResponse response) //请求包含
与请求编码相关的方法: //解决post方式编码 request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式 //解决get方式编码 String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
posted @
2018-08-29 21:49
菜白小系瓦
阅读(
123 )
评论()
编辑
收藏
举报