1. 程式人生 > >Struts 2入門【struts.xml的DTD驗證不起作用的解決辦法】

Struts 2入門【struts.xml的DTD驗證不起作用的解決辦法】

Struts 2入門

1:環境搭建

①:導jar包

一些jar包:連結:https://pan.baidu.com/s/1OPlz_ekP-LIGmhNSAiMM_w  提取碼:isuh

②:配置web.xml

  <filter>
  		<filter-name>struts</filter-name>
  		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- Strutsjar包裡面的一個類,相當於中央控制器-->
  </filter>
  <filter-mapping>
  		<filter-name>struts</filter-name>
  		<url-pattern>/*</url-pattern><!-- 過濾所有請求,實際開發中一般過濾.action請求 -->
  </filter-mapping>

③:   struts.xml(核心配置檔案)

在根目錄下新建資原始檔包,放置三個xml檔案

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>
	<include file="struts-default.xml"></include>
	<include file="struts-base.xml"></include>
	<include file="struts-sy.xml"></include>
</struts>

struts-base.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.i18n.encoding" value="UTF-8" />
	<constant name="struts.devMode" value="true" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<constant name="struts.i18n.reload" value="true" />
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<!-- 抽象包 一般定義是為了被繼承 -->
	<package name="base" extends="struts-default" abstract="true">
		<global-allowed-methods>regex:.*</global-allowed-methods>
	</package>
</struts>

struts-sy.xml(配置相對應的action,相當於MVC框架下得mvc.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>
<!-- namespace:在記憶體中劃分具體的控制元件  
name:給package取個名字 -->
	<package name="sy" extends="base" namespace="/sy">
		<action name="helloAction" class="com.zking.struts_base1.web.HelloAction">
				<result name="success">/success.jsp</result>
		</action>
		<action name="calAction_*" class="com.zking.struts_base1.web.CalAction" method="{1}">
				<result name="rs">/rs.jsp</result>
		</action>
	</package>
</struts>

struts.xml的DTD驗證不起作用的解決辦法(其他dtd約束不起作用,也適用)

1.在專案中新建一個資料夾DTD,然後將struts2.dtd檔案複製到此資料夾中

2.然後選擇選單“window--->preferences--->MyEclipse--->Files and Editors--->XML--->XML Catalog

3.點選“ADD”,然後修改彈出視窗中的內容

location:點選選擇dtd的檔案路徑(Workspace)

key Type選擇下拉框中的URI即可、key的值是從struts.xml檔案複製過來的

  後臺子控制器獲取jsp所傳遞的引數的幾種形式    1.implements ModelDriven<Cal>    2.通過get/set方法獲取jsp頁面的值    3.通過物件導航的方式獲取jsp頁面的值 後臺子控制器向jsp傳值的幾種形式   1.通過傳統的作用域傳值(與J2EE容器互動)       就是獲取到四大作用域即可

public class ParamAction implements ServletRequestAware, ServletResponseAware{
	private HttpServletResponse resp;
	private HttpServletRequest req;
	private HttpSession session;
	private ServletContext application;


	@Override
	public void setServletResponse(HttpServletResponse arg0) {
		this.resp=arg0;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.req=arg0;
		this.session = arg0.getSession();
		this.application = arg0.getServletContext();
	}

  2.通過值棧進行傳值          只需要在子控制器提供set/get方法,即可實現傳值的功能(calAction)