Struts2学习笔记 (三) 小Demo基于Struts2中的核心配置解析

目录

 login.jsp

dafault.properties修改

package包的使用

namespace为命名空间

extends=“struts-default”

include file

default-acion-ref 

global-results

struts2接收页面传值的方法


 login.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

<s:form>中前两个typeField和password框会自动生成tr td标签。

theme主题类似于样式style,如果不加会报错

Servlet.service() for servlet [jsp] in context with path [/7_24] threw exception [/login.jsp (line: 16, column: 29) Unterminated &lt;s:submit tag] with root cause

在show.jsp中显示信息的两种方法,第二种需要在jsp前部添加关于s的配置。

world:${pname};

hello:<s:property value="pname"/>

 


dafault.properties修改

在default.properties中修改默认的后缀名,的位置在web app Library中strut2-core-2.3.14.ja下org.apache.struts2。

struts.i18n.encoding=UTF-8

国际化编码,针对post提交,默认编码

struts.action.extension=action,,

85行 可以修改扩展名,拷出key,在structs.xml中添加constant,name为key,value为自定义。

响应顺序:先从default框架本身读取,后读struts.xml,最后为web.xml。

<constant name="struts.devMode" value="true" />开发模式

让页面报出500,注释掉以下代码:

<!--  <global-results>

           <result name="error">/WEB-INF/jsp/error.jsp</result>

       </global-results>

       <global-exception-mappings>

           <exception-mapping exception="java.lang.Exception" result="error"/>

       </global-exception-mappings> -->

在value中true改为fasle后,可以显示正常500页面。

 


package包的使用

package用于分类文件,区别相同名的类,可以有多个package,每个模块建立一个包,每一个Servlet用一个package标签。

<package name="default" namespace="/person" extends="struts-default">

        <default-action-ref name="personAction" />

     <!--    <global-results>
            <result name="error">/WEB-INF/jsp/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings> -->

     <action name="personAction" class="com.demo.Action.PersonAction">
     <result>show.jsp</result>
     <result name="input" type="redirect">login.jsp</result>
      
     </action>
    
    
    </package>

 


namespace为命名空间

正常情况下的servlet中需要使用不同的url必须得在链接前面加上文件夹的目录才可以找到Servlet url,虚拟路径来匹配页面的路径。

将jsp文件加入到person后,需要在struts.xml中的action标签中添加正确路径。每一个调用jsp的方法中都得要调用一次person目录很麻烦。

此处show.jsp和login.jsp必须在进入person包目录中才能显示。Tomcat登录时需再加一层person路径。编写以下代码即可:

<package name="default" namespace="/person" extends="struts-default">

登录路径:

 


extends=“struts-default”

extends="struts-default"

很关键的代码,这个包中很重要。

拦截器的主要代码,多个形成拦截栈。

一般把这里声明为抽象的话就不再使用action了。

 


include file

<include file="example.xml"/>

用法和作用:多个研发地点负责模块不同,模块不同使xml多次修改十分麻烦,这个include是可在struts.xml添加多个xml文件,用于书写不同package的内容。struts.xml只留下常量链接和下面的include。附加文件放在src目录下并且只有相同链接地址和package包中的内容。我这里将struts.xml中package内容放入example.xml,并将include file链接写入struts.xml,同时文件中保留常量。

 


default-acion-ref 

example.xml中 默认的action引用

 <default-action-ref name="personAction" />

作用:当工程运行时只想发访问person目录下即localhost:8080/7_24/person/时,将name中的index调整为当前的Action链接地址。不添加路径的时候想要访问哪个就填哪个。

 


global-results

<global-results>
            <result name="error">/WEB-INF/jsp/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings> 

两个global为一组,只要出现异常,就会映射给error,error会对应给error.jsp。

error中的文件不能直接显示,由保密性安全性,只能通过自动跳转来实现。

struts2中返回的结果有哪些?

struts-default.xml中的result type标签中有列举。支持多视图中的type设置不同的类型。

在我们使用Struts2框架时,涉及到jsp的页面跳转,不要转发,尽量用重定向。

 


struts2接收页面传值的方法

有三种:

1,值模型:直接在action中写属性,即将模型Bean中的内容写在控制跳转的Action.java类中。不推荐。

2,域模型:单独建立一个Bean,在Action中声明Bean类。相比第一种代码较为整洁。

private Person person;

	public Person getPerson() {
	return person;
}
    public void setPerson(Person person) {
	this.person = person;
}

在新建Person类之后,需要将jsp中所有获取到的参数加上person.,因为在Action中实例化了Person类,但是jsp获取数据是从personAction中拿,jsp得不到值,为空指针,需要加上person.pname。

<s:form action="personAction!login" method="post">
			<s:textfield name="pname" label="用户名"></s:textfield>
			<s:password name="pwd" label="密码"></s:password>
		<tr>
            <td colspan="2"><s:submit theme="simple" value="提交">
				</s:submit> <s:reset theme="simple" value="重置"></s:reset>
			<td>
		<tr>
</s:form>

3,模型驱动:让Action类实现ModelDriven接口,添加泛型person,在person中实例化person类,重写getModel方法,返回person对象。推荐第三种方法。

public class PersonAction extends ActionSupport implements ModelDriven<Person>
Person person=new Person();

	@Override
	public Person getModel() {
		// TODO Auto-generated method stub
		return person;
	}

实现登录和注册页面跳转区分页面修改Action方法:

public String login() throws Exception {
		System.out.println("login");
		
		String path=null;
		if("tom".equals(person.getPname())&&"123".equals(person.getPwd())) {
			path=SUCCESS;	
		}else {
			path=INPUT;	
		}
		return path;
	}

修改常量中属性value为true。

  <constant name="struts.enable.DynamicMethodInvocation" value="true" />

修改jsp中的地址链接后加入登录和注册的区分。传值分别为login和reg,传哪个值调用那个方法。不能保留execute方法。

<s:form action="personAction!login" method="post">
<s:form action="personAction!reg" method="post">

效果:

地址为reg时,进入了reg的action。

public String reg() throws Exception {
		System.out.println("reg");
		String path=null;
		
		
		if("tom".equals(person.getPname())&&"123".equals(person.getPwd())) {
			path=SUCCESS;
			queryAll();
			
		}else {
			path=INPUT;
			
		}
		return path;
		
		
	}
	public String queryAll() throws Exception {
		System.out.println("queryAll");
		String path=null;
		
		
		if("tom".equals(person.getPname())&&"123".equals(person.getPwd())) {
			path=SUCCESS;
			
		}else {
			path=INPUT;
			
		}
		return path;
		
		
	}

一种传值方式为!,另一个方式为_,

但这种方法不推荐。还是直接!传值。

 

   

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值