javaweb成长之路:struts2的探索(一)
?
?
摘自于百度百科的一段話,僅供參考:
?? Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開(kāi),所以Struts 2可以理解為WebWork的更新產(chǎn)品。
?
struts2的核心組成部分應(yīng)該是屬于他的攔截器了,客戶端發(fā)送的請(qǐng)求都是需要經(jīng)過(guò)處理器進(jìn)行處理,其默認(rèn)的攔截器主要有19個(gè),本文中不講述攔截器,主要是一個(gè)入門demo
?
下面來(lái)看一看demo(版本為struts-2.5.13),如圖,創(chuàng)建一個(gè)web工程,名稱為struts2_001,項(xiàng)目的目錄結(jié)構(gòu)是圖中結(jié)構(gòu):
????????????????????????
接下來(lái),引入jar包:
下載地址:http://pan.baidu.com/s/1jHDMIEU????? 提取碼: 9gmt
?
開(kāi)始創(chuàng)建測(cè)試用表,這里是test數(shù)據(jù)庫(kù)里的user表,創(chuàng)表腳本如下:
CREATE TABLE `test`.`user` (`u_id` INT NOT NULL AUTO_INCREMENT,`u_name` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL,`u_pwd` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL,`u_age` INT NOT NULL,`u_address` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL,PRIMARY KEY (`u_id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;INSERT INTO `test`.`user` (`u_name`, `u_pwd`, `u_age`, `u_address`) VALUES ('test1', 'test1', '20', '廣東省深圳市'); INSERT INTO `test`.`user` (`u_name`, `u_pwd`, `u_age`, `u_address`) VALUES ('test2', 'test2', '30', '江西省南昌市');?
編寫實(shí)體類模型,User.java:
package com.advance.model;public class User {private Integer uId;private String uName;private String uPwd;private Integer uAge;private String uAddress;public Integer getuId() {return uId;}public void setuId(Integer uId) {this.uId = uId;}public String getuName() {return uName;}public void setuName(String uName) {this.uName = uName;}public String getuPwd() {return uPwd;}public void setuPwd(String uPwd) {this.uPwd = uPwd;}public Integer getuAge() {return uAge;}public void setuAge(Integer uAge) {this.uAge = uAge;}public String getuAddress() {return uAddress;}public void setuAddress(String uAddress) {this.uAddress = uAddress;} }?
數(shù)據(jù)庫(kù)工具類,主要是jdbc連接mysql數(shù)據(jù)庫(kù)。DbUtil.java:
package com.advance.util;import java.sql.Connection; import java.sql.DriverManager;public class DbUtil {private static final String className = "com.mysql.jdbc.Driver";private static final String url = "jdbc:mysql://localhost:3306/test";private static final String name = "root";private static final String pwd = "123456";static{try{Class.forName(className);}catch (Exception e){e.printStackTrace();}}public static Connection getConnection(){Connection conn = null;try{conn = DriverManager.getConnection(url,name,pwd);}catch (Exception e){e.printStackTrace();}return conn;} }?
?
?dao類,用來(lái)與數(shù)據(jù)庫(kù)交互,UserDao.java:
package com.advance.dao;import com.advance.util.DbUtil;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;public class UserDao {public boolean doLogin(String name,String pwd)throws Exception{boolean flag = false;String sql = "select * from user where u_name=? and u_pwd=?";Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try{conn = DbUtil.getConnection();ps = conn.prepareStatement(sql);ps.setString(1,name);ps.setString(2,pwd);rs = ps.executeQuery();if(rs.next()){flag = true;}}catch (Exception e){e.printStackTrace();}finally {//別忘了關(guān)閉資源,后打開(kāi)的先關(guān)閉if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(conn!=null){conn.close();}}return flag;}}?
?
下一步,在web.xml中配置struts2,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><filter><filter-name>struts-prepare</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class></filter><filter><filter-name>struts-execute</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts-prepare</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts-execute</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>接下來(lái)編寫你的action類,這里是DemoAction.java:
package com.advance.action;import com.advance.dao.UserDao; import com.opensymphony.xwork2.ActionSupport;public class DemoAction extends ActionSupport{private UserDao userDao = new UserDao();//參數(shù)private String userName;private String userPwd;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public String doLogin()throws Exception{if(userDao.doLogin(userName,userPwd)){return "loginSuccess";}else{return "loginErr";}}}?這里接受參數(shù)的方法是set方法,主要是由struts2的攔截器完成這部分功能。
get方法:傳值到界面;
set方法:接收界面的值。
?
接下來(lái)是最重要的一步,struts2.xml文件,直接放置在src目錄下。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="loginDemo" namespace="/" extends="struts-default"><action name="login" method="doLogin" class="com.advance.action.DemoAction"><result name="loginSuccess" type="dispatcher">/index.jsp</result><result name="loginErr" type="dispatcher">/login.jsp</result></action></package></struts>這是一個(gè)最簡(jiǎn)單的配置文件,內(nèi)容很簡(jiǎn)單,主要部分就是package中的內(nèi)容,它里面包含了多action。先講一下package的幾個(gè)屬性:
name:也就是你的package名稱,這個(gè)沒(méi)有什么好說(shuō)的
namespace:定義package命名空間 ,會(huì)影響你的訪問(wèn)路徑,例如/advance那么訪問(wèn)是的地址為http://localhost:8080/struts2_001/advance/login
extends:也就是package繼承的父類的名稱,
再看看action的配置:
name:就是指你的請(qǐng)求名稱,這里是login,在前臺(tái)請(qǐng)求就是這個(gè)加上你的路徑后綴啦(這里后綴沒(méi)有,所以前臺(tái)請(qǐng)求就是login)
class:定義你的action類的全路徑,下面的method將會(huì)從這里面定義的類中尋找,
method:在一個(gè)action中,繼承了ActionSupport之后,默認(rèn)的入口方法是execute,如果需要自定義,那就需要配置這個(gè)method,也就是說(shuō)你請(qǐng)求的那個(gè)name最終會(huì)進(jìn)入這個(gè)method定義的方法
還有是result的配置了:
name:這個(gè)name對(duì)應(yīng)的是action方法中的返回值,決定你的方法執(zhí)行完之后跳向何處
type:result類型?不寫則選用superpackage的type?struts-default.xml中的默認(rèn)為dispatcher
result標(biāo)簽中的配置(如login.jsp):這里是定義跳向哪里。
?
前端界面:
login.jsp
?
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>login</title> </head> <body><br/><h1 style="width: 100%;text-align: center">Struts2 Login Demo</h1><br/><hr/><br/><br/><br/><br/><center><form action="login.action" method="post"><input name="userName" type="text"><br/><br/><input name="userPwd" type="password"><br/><br/><input type="submit" value="登錄"></form></center> </body> </html>?
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html><head><title>index</title></head><body><br/><h1 style="width: 100%;text-align: center">Struts2 Login Demo</h1><br/><hr/><br/><br/><br/><br/><p><h1>賬號(hào):${userName}</h1></p><p><h1>密碼:${userPwd}</h1></p></body> </html>?
?
?
OK,上述步驟完成之后,就可以做一個(gè)小測(cè)試?yán)?#xff1a;
在瀏覽器中輸入地址:http://localhost:8080/struts2_001/login
?
?輸入測(cè)試用賬號(hào):test1 密碼test1,點(diǎn)擊登錄:
?
OK,到這里demo就做完了。
?
源碼下載地址:http://pan.baidu.com/s/1o8FqLwm???? 提取碼:zx5q
轉(zhuǎn)載于:https://www.cnblogs.com/advanceBlog/p/7860348.html
總結(jié)
以上是生活随笔為你收集整理的javaweb成长之路:struts2的探索(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么(2.55).toFixed(1)
- 下一篇: 放弃 PowerPoint,改用 rev