struts2学习笔记20171021

来源:互联网 发布:兴达驾校网络预约系统 编辑:程序博客网 时间:2024/06/06 10:53
SSH = Struts2+Spring+Hibernate
1.Hibernate:持久层
2.Struts2:控制层
3.Spring:容器,总管家

JavaWEB:M(model)V(view)C(control)

Struts2:核心过滤器拦截所有请求,然后会有一系列的拦截器去做一些系统级别的功能,
例如:页面参数的绑定,类型转换,验证,文件的上传下载,国际化,ognl表达式
就会继续将请求定位到各自业务的处理,我们叫它action

一、开发步骤:
1.加载jar包
2.在web.xml中加载struts2的核心拦截器
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
3.在src目录下编写一个struts2的核心配置文件,名字固定:struts.xml
<struts>
<package name="my" namespace="/" extends="struts-default">
<action name="login" class="com.action.LoginAction">
<result name="success">/index.jsp</result>
<result name="input">/error.jsp</result>
</action>
</package>
</struts>
4.编写一个action继承ActionSupport,重写execute方法。



5.action绑定页面的三种方式
  (1)通过属性注入的方式,即直接在action里面写。
        private String name;
private String password;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
       public String execute() throws Exception{
if(getName().equals("zhangsan")&&getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
  (2)通过实体类的注入,即把属性封装,然后在调用。在调用实体类的时候,实体类也需要set和get方法。
       User user = new User();

public User getUser(){
return user;
}

public void setUser(User user) {
this.user = user;
}
       public String execute() throws Exception{
         if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}


login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="user.name"/><br/>
                密码:<input type="password" name="user.password"/><br/>
                      <input type="submit" value="submit"/>

</form>


  (3)通过实现ModelDriven,重写方法,不需要user对象的set和get方法,而且页面表单名不需要做修改。
    public class LoginAction extends ActionSupport implements ModelDriven<User>{
User user = new User();
public String execute() throws Exception{
if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}

login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="name"/><br/>
                密码:<input type="password" name="password"/><br/>
                      <input type="submit" value="submit"/>

</form>


二、action中如何获取servletAPI
1.解耦合
struts2把servletAPI封装成了Map对象,这些对象只能实现数据的存储和传递功能,好处是方便测试,不需要启动服务器即可测试
a。是通过actionContext
Map request = (Map) ActionContext.getContext().get("request");
b。实现特定的接口:RequestAwear,SessionAwear....重写set方法完成注入,在方法中直接使用这些对象即可
2.耦合
如果要使用原有的servletAPI就必须获取这些原对象
和上面的方式类比,就是加一个servlet前缀即可
HttpServletRequest req = ServletActionContext.getRequest();