PC并重回不一样页面包车型地铁实例

java后台决断客户端是手提式有线电话机/PC并再次回到不一致页面包车型客车实例,java后台

其一代码其实不是由本人自己开掘的,而是在翻看店肆项目时无意间开采,认为很实用所以拿出去我们大快朵颐。

框架:Struts2+spring+ibatis,

第一完成是依据Http央浼头Header中的 "User-Agent" 来形成,好了, 废话相当少说平素上代码。

Action中:

public String execute() { 
    HttpServletRequest request = ServletActionContext.getRequest(); 
    boolean isMoblie = JudgeIsMoblie(request); 
    if(isMoblie){ 
      return "phone"; 
    } 
    return "pc"; 
  } 

  public boolean JudgeIsMoblie(HttpServletRequest request) { 
    boolean isMoblie = false; 
    String[] mobileAgents = { "iphone", "android", "phone", "mobile", 
        "wap", "netfront", "java", "opera mobi", "opera mini", "ucweb", 
        "windows ce", "symbian", "series", "webos", "sony", 
        "blackberry", "dopod", "nokia", "samsung", "palmsource", "xda", 
        "pieplus", "meizu", "midp", "cldc", "motorola", "foma", 
        "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", 
        "huawei", "novarra", "coolpad", "webos", "techfaith", 
        "palmsource", "alcatel", "amoi", "ktouch", "nexian", 
        "ericsson", "philips", "sagem", "wellcom", "bunjalloo", "maui", 
        "smartphone", "iemobile", "spice", "bird", "zte-", "longcos", 
        "pantech", "gionee", "portalmmm", "jig browser", "hiptop", 
        "benq", "haier", "^lct", "320x320", "240x320", "176x220", 
        "w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", 
        "bird", "blac", "blaz", "brew", "cell", "cldc", "cmd-", "dang", 
        "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs", "kddi", 
        "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", 
        "midp", "mits", "mmef", "mobi", "mot-", "moto", "mwbp", "nec-", 
        "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", 
        "port", "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", 
        "send", "seri", "sgh-", "shar", "sie-", "siem", "smal", "smar", 
        "sony", "sph-", "symb", "t-mo", "teli", "tim-", /*"tosh",*/ "tsm-", 
        "upg1", "upsi", "vk-v", "voda", "wap-", "wapa", "wapi", "wapp", 
        "wapr", "webc", "winw", "winw", "xda", "xda-", 
        "Googlebot-Mobile" }; 
    if (request.getHeader("User-Agent") != null) { 
      for (String mobileAgent : mobileAgents) { 
        //这里本宝宝表示不怎么了解它的内部原理,但是知道个大概意思就得了。 
        if (request.getHeader("User-Agent").toLowerCase() 
            .indexOf(mobileAgent) >= 0) { 
          isMoblie = true; 
          break; 
        } 
      } 
    } 
    return isMoblie; 
  } 

Struts2

<action name="name" class="你自己的action类"> 
      <result name="pc">download/main.jsp</result> 
      <result name="phone">download/productPH.jsp</result> 
    </action> 

好了,代码就只是这么多,木有了木有了。。。 是否感觉异常粗略的说,

就算如此不是自个儿写出来的,可是见到这几个代码,也可能有一种得到的,其实过多装置都以含有在诉求头中的,因为不论是是什么浏览器什么设备,它要因此http去调用一个央浼,那么它就必将是有http公约,只要驾驭http左券,那么啥事都好办(表示本屌近期不懂http合同,而后努力学习学习,再来吹捧)~~

如上那篇java后台决断客商端是手提式有线电电话机/PC并回到不相同页面包车型客车实例就是我分享给大家的全体内容了,希望能给我们一个参照,也冀望大家多多指教帮客之家。

这几个代码其实不是由笔者本人开采的,而是在翻看集团项目时无意间开掘,认为...

1.第一个struts2项目

参照他事他说加以考察官方配置

github地址:https://github.com/unbelievableme/maven_hibernate-struts-spring/tree/master/struts2/first

