相对路径&绝对路径

时间:2024-04-29 10:17:19

粗浅理解:

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

2)相对路径:

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

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

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

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

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

例:

表单登录界面:

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

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

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

Action方法进行数据验证:

 package com.bjyinfu.struts.actions;

 import java.util.regex.Pattern;

 import com.opensymphony.xwork2.ActionSupport;

 public class LoginAction4 extends ActionSupport {

     private String mobile;
private String name;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute(){
return "success";
}
@Override
public void validate() {
//等于null是为了防止越过表单方法问
if(name==null || "".equals(name.trim())){
//底层有个集合叫fieldErrors.size()>0,说明有验证失败的信息,此时会自动跳转到input视图
this.addFieldError("name", "用户名不能为空");
}
if(mobile==null || "".equals(mobile.trim())){
this.addFieldError("mobile", "手机号不能为空");
}else if(!Pattern.matches("^1[34578]\\d{9}", mobile)){
this.addFieldError("mobile", "手机号不符合规定");
}
}
}

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

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

展示页面:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My First Struts2 Project</title>
</head>
<body>
<s:debug></s:debug><br>
<h1>数据验证的执行</h1>
</body>
</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"此为绝对路径