相对路径&绝对路径 例:

粗浅理解:

1)绝对路径:带有访问协议的路径,就是带上http访问协议

2)相对路径:

①以带斜杠开头的相对路径:

 A)前台相对路径:以web服务器的根路径为参照路径,比如在jsp、HTML中写的路径,这些页面都是由浏览                                      器进行解析的。例:http://127.0.0.1:8080/

 B)后台相对路径:以web应用的路径为参照路径,比如在xml、java文件中写的路径,这些页面都是由服务器                                    进行解析的。例:http://127.0.0.1:8080/项目名/

 ②以不带斜杠开头的相对路径:部分前后台军以当前路路径为参照路径,这个当前路径可以理解为浏览器地址栏                              中的路径而不是在项目中的路径。

简单小例子说明一个浏览器地址栏中,路径逐一递增的解决方案:

表单登录界面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
  <%@taglib uri="/struts-tags" prefix="s" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>My First Struts2 Project</title> 8 </head> 9 <body>

     <!-- 用ognl表达式将Action中的fieldError中的自定义显示内容展现在页面 -->
     <s:fielderror/>

10 <form action="validate/login_validate.action" method="post">
11         用户名<input type="text" name="name"><br>
12         手机号<input type="text" name="mobile"><br>
13         <input type="submit" value="登录">
14 </form>
15 </body>
16 </html>

Action方法进行数据验证:

 1 package com.bjyinfu.struts.actions;
 2 
 3 import java.util.regex.Pattern;
 4 
 5 import com.opensymphony.xwork2.ActionSupport;
 6 
 7 public class LoginAction4 extends ActionSupport {
 8 
 9     private String mobile;
10     private String name;
11     public String getMobile() {
12         return mobile;
13     }
14     public void setMobile(String mobile) {
15         this.mobile = mobile;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String execute(){
24         return "success";
25     }
26     @Override
27     public void validate() {
28         //等于null是为了防止越过表单方法问
29         if(name==null || "".equals(name.trim())){
30             //底层有个集合叫fieldErrors.size()>0,说明有验证失败的信息,此时会自动跳转到input视图
31             this.addFieldError("name", "用户名不能为空");
32         }
33         if(mobile==null || "".equals(mobile.trim())){
34             this.addFieldError("mobile", "手机号不能为空");
35         }else if(!Pattern.matches("^1[34578]\d{9}", mobile)){
36             this.addFieldError("mobile", "手机号不符合规定");
37         }
38     }
39 }

将Action方法注册到struts2中:(当输入数据符合规范的时候为“success”,跳转到welcome4.jsp页面上,当输入数据不符合规范的时候为“input”,跳转到login4.jsp登录界面,第二个跳转是struts2底层ActionSupport进行封装的,addFieldError("","")方法底层有个集合叫fieldErrors.size()>0,说明有验证失败的信息,此时会自动跳转到input视图)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7     <package name="validate" namespace="/validate" extends="struts-default">
 8         <action name="login_*" class="com.bjyinfu.struts.actions.LoginAction4">
 9             <result name="success">/welcome4.jsp</result>
10             <result name="input">/login4.jsp</result>
11         </action>
12     </package>
13 </struts>

展示页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     <%@taglib uri="/struts-tags" prefix="s" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>My First Struts2 Project</title>
 9 </head>
10 <body>
11 <s:debug></s:debug><br>
12     <h1>数据验证的执行</h1>
13 </body>
14 </html>

下面故意将数据输入错误,会出现这种情况:

第一次点击登录:

相对路径&绝对路径
例:

第二次点击登录:

相对路径&绝对路径
例:

第三次点击登录:

相对路径&绝对路径
例:

结:

a:获取项目名:String path = request.getContextPath();

  此示例中的输出<%=path %>  结果:/AjaxPostProject

b:EL表达式中也可以获取项目名:${pageContext.request.contextPath }  

  此示例中输出 m=${pageContext.request.contextPath }  结果:/AjaxPostProject

c:获取带项目名的请求路径:

  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

  此示例中输出 <%=basePath %>  结果:http://127.0.0.1:8080/AjaxPostProject/

三种解决方案:

1:所以表单中的action可以写成action="<%=path %>/validate/login_validate.action"此为带斜杠的前段相对路径

2:action="${pageContext.request.contextPath }/validate/login_validate.action"此为带斜杠的前段相对路径

3:action="<%=basePath %>validate/login_validate.action"此为绝对路径