自定义框架_解析请求 | 学习笔记

简介: 快速学习自定义框架_解析请求,介绍了自定义框架_解析请求系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门自定义框架_解析请求】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7330


自定义框架_解析请求

 

自定义框架解析-解析请求

将以下解析完,就会在过滤器里取有。将用户提交的请求,映射到对应的actionfor(Element element :actions ){上。

将过滤器取名为 CoreFilter。过滤器是用来实现 filter 接口的。

Document document = new SAXReader() .read(is);Element root = document. getRootElement();//处理action节点List<Element> actions=root. elements();for(Element element :actions ){Action action = new Action();
//获取action的属性值action. setName(element . attributeValue( "name"));action. setClasses (element. attributeValue("class"));

String method=element. attributeValue(" method") ;if (method!=null)

action. setMethod (method);l//处理Actіon中的结果集List<Element> results = element . elements();for(Element e:results){

过滤器中显示:

java.util.List<Element>An ordered colection (also known as a sequence). The user of this interface has precise control over

where in the list each element is inserted. The user can access elements by their integer index(position in the list), and search for elements in the list.Unlike sets, lists typically allow duplicate elements. More formally, lists typically allow pairs ofelements e1 and e2 such that e1.equals (e2), and they typically allow multiple null elements if theyallow null elements at all. It is not inconceivable that someone might wish to implement a list thatprohibits duplicates, by throwing runtime exceptions when the user attempts to insert them, but we

expect this usage to be rare.

……

过滤器是用来实现 filter 接口的。

package cn. sxt. filter;

import  javax.servlet.Filter;public class CoreFilter implements Filterk{

public void destroy() {//TODO Auto-generated method stub

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException{// TODO Auto-generated method stub

}public void init(FilterConfig arge) throws ServletException (//T//TODO Auto- generated method stub

}

import javax. servlet . FilterConfig;

import javax. servlet . ServletException; import javax. servlet . ServletRequest ;

import javax. servlet. ServletResponse;public class CoreFilter implements Filter{public void destroy() {}public void init() throws ServletException{

}public void doFilter(ServletRequest req, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {//TODO Auto- generatedmethod stub

req 改成 rq,arg1改成 rp,arg2改成 chain

import javax. servlet . FilterConfig;import javax. servlet . ServletException;import javax. servlet . ServletRequest ;import javax. servlet. ServletResponse;

12 public class CoreFilter implements Filter{public void destroy() {}public void init() throws ServletException{

}public void doFilter(ServletRequest rq, ServletResponse rp,FilterChain chain) throws IOException, ServletException {//TODO Auto- generated method stub

}

public void init(FilterConfig arge) throws ServletException {//TODO Auto- generated method stub

}

}

public void init(FilterConfig arge) throws ServletException {写入,去掉public void init() throws ServletException{

,config 未使用过。将 ServletRequest ServletResponse 全部转换。

import javax. servlet . FilterConfig;import javax. servlet . ServletException;import javax. servlet . ServletRequest ;

import javax. servlet. ServletResponse;

public class CoreFilter implements Filter{public void destroy() {}

} public void init(FilterConfig config) throws ServletException {

}
public void doFilter(ServletRequest rq, ServletResponse rp,FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest)rq;(强转)HttpServletResponse resp = (HttpServletResponse)rp;//TODO Auto- generated method stub

//第一件事:将请求映射到 action 上(分别用单独的方法处理,上面就变成第二种方法)

reqToAction(req);(注意:在实验过程中要持续测试,去了解)

//创建action对象

//将用户提交的数据设置到action的属性上

//执行action的方法

//处理结果

}

用某个类来处理。将请求映射到 action 型上,返回 action 型对象。返回空,调方法。getRequestURI0 : String-HttpServletRequestgetRequestURL0: StringBuffer-HtpServletRequest的区别是 getRequestURI0 : String HttpServletRequest可以接收后面的

接着验证是不是 action 结尾。固定结尾,或自定义扩展名,甚至没有。也可以验证只要有点就去掉。如果不是. action 结尾的,直接请求下一部的事情。

将请求映射到 action

Private Action reqToAction(HttpServletRequest req ){

String path=req.getRequestURI();

//只处理以action结尾的请求

if (path.endswith(“.action”))

Return null;

//获得请求名

String reqName=path. substring (path.lastIndexOf(“/”)+1, path.lastIndexOf(“.”))

//程序启动后解析配置文件,解析不只是解析一次,开始就要解析。在public void init(FilterConfig config) throws ServletException {

}
public void doFilter(ServletRequest rq, ServletResponse rp,间,加入ActionMapper. parser();启动值后解析文件,回车后,

public void init(FilterConfig config)I throws ServletException {try {

//程序启动后解析配置文件,只会配置一次。inter只会做一次。ActionMapper .parser();} catch (DocumentException e) {

)

return ActionMapper.actionMap.get(reqName);(根据请求名取)

}

reqToAction(req);将请求名获取到这,变成 Action targetAction= reqToAction(req);在进行测试。观察 Acton 是否对的。Action targetAction= reqToAction(req);
System.out.println(targetAction.getName()+”---class”+targetAction.getClasses());都进行测试,

发布并启动20myframework

请求locallhost:8080/framework/hello.action

This is my JSP page

HTTP Status 404- /framework/hello.actiontype Status reportmessage framework/hello.actiondescription The requested resource is not available.Apache Tomcat/7.0.62

将过滤器配置。写代码先将思路捋出,接着测试好每一步骤的结果。

<?xml version= "1.Ѳ" encoding= "UtF-8"?>web-app version="2.5"xmlns= "http://java. sun. com/xmL/ns/javaee"xmlns :xsi= "http://www. w3. org/ 2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun. com xmL/ns/javaeehttp://java.sun. com/xmL/ns/javaee/web-app_2_5.xsd"><display-name></display-name><filter><filter-name>corefilter</filter-name><filter-class>cn. sxt.filter. CoreFilter</filter-class></filter><filter-mapping><filter-name>corefilter</filter-name>

<url-pattern>*.action</ url-pattern >(不能限制用户填的东西)

<filter-mapping><welcome-file-list>

<welcome-file>index.jsp</welcome-file>

Console

信息:Starting ProtocolHandler ["ajp-apr- 8009" ]2015-8-20 11:17 :47 org. apache. catalina. startup.Catalina start
信息: Server startup in 4028 mshello---classqn. sxt. action. HelloAction

Hello 被请出,classcn 等于地方。说明已完成获取 filter。

相关文章
|
9月前
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
596 27
|
9月前
|
人工智能 自然语言处理 搜索推荐
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
ViDoRAG 是阿里巴巴通义实验室联合中国科学技术大学和上海交通大学推出的视觉文档检索增强生成框架,基于多智能体协作和动态迭代推理,显著提升复杂视觉文档的检索和生成效率。
652 8
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
|
9月前
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
409 12
|
9月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
573 3
|
12月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
368 2
|
9月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
920 29
|
9月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
391 4
|
9月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

热门文章

最新文章

推荐镜像

更多
  • DNS