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文件

相關文章
相關標籤/搜索