建议:仿效官方配置操作一回,因为本领不断更新,分裂版本的struts的类只怕不一样,老版本的三个类恐怕在新本子中合拢了二个

2.struts2做事流程原理

2.1步骤

1.创建Web Project

2.导入Jar(使用maven调控以来,配置pom.xml)

<!--pom配置见http://www.cnblogs.com/kundeg/p/7152846.html -->

3.在web.xml配置struts2的过滤器

<filter>
       <filter-name>struts2</filter-name>
<!--该类会因struts版本不同而变化,在struts2.0-2.1.2为org.apache.struts2.dispatcher.FilterDispatcher,在之后版本为下述-->       
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>struts2</filter-name>
       <!-- 所有的url都会被url过滤器解析 -->
       <url-pattern>/*</url-pattern>
    </filter-mapping>

 

4.创建Struts核心xml文件

5.创设action类继承与ActionSupport

6.配置struts.xml

<!--详细配置及介绍见:http://www.cnblogs.com/kundeg/p/7188699.html-->

2.2流程

1、客户端浏览器发出HTTP央浼

2、该需要被StrutsPrepareAndExecuteFilter接收

3、根据struts.xml配置,找到供给调用的Action类和章程, 并通过IoC格局,将值注入给Aciton

4、Action调用业务逻辑组件处总管情逻辑

5、Action实施达成,依据struts.xml中的配置找到相应的归来结果result,并跳转到相应页面

6、重回HTTP响应到顾客端浏览器

2.3原理

图片 1

 

 注意:在struts2.1.2后FilterDispatcher被轮换为了StrutsPrepareAndExecuteFilter

1、 客商端开端化二个针对Servlet容器(比如汤姆cat)的呼吁

2、 这些诉求经过一名目许多的过滤器(Filter)(那么些过滤器中有贰个叫做ActionContextCleanUp的可选过滤器,这些过滤器对于Struts2和任何框架的合一很有扶助,比如:SiteMesh Plugin)

3、 接着被StrutsPrepareAndExecuteFilter(能够阻止央浼对象ServletRequest和ServletResponse结合Struts.xml创设独立于servlet的ActionContxt)调用,StrutsPrepareAndExecuteFilter询问ActionMapper(含有struts.xml中Action配置的name,namespce,result等的HashMap)来支配这一个请是还是不是要求调用某些Action

4、 假使ActionMapper决定要求调用有个别Action,StrutsPrepareAndExecuteFilter把供给的处理交给ActionProxy

5、 ActionProxy通过Configuration Manager询问框架的布局文件struts.xml,找到必要调用的Action类

6、 ActionProxy创立一个ActionInvocation的实例。

7、 ActionInvocation实例使用命超级模特式来调用,在调用Action的进程前后,涉及到有关拦截器(Intercepter)的调用。

8、 一旦Action实践完毕,ActionInvocation担任依照struts.xml中的配置找到相应的回到结果。重临结果经常是(但不延续,也也许是别的的叁个Action链)二个索要被代表的JSP也许FreeMarker的模版。在代表的历程中得以行使Struts2 框架中承袭的价签。在那一个进度中供给涉及到ActionMapper

3.拦截器介绍

3.1Interceptor基础介绍

拦截器基础介绍以及与过滤器的相比较见StrutsPreparedAndExcuteFilter与Interceptor

3.2 计时拦截器实例

 TimerAction.java

public class TimerAction extends ActionSupport{
  public String excute(){
      //下面为耗时代码段
      int sum = 0;
      for(int i =0;i<10000;i++){
          sum+=i;
      }
      return SUCCESS;
  }
}

TimerInterceptor.java

public class TimerInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation invocation) throws Exception {
     //1.执行action之前
    long start = System.currentTimeMillis();
    //2.执行下一个拦截器,如果已经是最后一个拦截器,则执行目标Aciton
    String result = invocation.invoke();
    //3.执行Action之后
    long end = System.currentTimeMillis();
    System.out.println("执行Action花费时间:"+(end-start+"ms"));
    return result;
}
}

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />  
    <package name="/" extends="struts-default" strict-method-invocation="false">
             <!--注册拦截器-->
     <interceptors>
     <interceptor name="myTimer" class="Interceptor.TimerInterceptor"> </interceptor>
     </interceptors>
        <action name="TimerAction" method="excute" class="action.TimerAction"> 
            <result name="success">/success.jsp</result>
            <!-- 引用拦截器 -->
            <interceptor-ref name="myTimer"></interceptor-ref>
        </action>
    </package>
</struts>

品种路径(maven管理):

图片 2

4.深入struts

4.1 Action寻找顺序

第一步:决断package是不是存在,如:path1/path2/path3/

其次步:倘使package存在,则判别该package中action是或不是存在,假诺不设有则去默许namespace的package里面搜索action

其三步:假如package空头支票,检查上一流路径的package是不是留存(直到暗中认可namespace),重复第一步 第三步:若无则报错

4.2 动态方法调用

目标:一个action对应两个哀告的拍卖,幸免action过多

比喻:下述为类为action.helloworld的action,该action能够管理央求../add.action和../update.action,上边介绍动态调用的两种布满方式

public class helloworld extends ActionSupport{
public String add(){
    /*  */
    return SUCCESS;
}
public String update(){
    /*  */
    return SUCCESS;
}
}

