不学servlet直接学Springmvc,编写servlet类的步骤

  不学servlet直接学Springmvc,编写servlet类的步骤

  Servlet和JSP是开发java Web应用的两种基本技术,Spring MVC是Spring框架下Web应用开发中使用的模块。清楚地了解从Servlet到Spring MVC逐渐简化的过程,对理解Spring MVC在Web应用开发中的作用非常有帮助。我们将从项目的目录结构中介绍这个简化的过程:

  首先,在Servlet中

  应用程序目录下是WEB-INF目录,其中包含classes子目录。Servlet类和其他Java类必须放在这个目录下。在最基础的Servlet类中,需要实现由Servlet接口定义的init(),service(),destroy()。GetServletConfig()和getServletInfo()方法,其中最基本的逻辑写在service()方法中,service()方法中最常用的方法是通过PrintWriter输出内容。

  进化1:实现Servlet接口时,必须实现所有方法,即使其中一些根本不包含任何代码。但是,GenericServlet抽象类实现了Servlet和ServletConfig接口,简化了任务。

  因此,在GenericServlet抽象类的帮助下,我们只需要重写服务方法来实现我们的任务。

  2:进化:不过GenericServlet不常用,因为HttpServlet是主角,不需要doGet()和doPost()来重写service()方法写逻辑。

  HttpServlet覆盖了GenericServlet类,将ServletRequest和ServletResponse对象分别转换为HttpServletRequest和HttpServletRespond对象,调用最常用的七个方法,如doGet()(从服务器端呈现给客户端)和doPost()(从客户端获取到从服务器端处理),无需重写服务方法。

  部署描述符是一种配置Servlet应用程序的方法。部署描述符被命名为web.xml,放在WEB-INF目录中。

  Servlet还提供了四种状态保持技术:URL重写、隐藏域、cookies和HTTPSession。其中,HTTPSession是最常用的。

  第二,JSP的加入

  3.进化:Servlet有两个缺点:1)所有用Servlet编写的HTML标签都必须包含java字符串,所以处理HTTP响应消息比较复杂;2)所有文字都是硬编码的,哪怕有一点点改动,都需要转载编译。JSP解决了上述问题,与Servlet一起使用。

  从本质上讲,JSP是一个Servlet,但是它不需要编译。JSP页面是一个带有。jsp扩展。在第一次请求之后,一个简单的JSP页面被翻译成(JSP name) _jsp的Servlet。翻译完成后,Servlet可以看到:_jspInit()、_ jspsearch()、_jspService()实际上是对应Servlet的。

  放在WEB-INF文件夹中的内容不能通过浏览器的输入地址直接访问,但是WEB-INF文件夹外的内容可以访问,添加新的JSP页面后不需要重启JSP/Servlet容器(比如tomcat)。

  解耦1:使用标准JSP访问和操作JavaBean是将展现(HTML)和业务实现(Java代码)分离的第一步。

  注释(%)-内容-%,指令(%)@指令名%,脚本(%script%),表达式(%)=赋值结果%,声明(%)!声明%),action (jsp:useBean/)。

  进化4:JSP中的EL可以轻松访问应用数据,这样JSP页面就不需要任何声明、表达式和脚本。

  EL表达式${expression}和值[]和。接线员。

  进化5: JSP标准标签库(JSTL)在EL的基础上进一步解决了遍历Map、set、条件测试、XML处理、数据库操作访问等问题。

  使用JSTL需要taglib指令:

  %@个标记库uri="uri" prefix="prefix" %

  JSTL标签类型:声明赋值、条件判断、循环遍历、格式化、函数(主要是字符串函数)

  进化6: JSP标准标签库(JSTL)提供了一些可以解决常见问题的标签,但是对于一些非常常见的问题,需要扩展javax.servlet.jsp.tagetx包中的成员来实现自定义标签。

  自定义标签的实现称为标签处理器,而SimpleTag处理器是指继承了SimpleTag实现的经典自定义标签。经典的标记处理器需要实现Tag、IterationTag和BodyTag接口,或者扩展TagSupport和BodyTagSupport。需要实现简单的标签处理器。

  在构建标记处理器时,构建目录中必须有两个文件,Servlet API和JSP API(servlet-api.jar和jsp-api.jar)。自定义标记由组件处理器(WEB-INF/classes)和标记描述符(。WEB-INF)文件中的tld。您还需要taglib指令来使用自定义标记。

  您可以将定制的标记处理器和标记描述符打包到jar包中,并指定绝对URI,以便可以像JSTL一样发布。

  进化7:编写定制标签是一件单调乏味的小事。需要编写和变异一个标签处理类,并在标签库中描述。通过标记文件,您可以定制标记,而无需区分标记处理类和标记库描述文件。标签文件在使用前不需要编译或描述。

  标签不需要提前编译,只需要JSP语法。标记文件包含指令、脚本、EL、操作元素和自定义标记。标记文件的后缀是tag和tagx,可以包含其他资源。其他文件包含的标记文件应该以tagf作为后缀。

  标记文件必须放在路径的WEB-INF/tags目录中才能生效。像标记处理器一样,标记文件也可以打包成jar文件。

  解耦2: Servlet为事件监控提供了一系列事件和借口,上层servlet/JSP应用可以调用这些API进行事件驱动开发。

  监听器继承自java.util.Event对象,监听器接口可以分为ServletContext、HttpSession和ServletRequest。也就是说,一组动作的监听器的接口。编写监听器只需要编写一个java类实现相应的监听器接口,然后通过@WebListener注释或者在部署描述文档中添加监听器元素来注册即可。

  进化8:使用Filter拦截Request的请求,在用户请求访问资源之前处理ServletRequest和ServletResponse,可以实现日志记录、加密解密、会话检查和镜像文件保护。

  Filter的实现需要实现javax.servlet.Filter接口、init()、doFilter()、destroy()方法。Filter的配置可以通过@WebFilter或者部署描述中的Filter元素进行配置。过滤器的使用需要考虑过滤器链的实现顺序和规则。在部署描述符中,首先执行第一个配置。

  进化9:装饰请求和响应实现装饰器模式。

  演进10: Servlet或过滤器占据了处理请求的地方。如果任务需要很长时间才能完成,当用户的并发请求超过县树时,容器中将没有可用的线程。Servlet超时用于处理异步请求和释放等待完成的线程。

  Evolution 11:虽然可以通过注释进行配置,但是当需要更详细的配置时,仍然需要部署描述符。部署描述符必须命名为web.xml并位于WEB-INF目录中,Java类必须位于WEB-INF/classes目录中,Java类库必须位于WEB-INF/lib目录中。的所有应用程序资源必须用打包到JAR文件中。战争后缀。

  进化12: WebFragment可以在现有的web应用中部署插件和框架。

  第三,Spring MVC的实现

  进化13:servlet的动态加载可以在不重启web应用的情况下添加新的web对象。Servlet容器加载器可以将应用程序发布为插件,而无需修改部署描述,这对于框架的使用尤其有用。

  ServletContext接口中提供的(创建、注册、使用)(过滤器、监听器、Servlet)方法。

  Initializer库是一个插件框架,有两个资源,MyServletContainerInitializer类和javax . servlet container initializer的元文件,这个元文件必须放在WEB-INF/services目录下,这个元文件只有一行:initializer . my servlet container initializer的实现类名。

  Evolution 13: Spring作为开源的轻量级企业应用开发框架,提供了依赖注入方法的实现。依赖注入是代码可测试性的一种解决方案。

  简单来说,有两个组件A和B,A依赖于B,假设A是一个类,另一个方法使用B,那么A必须先获取组件B的实例引用,Spring的依赖注入会先创建B的一个实例,然后是A的一个实例,再将B注入A的一个实例。

  Spring XML的配置写在spring-config.xml文件中。配置文件可以是一个文件,也可以分成多个文件,以支持模块化配置。可以通过主配置文件读取多个配置文件,也可以在其他配置文件中读取主配置文件。

  Spring控件反转容器可以通过构造函数或setter方法创建。

  解耦3: Spring MVC模式实现了Web应用开发的model 2模式。

  MVC模式的应用包括三个部分:模型、视图和控制器。负责视图应用程序的显示。模型封装了应用程序数据和业务逻辑,控制器负责接收用户输入、更改模型和调整视图的显示。

  Spring MVC使用Servlet作为控制器,Structs2使用Filter作为控制器。他们大多使用JSP页面作为视图。该模型采用POJO(普通旧Java对象)。实际上,JavaBean将用于保存模型的状态,业务逻辑将放在一个Action类中。JavaBean必须有一个无参数的构造函数,通过getter/setter访问参数,并支持持久性。

  的基本Spring MVC项目结构包括:1)一个product类,作为Product的域对象,由于需要存储在HttpSession中,需要实现java.io.Serializable接口。2)product form类,封装了HTML表单的输入项。ProductForm类类似于Product类,所以可以起到不向其他层公开servlet层中的对象ServletRequest的作用。同时,当数据验证失败时,将使用form对象保存并显示用户在原表单上的输入。3)一个ControolerServlet类作为控制器。

  两个JSP页面作为视图。

  解耦4:解耦控制器代码。如果所有的业务逻辑代码都写在Servlet控制器中,这个Servlet类会随着应用复杂度的增加而扩展,业务逻辑代码要提取到一个独立的控制器类中。

  InputProductController类和SaveProductController类都实现了控制器接口,使得控制器Servlet更加专注,就像一个调度器,而不是一个控制器,也就是用DispatcherServlet来调度控制器。

  进化14:当Web应用程序执行动作时,它需要检查输入。程序化检查通过编码验证用户的输入,并声明性地提供包含教研规则的XML文档或属性文件。

  进化15:应用MVC时,可以调用控制器类中的后端业务逻辑。通常,后一部分封装了一个复杂的逻辑服务类,其中可以实例化一个DAO类来访问数据库。在Spring环境中,服务对象可以自动注入控制器实例,而DAO对象可以自动注入服务对象。

  四。Spring MVC的优势

  采用Spring MVC的优点:1)无需编写DispatcherServlet;2)基于XML的文件配置不需要重新编译;3)可以实例化控制器和bean可以根据用户的输入进行构造;4)能自动绑定用户输入,正确转换数据类型;5)可以检查用户的输入,重定向回输入表单,支持程序化检查和声明性检查;6)作为Spring框架的一部分,可以实现Spring提供的其他功能;7)支持国际化和本地化8)支持多视图技术(JSP、FreeMarker、Velocity)。

  进化16: Spring MVC自带了一个开箱即用的Dispatcher Servlet。并提供控制器接口和公开handleRequest方法。

  要使用这个Servlet,您需要在部署描述符中配置它,并且您将在应用程序的WEB-INF目录中查找配置文件servletName-servlet.xml。控制器需要实现org . spring framework . web . servlet . MVC . Controller,控制器接口的实现类函数处理单个动作。

  同时还需要添加Spring MVC所需的JAR文件。

  进化17: Spring MVC使用ViewResolver来解析视图。您可以通过在配置文件中定义视图冲突解决程序来配置尝试的冲突解决程序。

  Springmvc-config.xml实现了Dispatcher Servlet和ViewResolver的配置。它还需要在部署描述符中进行配置。

  进化18:使用基于注释的控制器配置方法可以使一个控制器类处理多个动作。

  @Controller annotation type用于表示Spring类的实例是一个控制器;

  @RequestMapping批注可以为控制器内部的每个动作开发相应的处理方法;

  @Autowired和@Service注释可以向控制器注入依赖关系;

  @ModelAttribute批注可以实现使用Spring MVC每次调用请求处理方法生成的模型类型实例。

  进化19:数据绑定是将用户的输入绑定到域模型的特性,不再需要表单bean之类的表单bean。表单的标记库将有助于这项工作。

  需要声明taglib指令才能使用表单标记库。

  进化20:由于Spring本身的数据绑定比较混乱,需要通过Converter和Formatter来完成数据绑定。

  Converter是一个通用组件,可以在应用程序的任何一层使用,而Formatter是专门为Web层设计的。

  实现了所需的转换器接口和格式化程序接口。还需要在springmvc-config.xml中注册

  进化21:转换器和格式化程序只作用于字段级,验证程序可以作用于对象级。在调用控制器期间,一个或多个格式化程序视图将转换字段值,一旦格式化成功,验证程序将介入。

  在Spring MVC中有两种方法来验证用户输入:Spring自己的验证框架和JSR 303的实现。前者需要实现验证器接口,调用reject方法添加错误;后者是通过标注给对象属性添加约束。这样的验证器不需要显式注册,但是如果想从属性文件中获取错误信息,可以在springmvc-config.xml中添加它

  Evolution 22: Spring MVC提供国际和本地支持,需要将文本元文件隔离到属性文件中。

  每个语言区域的文本元素存储在一个独立的属性文件中,每个文件包含键/值对,每个键代表一个特定的语言区域对象。并在springmvc-config.xml中配置它.

  版权归作者所有:来自博客作者为温度原创作品。转载请联系作者获得授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: