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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习自定义框架_解析请求,介绍了自定义框架_解析请求系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【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。

相关文章
|
19天前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
99 0
|
10天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
28 3
|
17天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
75 3
|
19天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
100 2
|
23天前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
|
14天前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
52 0
|
14天前
|
分布式计算 Java 应用服务中间件
NettyIO框架的深度技术解析与实战
【10月更文挑战第13天】Netty是一个异步事件驱动的网络应用程序框架,由JBOSS提供,现已成为Github上的独立项目。
29 0
|
21天前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
23 0
|
19天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
39 0
|
19天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
29 0

推荐镜像

更多