4.2.1 method方法

在struts.xml中的配置如下:

<struts>
   <package name="defalut" extends="struts-default">
        <action name="addAction" class="action.helloworld" method="add"> 
            <result name="success">/add.jsp</result>
        </action>
        <action name="updateAction" class="action.helloworld" method="update">
            <result name="success">/update.jsp</result>
        </action>
    </package>
</struts>

   访谈格局:

   短处:当贰个action中艺术过多的时候啊,配置过于冗余

4.4.2 咋舌号办法

修改entity为:   

public class helloworld extends ActionSupport{
public String add(){
    /*  */
    return "add";
}
public String update(){
    /*  */
    return "update";
}
}

 在struts.xml中陈设如下

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />  
    <package name="default" extends="struts-default" strict-method-invocation="false">
        <action name="helloworldAction" class="action.helloworld"> 
<!--result的name属性值和action.helloworld类中方法处理的返回值相同-->
            <result name="add">/add.jsp</result>
            <result name="update">/update.jsp</result>
        </action>
    </package>
</struts>

  访谈格局:)

4.4.3 通配符方式(推荐使用)

在struts.xml中安顿如下

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />  
    <package name="default" extends="struts-default" strict-method-invocation="false">
<!--{1}表示*的内容-->
        <action name="helloworld_*" method="{1}" class="action.helloworld"> 
            <result name="success">/{1}.jsp</result>
        </action>
    </package>
</struts>

  也许正如:

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />  
    <package name="default" extends="struts-default" strict-method-invocation="false">
<!--{1}代表第一个*的内容,{2}代表第二个*的内容-->
        <action name="*_*" method="{2}" class="action.{1}"> 
            <result name="success">/{2}.jsp</result>
        </action>
    </package>
</struts>

  访问方式:

4.3 钦命多个布局文件

目标:为了消除在struts.xml中布置过多,也许为了在不一样的xml中布局达成更加好的分类

渴求:七个xml配置都无法不遵守struts的dtd标准,同时要小心编码情势要一致

举例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
   <package name="/" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
        <action name="hello" class="action.hello" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>
    </package>
</struts>

 能够用下述八个xml文件来代表:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <include file="helloworld.xml"></include>
</struts>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="/" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
        <action name="hello" class="action.hello" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>
    </package>
   </struts>

4.4 暗中认可Action(首要斟酌通配符配置格局)

目标:为了改良客商体验,消除http404和500谬误(无法完全化解)

