• 相对路径&绝对路径


    粗浅理解:

    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"此为绝对路径

  • 相关阅读:
    鼠标移入移出事件改变图片的分辨率
    Qt 5.2.0 和 VS 2012集成
    java int and string convert
    判断密码强度
    MySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.解决办法
    java中byte转换int时为何与0xff进行与运算
    java排序练习
    小数的取舍
    控制台输入一个数组,然后倒序输出
    非托管资源的释放
  • 原文地址:https://www.cnblogs.com/lubolin/p/7268822.html
Copyright © 2020-2023  润新知