java学习--struts2

struts
html

开发模式:MVC模式(Model,View,Control)前端

M-Model模型
java

模型的职责是复杂业务逻辑,包含两部分:业务数据和mysql

业务处理逻辑。好比实体类,DAO,Service都是web

V-View视图spring

视图是负责显示界面和用户交互sql

属于视图的类是不包含业务逻辑和控制逻辑的JSP数据库

C-Conrtrollerr控制器apache

控制器是模型层M和视图层V之间的桥梁,用于控制流程
app

ActionServlet

Struts2 HelloWorld

1)拷贝Struts2的核心jar包到web-inf/lib/下

sturts2-core-2.1.8.1.jar

核心包,

xwork-core-2.1.6.jar

是WebWork内核

ognl-2.7.3.jar

支持ognl表达式,相似于EL表达式

freemarker-2.3.15.jar

commons-fileupload-1.2.1.jar

用于实现文件上传功能的jar包

在web.xml中配置Struts2的前端控制器

用Filter实现的前端控制器

<web-app>

<filter>

<filter-name>Struts2</filter-name>

<filter-class>

 org.apache.struts2.dispatcher.ng.filter.Struts2PrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

 <filter-name>Struts2</filter-name>

 <url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

新建页面nameform.jsp

<html>

 ...

<body>

  <form action="/outman/day/welcome.action" method="post">

   <input name="name" type="text"/>

  <input value="提交" type="submit"/>

 </form>

...

</html>

新建页面welcome.jsp

...

<body>

 <h1> Welcome,$(name)

 </h1>

</body>

新建WelcomeAction

public class WelcomeAction{

  private String name;

  public String execute(){

  System.out.println("name" + name);

   if("monster".equalsIgnoreCase(name)){

        return "fail";

   }

   return "success";

}

public String getName(){

  return name:

}

public void setName(String name){

 this.name = name;

}

Sturuts2提供的方便之处:

1数据的自动的封装

根据页面组件的name属性,自动封装到Action中对应的name属性中。

2数据的自动传递

Action中的属性会在jsp页面能够直接用EL表达式拿到

9)写struts2所须要的配置文件struts.xml

 struts.xml文件告诉Struts2\请求对应的java类

<struts>

 <package name="helloworld" extends="struts-default"

    namespace="/day01">

  <action name="welcome" class="com.ccc.outman.WelcomeAction">

  <result name="success">/jsp/welcome.jsp</result>

  <result name="fail">/jsp/nameform.jsp</result>

</action>

</package>

<案例2>

Struts2链接数据库

须要导入的jar包

Struts2的jar包

Mysql的驱动

Jstl的jar包

②建立实体类

id,name,...以及get,set方法

③拷贝database.properties到src目录下

username = root

password = root

driver = com.mysql.jdbc.Driver

url = jdbc:mysql://localhost:3306/test

ConnectionUtils.java

public class ConnectionUtils{

private static String url;

private static String driver;

private static String username;

private static String password;

static{

 Properties props = new Properties();

 try{

    //从属性文件中读取数据库配置信息

   props.load(ConnectionUtils.class.getClassLoader().getResourceAsStream

   ("database.properties"));

}catch(IOException e){

  e.printStackTrace();

}

if(props != null){

  url = props.getProperty("url");

  driver = props.getProperty("driver");

  username = props.getProperty("username");

  password = props.getProperty("password");

 //装载并注册数据库驱动

try{

  Class.forName(driver);

}catch(ClassNotFoundException e){

  e.printStackTrace();

}

public static Connection openConnection() throws SQLException{

  return DriverManager.getConnection(url,username,password);

}

conn.close(),stmt.close(),rs.close();

public static void main(String[] args) {
  Connection conn = openConnection();

System.out.println(conn);

}

9)新建ProjectDAO

public class ProjectDao{

  private static final String findAll =

 "select * from t_project";


 public List<Project> findAll(){

  Connection conn = null;

  PreparedStatement stmt = null;

  ResultSet rs = null;

  try{

  conn = ConnectinUtils.openConnection();

  stmt = conn.prepareStatement(findAll);

  rs = stmt.executeQuery();

  List<Project> list = new ArrayList<Project>();

  while(rs.next()){

   Project project = new Project();

  project.setId(rs.getInt(1));

  project.setName(rs.getString(2));

  projec.....

}

return list;

...

}

public static void main(String[] args){

 ProjectDao dao = new ProjectDao();

 List<Project> list  = dao.findAll();

 for(Project p:list){

   System.out.println(p.getName());

}}}

11)新建ProjectListAction

public class ProjectListAction{

  private List<Project> projectList;

  public String execute(){

  ProjectDao projectDao = new ProjectDao();

  projectList = projectDao.findAll();

  return "success";

}

get,set方法


struts2框架中的关于service的做用:

service层配置了事务,由spring管理.

struts的action里调用的时候,通常都调用service层封装的方法.由于service层的方法可能会调用多个DAO层的方法.

举个例子说明一下,假入说我有一个需求,就是银行的转账需求吧,当A给B汇款1000元这个过程,A的账户里应该减小1000元,B的账户应该增长1000元,而这个过程是由2个DAO方法实现的,即A减小的方法,B增长的方法.而service层的转账方法(起名叫getResult方法)里面先调用了DAO层A减小的方法,再调用B增长的方法.配置文件的事务配置的是管理service层的事务,只有service层的转账方法完成了DAO层的两个方法,才算这个事务结束.若是直接调用DAO层的方法,那么spring不会管理事务,每次调用DAO的方法就算单独的一个事务,若是程序运行不稳定,A减小1000元的方法成功,B增长1000元的方法失败的状况下,因为此时的事务不是同一个事务.那么A的事务不会回滚.....结果就是数据库里面A少了1000块钱,B没有增长1000块钱........钱那里去了........出大错了吧,这个错误够严重了吧!



13)配置struts2.xml,web.xml

.jsp文件

相关文章
相关标签/搜索