举例 :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />  
    <package name="/" extends="struts-default" strict-method-invocation="false">
    <default-action-ref name="index"></default-action-ref>
       <action name="index">
       <result>/error.jsp</result>
    </action>
        <action name="helloworld_*" method="{1}" class="action.helloworld"> 
            <result name="success">/{1}.jsp</result>
        </action>
    </package>
</struts>

细心:非默许action的name属性值一定不要以*为初叶进行通配。否则错误的action地址不能够由暗许action实行响应管理,会进去以*开头的action。

缺欠:但哪怕是不以*起来的action也存在与它特出的但工程中不设有的action地址,举个例子在上述配置的基本功上访谈

图片 3

 

不留余地:通过method配置能够完全缓和404或500荒唐,惊叹号形式足够(不再详述)

4.4 struts后缀 

目标:为了看起来xx,例如访谈xx.html很轻松认为静态页面,蒙蔽了精神:经过action管理跳转后的jsp页面

配备情势(二种):

1.在struts.xml中加上

<constant name="struts.action.extension" value="action,do,struts2"></constan

2.在struts.properties中加上

struts.action.extension=action,do,struts2

3.在web.xml中加上

  <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!--添加内容-->
  <init-param>
  <param-name>struts.action.extension</param-name>
  <param-value>do,action,strtus2</param-value>
</init-param>
    </filter>
    <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

4.5 struts传参

4.5.1 直接用Action属性

下列代码依次为:前端jsp,后台action(省略struts.xml配置)

图片 4图片 5

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="./login.action" method="post">
用户名:<input name="username" type="text"><br>
密码:   <input name="password" type="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>

View Code

图片 6图片 7

public class User extends ActionSupport{
 private String username;

 public String excute(){
     System.out.println(username);
     return SUCCESS;
 }

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;

}
}

View Code

4.5.2 DomainModel

下列代码依次为:前端jsp,后台Action,实体类model

图片 8图片 9

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="./login.action" method="post">
<!-- 要指明那个对象的object.xxx -->
用户名:<input name="user.username" type="text"><br>
密码:   <input name="user.password" type="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>

View Code

图片 10图片 11

public class loginAction extends ActionSupport{
private User user;
public String excute(){
    System.out.println(user.getUsername());
    return SUCCESS;
}
public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}

}

View Code

图片 12图片 13

public class User extends ActionSupport{
 private String username;
 private String password;
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
}

View Code

4.5.3 ModelDriven

同上

图片 14图片 15

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="./login.action" method="post">
用户名:<input name="username" type="text"><br>
密码:   <input name="password" type="password"><br>
<!-- 为后台list传参 -->
爱好 1:  <input name="hobby[0]" type="text"><br>
爱好 2:   <input name="hobby[1]" type="text"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>

View Code

图片 16图片 17

public class loginAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String excute(){
    System.out.println(user.getUsername());
    System.out.println(user.getHobby().get(0));
    System.out.println(user.getHobby().get(1));
    return SUCCESS;
}
 public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }
}

View Code

图片 18图片 19

public class User extends ActionSupport{
 private String username;
 private String password;
 private List<String> hobby;
public List<String> getHobby() {
    return hobby;
}
public void setHobby(List<String> hobby) {
    this.hobby = hobby;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
}

View Code

4.6 result

4.6.1Action中多种内置属性(com.opensymphony.xwork2.Action)

  1. SUCCESS Action正确的实施到位,重返相应的视图,success是name属性的默许值。

  2. NONE 表示Action正确的施行到位,但并不回去任何事视图。

  3. ERROLX570 代表Action实行失效,再次回到错误管理视图。

  4. LOGIN Action因为客户并未有登入的案由并未有科学施行,将重返该登陆视图,供给客户张开登陆验证

