JSP中使用绝对路径
在.jsp文件中通常要引入.css文件,图片等,若采用相对路径较复杂,一般采用绝对路径
${ pageContext.request.contextPath}
此句话的作用先获取前面的请求路径,比如
${ pageContext.request.contextPath}/css
就是先获取前面的路径
以由首页跳转到注册页面为例:
1.修改页面跳转连接
<a href="${ pageContext.request.contextPath}/user_registPage.action">注册</a> //语句1
要在A.jsp文件包含B.jsp文件,要在想要插入的位置,只需将B.jsp文件包含进来即可:
<%@ include file="menu.jsp" %></div>
2.编写用户模块Action
import com.opensymphony.xwork2.ActionSupport; //导入
public class UserAction extends ActionSupport{ //语句2
/*
* 跳转到注册页面的执行方法
*/
public String registPage(){ //方法名必须和 语句1 的跳转的action名称相同
return "registPage";
}
}
方法名为:指定跳转路径的action方法名相同
3.配置Action
配置applicationContext.xml
<bean id="userAction" class="cn.itcast.shop.user.action.UserAction" scope="prototype">
</bean>
<bean>
是spring的一个标签,起到标识的作用,属性值任意期,不能包含特殊符号,根据 id得到配置对象
class:创建对象所在类的全路径,是创建的UserAction的当前文件所在目录下的路径
scope:是spring中的一个概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式
配置struts.xml
<action name="user_*" class="userAction" method="{1}"> //class名称必须和action即类名()必须相同
<result name="registPage">/WEB-INF/jsp/regist.jsp</result>
</action>
name="user_*"
:name为什么是user_*
,因为跳转的action方法名前面有user_*
,*是通配符,意思就是匹配所有的
class:必须和bean的id相同
method="{1}"
:1指第一个号 ,提交action时,1会变为代表的内容:详解 method=”{1}”
<result>
:
name="registPage"
:name值必须和UserAction中方法返回的值一样
<result>
标签中间写呈现页面.jsp的绝对路径
【执行的过程】
- 点击链接
- 去struts文件中找name为user_registPageAction的Action,而有一个
<Action>
标签的name为user_*,(*为通配符),所以对应了此标签 - 根据class=”userAction”去applicationContext.xml找id为userAction的
<bean>
- 找到
<bean>
后,根据class去指定目录下找对应的UserAction - 找到UserAction后,执行registPage(),将结果返回到struts.中
- struts根据返回结果
<result>
要显示的.jsp页面
理解:id相当于主键,classs相当于外键
【拓展】
1.struts.xml:为struts 2 的核心配置文件
- 主要负责管理应用中的Action映射,以及该Action包含的Result定义等
- 配置Struts项目的一些全局属性,用户请求和响应Action之间的对应关系,处理结果的返回页面,相当于请求与响应的桥梁
2.applicationContext.xml:加载外部配置文件(作用很多,这只是目前了解到的)
3.WEB-INF:是不能直接让用户访问到的,所以添加了Action