servlet
*servlet的生命周期
init service 抽象方法 destroy
这三个方法是servlet的生命周期
*servlet是单例模式
*属性的数据是全局数据,如果出现这样的情况,注意线程安全的问题。
*servlet的缺点
*在web.xml中配置的文件会很多,这样不利于团队合作
*servlet类具有容器依赖性
*如果在servlet中方法很多,结构不好
if(method.equals("aa")){
//转向的方法
}
* serlvet的重构
* 减少web.xml的代码量
做一个转发过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
this.request = (HttpServletRequest)request;
this.response = (HttpServletResponse)response;
//获取请求路径
String uri = this.request.getRequestURI();
/**
* --/heima6servlet/HelloWorldAction.action
* 转化成HelloWorldAction
*/
String actionName = ServletUtils.convert(uri);
//利用java的反射机制调用该方法
try {
Action action = (Action)Class.forName("cn.heima6.action."+actionName).newInstance();
//forward指定要跳转到的jsp页面
String forward = action.execute(this.request, this.response);
/*
* 跳转的方法
* * 重定向
* request里的参数不起作用
* this.response.sendRedirect(jsp页面);
* * 转发
* 放在request作用域里的值可以取出来
* this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
*/
this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
* 把servlet的代码移动到action中,所以程序员只要写action就行了
*struts2
*在tomcat启动时,加载三个配置文件
src/struts-default.xml
src/struts-plugin.xml
src/struts.xml
*在配置文件中
<package name="prototype" namespace="/prototype" extends="struts-default">
<action name="prototypeAction" class="cn.heima6.struts2.action.prototype.PrototypeAction">
<result>successPrototype.jsp</result>
</action>
</package>
package的name表示包的名称,具有唯一性和继承性
namespace是命名空间。和url相对应。
extends 继承,在这里,继承了struts-default,所以这个包应该具有struts-default包下的所有的功能
action表示一个action类,name属性是类的名称,和访问的url对应。
class属性可以写,也可以不写。如果不写,则默认为ActionSupport
<default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>
result中有两个属性name,type
name的默认值为success
type的默认值为dispatcher
dispatcher 转发 可以使用request
redirect 重定向 request将失去作用
redirectAction 从action跳转到action。例如可以从LoginAction-->PersonAction
*在struts2的action中,action是原型模式(不是单例模式)可以通过构造函数进行证明。
*servlet的生命周期
init service 抽象方法 destroy
这三个方法是servlet的生命周期
*servlet是单例模式
*属性的数据是全局数据,如果出现这样的情况,注意线程安全的问题。
*servlet的缺点
*在web.xml中配置的文件会很多,这样不利于团队合作
*servlet类具有容器依赖性
*如果在servlet中方法很多,结构不好
if(method.equals("aa")){
//转向的方法
}
* serlvet的重构
* 减少web.xml的代码量
做一个转发过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
this.request = (HttpServletRequest)request;
this.response = (HttpServletResponse)response;
//获取请求路径
String uri = this.request.getRequestURI();
/**
* --/heima6servlet/HelloWorldAction.action
* 转化成HelloWorldAction
*/
String actionName = ServletUtils.convert(uri);
//利用java的反射机制调用该方法
try {
Action action = (Action)Class.forName("cn.heima6.action."+actionName).newInstance();
//forward指定要跳转到的jsp页面
String forward = action.execute(this.request, this.response);
/*
* 跳转的方法
* * 重定向
* request里的参数不起作用
* this.response.sendRedirect(jsp页面);
* * 转发
* 放在request作用域里的值可以取出来
* this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
*/
this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
* 把servlet的代码移动到action中,所以程序员只要写action就行了
*struts2
*在tomcat启动时,加载三个配置文件
src/struts-default.xml
src/struts-plugin.xml
src/struts.xml
*在配置文件中
<package name="prototype" namespace="/prototype" extends="struts-default">
<action name="prototypeAction" class="cn.heima6.struts2.action.prototype.PrototypeAction">
<result>successPrototype.jsp</result>
</action>
</package>
package的name表示包的名称,具有唯一性和继承性
namespace是命名空间。和url相对应。
extends 继承,在这里,继承了struts-default,所以这个包应该具有struts-default包下的所有的功能
action表示一个action类,name属性是类的名称,和访问的url对应。
class属性可以写,也可以不写。如果不写,则默认为ActionSupport
<default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>
result中有两个属性name,type
name的默认值为success
type的默认值为dispatcher
dispatcher 转发 可以使用request
redirect 重定向 request将失去作用
redirectAction 从action跳转到action。例如可以从LoginAction-->PersonAction
*在struts2的action中,action是原型模式(不是单例模式)可以通过构造函数进行证明。