当前位置: 首页 > news >正文

国外好的网站空间济宁网页制作

国外好的网站空间,济宁网页制作,模板网站禁止右键,盐城网站开发代理商主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理并返回处理结果的程序 2. Servlet 体系结构 2.1 Servlet 接口 //Servlet对象的初始化Servlet 对象初始化后才能处理请求由 Servlet 容器调用 public void init(ServletConfig config) throws ServletException; //获取Servlet配置信息 public ServletConfig getServletConfig(); //处理客户端的请求由 Servlet 容器调用 public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException; //返回有关 Servlet 的信息比如作者、版本和版权 public String getServletInfo(); //销毁Servlet由 Servlet 容器调用 public void destroy(); 2.2 ServletConfig 接口 //获取Servlet的实例名称 public String getServletName(); //返回正在执行的Servlet所在的上下文对象 public ServletContext getServletContext(); //获取Servlet中给定名称的初始化参数 public String getInitParameter(String name); //获取Servlet中所有的初始化参数 public EnumerationString getInitParameterNames(); 2.3 Servlet 案例 编写Servlet package com.qf.jsp.servlet;import javax.servlet.*; import java.io.IOException; import java.util.Enumeration;public class LoginServlet implements Servlet {private ServletConfig servletConfig;Overridepublic void init(ServletConfig config) throws ServletException {this.servletConfig config;String servletName config.getServletName();System.out.println(Servlet 实例的名称 servletName);//获取Servlet中所有的初始化参数EnumerationString initParameterNames config.getInitParameterNames();while (initParameterNames.hasMoreElements()) {String initParameterName initParameterNames.nextElement();//获取Servlet中给定名称的初始化参数String initParameterValue config.getInitParameter(initParameterName);System.out.println(Servlet 初始化参数 initParameterName : initParameterValue);}}Overridepublic ServletConfig getServletConfig() {return servletConfig;}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(Servlet 处理请求);}Overridepublic String getServletInfo() {return Login Servlet;}Overridepublic void destroy() {System.out.println(Servlet 销毁);} } 配置 web.xml ?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0display-nameServletApp/display-name!--Servlet 实例配置--servlet!-- Servlet 实例的名称--servlet-nameloginServlet/servlet-name!--Servlet 的类型--servlet-classcom.qf.jsp.servlet.LoginServlet/servlet-classinit-param!--初始化参数的名称--param-namecharacterEncoding/param-name!--初始化参数的值--param-valueUTF-8/param-value/init-param/servlet!--Servlet 实例与请求地址的映射配置--servlet-mapping!-- Servlet 实例的名称--servlet-nameloginServlet/servlet-name!-- Servlet 匹配的请求地址--url-pattern/login/url-pattern/servlet-mapping!--session 配置--session-config!--超时时间配置--session-timeout30/session-timeout/session-config /web-app 获取初始化参数信息 Override public void init(ServletConfig config) throws ServletException {this.servletConfig config;String servletName config.getServletName();System.out.println(Servlet 实例的名称 servletName);//获取Servlet中所有的初始化参数EnumerationString initParameterNames config.getInitParameterNames();while (initParameterNames.hasMoreElements()){String initParameterName initParameterNames.nextElement();//获取Servlet中给定名称的初始化参数String initParameterValue config.getInitParameter(initParameterName);System.out.println(Servlet 初始化参数 initParameterName : initParameterValue);} } 编写 index.jsp % page contentTypetext/html;charsetUTF-8 languagejava % !DOCTYPE HTML htmlheadtitle登录页面/title/headbodyform actionlogin methodpostdivinput typetext nameusername/divdivinput typepassword namepassword/divdivinput typesubmit value登录/div/form/body /html 启动服务器进行登录操作查看控制台信息 控制台打印信息中并没有打印 Servlet 销毁 信息由此可以得出Servlet 处理完了请求后并没有销毁。 关闭服务器查看控制台信息 由此可以得出在 Tomcat 关闭之前Servlet 被销毁 结论 Servlet 在第一次接收请求时由容器如 Tomcat创建实例紧接着就由容器调用该 Servlet 的 init 方法完成初始化然后由容器调用该 Servlet 的 service 方法进行请求处理请求处理完成后Servlet 并不会消亡 而是跟随容器共存亡在容器关闭之前由容器调用 Servlet 的 destroy方法进行销毁 JSP 本质 package org.apache.jsp;import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*;public final class index_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports { } 由此可以得出JSP 的本质就是Servlet只是 JSP 注重的是页面内容的展示而Servlet注重的是业务逻辑的处理。 3. 请求处理与响应 3.1 体系结构 3.2 请求接口 ServletRequest 接口常用方法 //从请求中获取给定属性名对应的属性值 Object getAttribute(String attributeName); //将给定的属性值以给定的属性名存储在请求中 void setAttribute(String attributeName, Object attributeVaue); //从请求中将给定的属性名移除 void removeAttribute(String attributeName); //获取请求中存储的所有属性名 EnumerationString getAttributeNames(); //从请求中获取给定参数名对应的参数值参数值是单个数据 String getParameter(String parameterName); //从请求中获取给定参数名对应的参数值参数值是多个数据 String[] getParameterValues(String parameterName); //从请求中获取所有的参数名 EnumerationString getParameterNames(); //从请求中获取所有的参数名和参数值形成的映射 MapString, String[] getParameterMap(); //从请求中获取字符集编码 String getCharacterEncoding(); //设置请求的字符集编码 void setCharacterEncoding(String charset) throws UnsupportedEncodingException; //从请求中获取字符流该字符流只能读取请求体中的数据信息与下面的 getInputStream 方法只能二选一 BufferedReader getReader() throws IOException; //从请求中获取字节流该字节流只能读取请求体中的数据信息 ServletInputStream getInputStream() throws IOException; //从请求中获取当前Servlet所在的上下文对象 ServletContext getServletContext(); //从请求中获取请求转发的对象 RequestDispatcher getRequestDispatcher(String path); 用法 Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(请求的字符集编码需要在读取请求信息之前进行设置否则设置的字符集编码格式将不生效);System.out.println(请求字符集编码 servletRequest.getCharacterEncoding());servletRequest.setCharacterEncoding(UTF-8);System.out.println(请求字符集编码 servletRequest.getCharacterEncoding());BufferedReader reader servletRequest.getReader();System.out.println(开始读取请求参数信息);String line;while ((line reader.readLine()) ! null){System.out.println(line);}System.out.println(请求参数信息读取完毕);System.out.println();System.out.println(开始获取请求中存储的数据);EnumerationString attributeNames servletRequest.getAttributeNames();while (attributeNames.hasMoreElements()){String attributeName attributeNames.nextElement();Object attributeValue servletRequest.getAttribute(attributeName);System.out.println(attributeName attributeValue);}System.out.println(请求中存储的数据获取完毕);System.out.println();System.out.println(方式一开始获取请求参数信息);EnumerationString parameterNames servletRequest.getParameterNames();while (parameterNames.hasMoreElements()){String parameterName parameterNames.nextElement();String parameterValue servletRequest.getParameter(parameterName);System.out.println(parameterName parameterValue);}System.out.println(方式一请求参数信息获取完毕);System.out.println();System.out.println(方式二开始获取请求参数信息);MapString, String[] parameterMap servletRequest.getParameterMap();parameterMap.forEach((k, values) - System.out.println(k Arrays.toString(values)));System.out.println(方式二请求参数信息获取完毕);System.out.println(请求所使用的上下文路径 servletRequest.getServletContext().getContextPath()); } POST请求测试 GET 请求测试 结论 使用GET方式发送的请求只能通过getParameter 方法获取使用POST方式发送的请求只能使用流来获取。这是因为使用GET方式发送的请求参数在URL地址中解析这些参数的时候将其存放在一个Map集合中因此可以直接获取。而POS方式发送的请求参数在请求体中这部分内容只能通过流来读取然后再进行处理。 3.3 响应接口 ServletResponse 接口常用方法 //获取响应的字符集编码 String getCharacterEncoding(); //设置响应的字符集编码 void setCharacterEncoding(String charset); //获取响应的内容类型 String getContentType(); //设置响应的内容类型 void setContentType(String contentType); //获取输出流主要用于下载文件 ServletOutputStream getOutputStream() throws IOException; //获取打印流主要用于向页面传输信息 PrintWriter getWriter() throws IOException; 用法在 service 方法最后追加如下代码 System.out.println(); System.out.println(); System.out.println(); System.out.println(响应的字符集编码 servletResponse.getCharacterEncoding()); servletResponse.setCharacterEncoding(UTF-8); System.out.println(响应的字符集编码 servletResponse.getCharacterEncoding()); System.out.println(响应的内容类型 servletResponse.getContentType()); servletResponse.setContentType(text/html;charsetutf-8); System.out.println(响应的内容类型 servletResponse.getContentType()); PrintWriter writer servletResponse.getWriter(); writer.print(登录请求已处理); writer.flush(); writer.close(); 测试 3.4 HTTP 请求和响应 HttpServletRequest 接口常用方法 //从请求中获取Cookie信息 Cookie[] getCookies(); //从请求中获取给定请求头名称对应的属性值 String getHeader(String headerName); //从请求中获取所有的请求头名称 EnumerationString getHeaderNames(); //获取请求的方式GET、POST、PUT、DELETE等 String getMethod(); //从请求中获取上下文路径 String getContextPath(); //从请求中获取session HttpSession getSession(); //获取请求地址 String getRequestURI(); HttpServletResponse 接口常用方法 //添加客户端存储的Cookie信息 void addCookie(Cookie cookie); //返回错误状态及错误信息 void sendError(int status, String errorMsg) throws IOException; //返回错误状态 void sendError(int status) throws IOException; //重定向至新的资源 void sendRedirect(String redirectURL) throws IOException; //设置响应头信息 void setHeader(String headerName, String headerValue); //添加响应头信息 void addHeader(String headerName, String headerValue); //设置响应状态 void setStatus(int status); HttpServlet常用方法支持 HTTP 协议的 Servlet //对父类抽象方法的实现该方法是对HTTP协议的交互信息的实现调用的是下面的 service 方法 void service(ServletRequest req,ServletResponse res); //HTTP协议的交互信息的实现该方法主要针对不同的请求方式进行处理。GET请求会调用 doGet 方法处理 //POST请求会调用 doPost 处理 PUT请求会调用 doPut 方法处理 DELETE请求会调用 doDelete 方法处理 void service(HttpServletRequest req, HttpServletResponseres); //GET请求处理 void doGet(HttpServletRequestreq,HttpServletResponse res); //POST请求处理 void doPost(HttpServletRequestreq,HttpServletResponse res); //PUT请求处理 void doPut(HttpServletRequestreq,HttpServletResponse res); //DELETE请求处理 void doDelete(HttpServletRequestreq,HttpServletResponse res); 用法 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import java.util.Enumeration; import java.util.Map;public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(开始获取请求头信息);EnumerationString headerNames req.getHeaderNames();while (headerNames.hasMoreElements()){String headerName headerNames.nextElement();String headerValue req.getHeader(headerName);System.out.println(headerName headerValue);}System.out.println(请求头信息获取完毕);System.out.println(请求方式 req.getMethod());System.out.println(请求地址 req.getRequestURI());System.out.println(请求的上下文路径 req.getContextPath());System.out.println();System.out.println(开始读取请求参数);MapString, String[] parameterMap req.getParameterMap();parameterMap.forEach((k, values) - System.out.println(k Arrays.toString(values)));System.out.println(请求参数读取完毕);System.out.println();System.out.println();System.out.println();System.out.println(响应开始);resp.setContentType(text/html;charsetutf-8);PrintWriter writer resp.getWriter();writer.print(注册请求已经处理);writer.flush();writer.close();} } !-- register.jsp -- % page contentTypetext/html;charsetUTF-8 languagejava % !DOCTYPE HTML htmlheadtitle注册页面/title/headbodyform actioncreateUser methodpostdivinput typetext nameusername/divdivinput typepassword namepassword/divdivinput typesubmit value注册/div/form/body /html !-- web.xml 中添加如下配置 -- servletservlet-nameregisterServlet/servlet-nameservlet-classcom.qf.jsp.servlet.RegisterServlet/servlet-class /servletservlet-mappingservlet-nameregisterServlet/servlet-nameurl-pattern/createUser/url-pattern /servlet-mapping 测试 查看控制台信息 3.5 Servlet 交互流程 4. ServletContext 4.1 常用方法 //获取上下文路径 String getContextPath(); //获取给定相对路径对应的绝对路径 String getRealPath(String path); //获取上下文初始化参数中给定参数名对应的参数值 String getInitParameter(String parameterName); //获取上下文初始化参数中所有的参数名 EnumerationString getInitParameterNames(); //获取上下文存储的数据中给定属性名对应的属性值 Object getAttribute(String attributeName); //获取上下文存储的数据中所有的属性名 EnumerationString getAttributeNames(); //将给定的属性值使用给定的属性名存储在上下文中 void setAttribute(String attributeName, Object attributeValue); //从上下文存储的数据中将给定的属性名移出 void removeAttribute(String attributeName); 4.2 用法 配置 web.xml context-paramparam-namecharacterEncoding/param-nameparam-valueUFT-8/param-value /context-param 修改 RegisterServlet Override public void init(ServletConfig config) throws ServletException {System.out.println(开始读取上下文参数信息);ServletContext servletContext config.getServletContext();EnumerationString initParameterNames servletContext.getInitParameterNames();while (initParameterNames.hasMoreElements()){String initParameterName initParameterNames.nextElement();String initParameterValue servletContext.getInitParameter(initParameterName);System.out.println( initParameterName initParameterValue);} } 测试 查看控制台信息 第二节 MVC 1. 什么是 MVC 模型-视图-控制器MVC模式是一种非常经典的软件架构模式在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看MVC模式是一种复合模式它将多个设计模式在一种解决方案中结合起来用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中使应用程序被分成三个核心部件Model模型、View视图、Control控制器 模型模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。 视图用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。 控制器位于视图和模型中间负责接受用户的输入将输入进行解析并反馈给模型 MVC模式将它们分离以提高系统的灵活性和复用性不使用MVC模式用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离使得其具有以下优点 一个模型提供不同的多个视图表现形式也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化模型将通知有关的视图每个视图相应地刷新自己。 模型可复用。因为模型是独立于视图的所以可以把一个模型独立地移植到新的平台工作。 提高开发效率。在开发界面显示部分时仅仅需要考虑的是如何布局一个好的用户界面开发模型时仅仅要考虑的是业务逻辑和数据维护这样能使开发者专注于某一方面的开发提高开发效率。 2. JSP 中的 MVC 在 JSP 中 Servlet 扮演的是控制器 JSP 页面扮演的是视图Java Bean 扮演的是模型。 案例 将用户信息呈现在页面上 编写视图 user.jsp % page contentTypetext/html;charsetUTF-8 languagejava % html headtitle显示用户信息/title /head bodya hrefshowUserInfo显示用户信息/a /body /html 编写模型 User package com.qf.jsp.pojo;public class User {private String username;private String name;private String sex;private int age;public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex sex;}public int getAge() {return age;}public void setAge(int age) {this.age age;}Overridepublic String toString() {return User{ username username \ , name name \ , sex sex \ , age age };} } 编写控制器 UserInfoServlet package com.qf.jsp.servlet;import com.qf.jsp.pojo.User;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;public class UserInfoServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {User user new User();user.setUsername(admin);user.setName(管理员);user.setSex(男);user.setAge(20);resp.setContentType(text/html;charsetutf-8);resp.setCharacterEncoding(UTF-8);PrintWriter writer resp.getWriter();//告知视图需要展示的模型writer.print(user.toString());writer.flush();writer.close();} } 配置 web.xml servletservlet-nameuserInfoServlet/servlet-nameservlet-classcom.qf.jsp.servlet.UserInfoServlet/servlet-class /servletservlet-mappingservlet-nameuserInfoServlet/servlet-nameurl-pattern/showUserInfo/url-pattern /servlet-mapping 第三节 过滤器 1. 什么是过滤器 过滤器的概念过滤器是一个服务器端的组件可以拦截客户端的请求和响应信息并对这些信息进行过滤。 2. 过滤器体系结构 启动服务器访问 user.jsp然后测试 2.1 Filter接口 //过滤器初始化 default void init(FilterConfig filterConfig) throws ServletException { } //过滤操作与协议无关 void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException; //过滤器销毁 default void destroy() { } 2.2 FilterConfig 接口 //获取过滤器实例的名称 String getFilterName(); //获取Servlet上下文 ServletContext getServletContext(); //从过滤器初始化配置中获取给定属性名对应的属性值 String getInitParameter(String parameterName); //获取过滤器初始化配置中所有的属性名 EnumerationString getInitParameterNames(); 2.3 案例 使用过滤器完成中文乱码处理 编写过滤器 CharacterEncodingFilter package com.qf.jsp.filter;import javax.servlet.*; import java.io.IOException;public class CharacterEncodingFilter implements Filter {private String characterEncoding;Overridepublic void init(FilterConfig config) throws ServletException {System.out.println(过滤器初始化);this.characterEncoding config.getInitParameter(characterEncoding);}Overridepublic void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException, ServletException {System.out.println(过滤器过滤操作);request.setCharacterEncoding(characterEncoding);response.setCharacterEncoding(characterEncoding);//让过滤器链中的其他过滤器执行这行代码必不可少否则无法进入后面的Servlet执行chain.doFilter(request, response);}Overridepublic void destroy() {System.out.println(过滤器销毁);} } 在 web.xml 中配置过滤器 filterfilter-namecharacterEncodingFilter/filter-namefilter-classcom.qf.jsp.filter.CharacterEncodingFilter/filter-classinit-paramparam-namecharacterEncoding/param-nameparam-valueUTF-8/param-value/init-param /filterfilter-mappingfilter-namecharacterEncodingFilter/filter-name!-- * 标识通配符匹配所有--url-pattern/*/url-pattern /filter-mapping 测试 结论 2.4 HttpFilter 抽象类 //重写无协议过滤器操作调用下面支持HTTP协议请求过滤操作的方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {} //HTTP协议请求过滤操作的方法 protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {} 2.5 案例 使用过滤器完成登录超时处理 编写过滤器 package com.qf.jsp.filter;import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException;public class TimeoutFilter extends HttpFilter {Overrideprotected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {HttpSession session request.getSession();Object username session.getAttribute(username);//session中没有数据了说明session已经过期了当前的session是一个新的sessionif(username null){//首页的地址 就是上下文路径String homePageUrl request.getContextPath();if(.equalsIgnoreCase(homePageUrl)){//上下文路径为空字符串时给一条斜杠即可homePageUrl /;}response.sendRedirect(homePageUrl);} else {//让过滤器链中的其他过滤器执行这行代码必不可少否则无法进入后面的Servlet执行chain.doFilter(request, response);}} } 在 web.xml 中配置过滤器 filterfilter-nametimeoutFilter/filter-namefilter-classcom.qf.jsp.filter.TimeoutFilter/filter-class /filterfilter-mappingfilter-nametimeoutFilter/filter-name!-- * 标识通配符匹配所有--url-pattern/*/url-pattern /filter-mapping 2.6 Filter 交互流程
http://www.hkea.cn/news/14370620/

