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

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

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

相关文章
|
11天前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
|
11天前
|
NoSQL 大数据 数据处理
MongoDB聚合框架与复杂查询优化:技术深度解析
【4月更文挑战第30天】本文深入探讨了MongoDB的聚合框架和复杂查询优化技术。聚合框架包含$match、$group、$sort和$project阶段,用于数据处理和分析,提供灵活性和高性能。优化查询涉及创建合适索引、使用聚合框架、简化查询语句、限制返回结果数、避免跨分片查询、只查询所需字段及使用$inc操作符。理解这些技术有助于提升MongoDB在大数据和复杂查询场景下的性能。
|
11天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的HTTP请求的重要性和详细过程
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
12天前
|
运维 网络协议 安全
Serverless 应用引擎产品使用之阿里云函数计算中添加自定义域名进行域名DNS验证如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
20 1
|
13天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
14天前
|
敏捷开发 开发框架 持续交付
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
|
15天前
|
SQL 安全 前端开发
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
|
3天前
|
Java Android开发
Android12 双击power键启动相机源码解析
Android12 双击power键启动相机源码解析
12 0
|
4天前
|
分布式计算 Java API
Java8 Lambda实现源码解析
Java8的lambda应该大家都比较熟悉了,本文主要从源码层面探讨一下lambda的设计和实现。
|
5天前
|
算法 Java Go
ArrayList源码解析
ArrayList源码解析
9 1

推荐镜像

更多