13、Servlet入门
发布时间:2017-09-06 14:35:12
13、Servlet入门 基本知识: 请求 1)http协议: 对浏览器客户端和服务器端之间数据传输的格式规范。 2)http请求:浏览器->服务器端 格式: 请求行(请求方式(GET/POST) 请求资源(URI) http协议版本(http1.1)) 请求头(键值对形式存在。 host、user-agent、referer) 一个空行 实体内容(POST提交的参数) HttpServletRequest对象: 请求对象。获取请求信息。 请求行:request.getMethod() request.getRequestURI/getRequestURL() request.getProtocol(); 请求头: request.getHeader("name") request.getHeaderNames() 实体内容: request.getInputStream() 获取参数数据:(GET或POST) request.getParameter("name") 一个值的参数 request.getParameterValues("name"); 多个值的参数 request.getParameterNames() 所有参数 http响应: 服务器->浏览器端 格式: 响应行(http协议版本 状态码 描述) 常用的状态码: 200 302 404 500 响应头( location(结合302状态码完成请求重定向功能)、 refresh(定时刷新)、content-type、 content-disiposition(以下载方式打开)) 一个空行 实体内容 HttpServletResponse对象: 响应对象。设置响应信息。 响应行: response.setStatus(); 响应头: response.setHeader("name","value") 实体内容: (PrintWriter) response.getWriter().writer(); 字符内容 (OutputStream)response.getOutputStream().writer(); 字节内容 content-Type作用 //response.setCharacterEncoding("utf-8"); /** * 服务器发送给浏览器的数据类型和内容编码 */ //response.setHeader("content-type", "text/html"); response.setContentType("text/html;charset=utf-8");//和上面代码等价。推荐使用此方法 手动开发一个Servlet 步骤: 1)编写java类,继承HttpServlet类 2)重新doGet和doPost方法 3)Servlet程序交给tomcat服务器运行!! 3.1 servlet程序的class码拷贝到WEB-INF/classes目录 3.2 在web.xml文件中进行配置 FirstServlet gz.itcast.a_servlet.FirstServlet FirstServlet /first 访问原理: tomcat服务器启动时,首先加载webapps中的每个web应用的web.xml配置文件。 : http协议 localhost: 到本地的hosts文件中查找是否存在该域名对应的IP地址 127.0.0.1 8080: 找到tomcat服务器 /day10 在tomcat的webapps目录下找 day10的目录 /first 资源名称。 1)在day10的web.xml中查找是否有匹配的url-pattern的内容(/first) 2)如果找到匹配的url-pattern,则使用当前servlet-name的名称到web.xml文件中查询是否相同名称的servlet配置 3)如果找到,则取出对应的servlet配置信息中的servlet-class内容: 字符串: gz.itcast.a_servlet.FirstServlet 通过反射: a)构造FirstServlet的对象 b)然后调用FirstServlet里面的方法 映射路径 精确匹配 /first :8080/day10/first /itcast/demo1 :8080/day10/itcast/demo1 模糊匹配 /* :8080/day10/任意路径 /itcast/* :8080/day10/itcast/任意路径 *.后缀名 :8080/day10/任意路径.do *.do *.action *.html(伪静态)

注意:

1)url-pattern要么以/开头,要么以*开头。例如,itcast/*.do是非法路径。 2)不能同时使用两种模糊匹配,例如 /itcast/*.do是非法路径 3)当有输入的URL有多个servlet同时被匹配的情况下: 3.1 精确匹配优先。(长的最像优先被匹配) 3.2 以后缀名结尾的模糊url-pattern优先级最低!!!

案例:

对于如下的一些映射关系: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do 问题: 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应 Servlet引擎将调用Servlet3。 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 缺省路径

servlet的缺省路径(/)是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。
问题: URL输入:8080/day10/index.html 如何读取文件????

1)到当前day10应用下的web.xml文件查找是否有匹配的url-pattern。 2)如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理 3)DefaultServlet程序到day10应用的根目录下查找是存在一个名称为index.html的静态文件。 4)如果找到该文件,则读取该文件内容,返回给浏览器。 5)如果找不到该文件,则返回404错误页面。 结论: 先找动态资源,再找静态资源。 生命周期 引入

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站设计 https://www.feimao666.com