相关文章:

  • 电脑制作网站教程培训机构网站设计
  • 南京网站推广¥做下拉去118cr网页无法访问如何解决360浏览器
  • 东莞莞城网站建设公司wordpress注册完
  • 工信部网站域名备案网站开发 所有权
  • 做菠菜网站判多久食品建设网站前的市场分析
  • 站长推荐网址入口自动跳转wordpress 二维码登录
  • 哪个网站能看到医生做的全部手术阳江市房产信息网
  • html5手机网站怎么做网络运营
  • 网站系统建设申请报告整站优化 快速排名
  • 芜湖先锋网站两学一做wordpress python采集
  • 电子商务网站设计怎么做伪静态就是把网站地址
  • 国外好的设计网站有哪些广东网站定制
  • 简约网站建设公司聊石家庄seo
  • 2019年新电商法做网站宁波网络公司联系电话
  • 中小企业建站可以怎么做浙江省建设监理协会网站
  • 建设垂直网站需要哪些流程图网站建设高度
  • 网站建设静态部分总结网站建设 采集
  • 如何配置php网站做cad室内平面图的家具素材网站
  • 专门做油画交流的网站做电影网站危险吗
  • 网站建设源码是什么恶意网站是怎么实现的
  • 网站的分页效果怎么做云一网站设计
  • 贵阳企业自助建站手机wordpress怎么保存图片
  • 网站开发 教学目标老鹰主机安装Wordpress
  • 如何开发一个网站php网站开发现状都用什么打开模板
  • 建设网站的报价永久免费的移动建站平台
  • 网站建设网站软件有哪些wordpress 阿里大于鱼
  • 广西人才网官方网站提供邯郸移动网站建设
  • 河南省建设厅专业业务系统网站网页游戏排行榜奇迹
  • 柳传志 潘石屹做水果网站wordpress 搭网站
  • 义乌公司网站建设网页链接调用服务是干嘛的