  5. INPUT Action的举行,需求此前端分界面获取参数,INPUT正是意味那个参数输入分界面,平时在选用中,会对这几个参数进行验证,借使表明未有经过,将活动回到该视图。

专一:内置属性的野趣是说能够直接return,不须要充足引号,内置属性能够平价标记与认证,除了这么些之外action在实践进度中或然里面return内置属性举行跳转,下述Input实例证实了那一点。

4.6.2 Input实例

代码(依次为前端jsp,后台action,实体类entity,struts.xml):

图片 20图片 21

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="./login.action" method="post">
用户名:<input name="username" type="text"><br>
密码:   <input name="password" type="password"><br>
<!-- 为后台list传参 -->
爱好 1:  <input name="hobby[0]" type="text"><br>
爱好 2:   <input name="hobby[1]" type="text"><br>
年龄:<input name="age" type="text"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>

View Code

图片 22图片 23

public class loginAction extends ActionSupport implements ModelDriven<User> {
    private User user = new User();

    public String excute() {
        System.out.println(user.getUsername());
        System.out.println(user.getHobby().get(0));
        System.out.println(user.getHobby().get(1));
        System.out.println(user.getAge());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }

    public void validate() {
//如果不显式添加return INPUT,下述代码段必须放在validat函数内
       if(user.getUsername()==null||"".equals(user.getUsername())){
            this.addFieldError("username", "用户名不能为空");
       }
    }
}

View Code

图片 24图片 25

public class User extends ActionSupport{
 private String username;
 private String password;
 private int age;
 private List<String> hobby;
public List<String> getHobby() {
    return hobby;
}
public void setHobby(List<String> hobby) {
    this.hobby = hobby;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
}

View Code

图片 26图片 27

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="/" extends="struts-default" strict-method-invocation="false">
        <action name="login" method="excute" class="action.loginAction"> 
            <result name="success">/success.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
</struts>

View Code

测试:

 图片 28           图片 29       图片 30

                      图一                                                               图二                                                       图三

1.图一得以经过action验证重临success,跳转到success.jsp页面

2.图二不得以经过action验证,重回login.jsp页面,因为前端传入的age属性为String类型与后台age的int类型不符,就算没有出示决断,但系统会自行检查并return Input

3.图三不得以由此action验证,再次回到login.jsp页面,因为前端的username为空后,台有关于username的推断。

本质:

Action类的父类ActionSupport中有一个采撷错误信息的器皿Map,错误音讯是称呼田野(field)Name和描述消息errorMessage的键值对,只要该Map中有值表示校验不通过,再次来到INPUT,系统能够自动addFileError("",""),也得以手动增加

4.6.3 result-type属性(chain,redirect,dispatcher)

   type的私下认可值为dispatcher(乞求转载),别的常用见的有八个:chain,redirect,plaintext。

1、chain:将action和别的一个action链接起来,result属性取action名字只是不要action后缀

 <package name="students" namespace="/students" extends="struts-default" strict-method-invocation="false">
        <action name="*_*" method="{2}" class="action.{1}Action">
        <result name="Students_query_success">/students/Students_query_success.jsp</result>
        <!-- chain相当于内部转发,下述实例去执行action.StudentsAction的query方法 -->
        <result name="delete_success" type="chain">Students_query</result>
        </action>
    </package>

2、redirect:重定向(重新发起三遍呼吁,原来的呼吁数据会丢弃)

3、plaintext:重回网页源代码

4、stream:重返inputstream用于文书下载

小心:chain和dispatcher都属于服务器内部转发,那个转账暗许不通过filter(即转向的action诉求将不也许响应)

原因:filter暗许过滤来自顾客端的相符url-pattern的央求而里边转载不在此规模内

化解:由此选择那个type须求在web.xml中加进布署(如下)。

 <filter-mapping>
       <filter-name>struts2</filter-name>
       <!-- 所有的url都会被url过滤器解析 -->
       <url-pattern>/*</url-pattern>
<!--forward表示只过滤内部转发的请求-->
       <dispatcher>FORWARD</dispatcher>
<!--request表示只过滤客户端的请求-->
       <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

 

本文由华夏彩票发布于计算机网络,转载请注明出处:PC并重回不一样页面包车型地铁实例

您可能还会对下面的文章感兴趣: