圖書館借了本SSH的書,有點(diǎn)兒簡(jiǎn)單的速成的感覺(jué),雖然每個(gè)框架都需要學(xué)習(xí)很長(zhǎng)時(shí)間才能深入,但這樣學(xué)習(xí)也不錯(cuò),有個(gè)整體上的了解后,再在實(shí)踐中一步步完善,從而有深入的認(rèn)識(shí)
今天看的是Spring 的MVC框架,實(shí)例是簡(jiǎn)單的用戶登陸,功能是對(duì)用戶登陸進(jìn)行用戶名和密碼的判斷,及登陸成功失敗后的跳轉(zhuǎn).廢話不多說(shuō),直接開(kāi)始
開(kāi)發(fā)環(huán)境是Myeclipse 7,tomcat 6,spirng2.0(做小程序,版本基本沒(méi)影響吧)
需要的包主要是Spring Core,Spring MVC兩個(gè),但MyEclipse自動(dòng)導(dǎo)入了很多工具包,如log4j等,其中一些是否必須使用我還沒(méi)有驗(yàn)證
1.視圖層view:3個(gè)視圖頁(yè)
index.jsp 首頁(yè),實(shí)現(xiàn)登陸表單的提交
success.jsp 成功后的跳轉(zhuǎn)頁(yè)面,顯示歡迎
failure.jsp 失敗后的跳轉(zhuǎn)頁(yè)面,顯示失敗原因
代碼:
index.jsp
主要就是個(gè)表單
1
<form action="login.asp">
2
userName:<input type="text" name="username" /><br/>
3
password:<input type="password" name="password"/><br/>
4
<input type="submit" value="提交"/>
5
</form>
注意:action的值是login.asp,純屬無(wú)聊,因?yàn)榭梢耘渲眠^(guò)濾的格式,所以這里寫什么結(jié)尾是無(wú)所謂的,只是想試下效果而已,
success.jsp
登陸成功,歡迎<%=request.getAttribute("username")%>
顯示成功
failure.jsp
登陸失敗,<%=request.getAttribute("msg")%>
顯示失敗
2.模型層model:模擬實(shí)現(xiàn)數(shù)據(jù)庫(kù)的功能,及用戶驗(yàn)證的方法
UserInfoBean.java
1 package springmvc.model;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import com.sun.org.apache.bcel.internal.generic.NEW;
6
7 public class UserInfoBean {
8 public static Map<String, String> map = new HashMap<String, String>();
9 //模擬數(shù)據(jù)庫(kù)
10 static{
11 String personOneUsername ="xiaosan";
12 String personOnePasswrod = "123";
13 String personTwousename = "asi";
14 String personTwoPassword = "456";
15 map.put(personOneUsername, personOnePasswrod);
16 map.put(personTwousename, personTwoPassword);
17 }
18 //判斷用戶是否存在
19 public static boolean exisitUser(String username){
20 return map.containsKey(username);
21 }
22 //判斷一個(gè)已存在的用戶密碼是否正確
23 public static boolean confirmPassword(String username,String password){
24 return map.get(username).equals(password);
25
26 }
27 }
28
3.控制層controller:調(diào)用模型層方法來(lái)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
LoginController.java 需要實(shí)現(xiàn)Controller接口
1
package springmvc.controller;
2
3
import java.util.HashMap;
4
import java.util.Map;
5
6
import javax.servlet.http.HttpServletRequest;
7
import javax.servlet.http.HttpServletResponse;
8
9
import org.springframework.web.servlet.ModelAndView;
10
import org.springframework.web.servlet.mvc.Controller;
11
12
import springmvc.model.UserInfoBean;
13
14
public class LoginController implements Controller
{
15
16
private String successPage ;
17
private String failurePage ;
18
@Override
19
public ModelAndView handleRequest(HttpServletRequest req,
20
HttpServletResponse resp) throws Exception
{
21
String username = req.getParameter("username");
22
String password = req.getParameter("password");
23
String message = null;
24
25
//判斷是否為空
26
if(username == null||password ==null||username.equals("")||password.equals(""))
{
27
message = "username or password can't be null";
28
Map<String,String> model = new HashMap<String,String>();
29
model.put("msg", message);
30
return new ModelAndView(getFailurePage(),model);
31
}
32
//判斷用戶名是否存在
33
if(!UserInfoBean.exisitUser(username))
{
34
message ="username doesn't exisit";
35
Map<String,String> model = new HashMap<String,String>();
36
model.put("msg", message);
37
return new ModelAndView(getFailurePage(),model);
38
}
39
//如果存在,判斷密碼是否正確,正確跳轉(zhuǎn),錯(cuò)誤跳轉(zhuǎn)
40
if(!UserInfoBean.confirmPassword(username, password))
{
41
message ="password is wrong";
42
Map<String,String> model = new HashMap<String,String>();
43
model.put("msg", message);
44
return new ModelAndView(getFailurePage(),model);
45
}else
{
46
Map<String,String> model = new HashMap<String,String>();
47
model.put("username", username);
48
return new ModelAndView(getSuccessPage(),model);
49
}
50
}
51
//getter and setter
52
public String getSuccessPage()
{
53
return successPage;
54
}
55
public void setSuccessPage(String successPage)
{
56
this.successPage = successPage;
57
}
58
public String getFailurePage()
{
59
return failurePage;
60
}
61
public void setFailurePage(String failurePage)
{
62
this.failurePage = failurePage;
63
}
64
65
}
66
4.最后是兩個(gè)配置文件:web.xml和spring配置文件,applicationContext.xml
web.xml
<!-- 配置spring的后臺(tái)servlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定spring配置文件的路徑 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 攔截所有以.asp結(jié)尾的請(qǐng)求,可以修改 -->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.asp</url-pattern>
</servlet-mapping>
從這個(gè)配置文件可以知道Spring的配置文件名及位置是可以更改的.
ApplictionContext.xml
<bean id="urlMappint" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- login.asp由id為login的bean處理 -->
<prop key="login.asp">login</prop>
</props>
</property>
</bean>
<!-- 配置控制器 -->
<bean id="login" class="springmvc.controller.LoginController">
<!-- 注入失敗頁(yè)面屬性 -->
<property name="failurePage">
<value>failure.jsp</value>
</property>
<!-- 注入成功頁(yè)面屬性 -->
<property name="successPage">
<value>success.jsp</value>
</property>
</bean>
這個(gè)配置文件配置了請(qǐng)求的處理方向和控制器兩個(gè)屬性的注入
運(yùn)行就可以了,結(jié)果就是控制器里的結(jié)果,這樣,就完成了這個(gè)簡(jiǎn)單實(shí)例.
現(xiàn)在對(duì)SpringMVC有了個(gè)初步的了解,由于接觸Spring才幾天,所以問(wèn)題還有很多,如
Spring的注入方式,雖然都看過(guò)了,但是還沒(méi)怎么使用,這個(gè)例子中只涉及了set值注入,還是比較簡(jiǎn)單的,沒(méi)什么理解上的難度,對(duì)于其他幾種方式,等都理解了再做個(gè)總結(jié)吧,
由于springFramwork這個(gè)單詞很長(zhǎng),所以他的類路徑就顯的特別長(zhǎng),加上還不太熟悉他的結(jié)構(gòu),所以哪里需要用到那些類還是不太明白,先遇到一個(gè)記一個(gè)吧,這里用到的就有配置文件中的
org.springframework.web.servlet.DispatcherServlet、控制url處理的org.springframework.web.servlet.handler.SimpleUrlHandlerMapping等類.
SpringMVC中,控制器要返回一個(gè)ModelAndView,這個(gè)類的構(gòu)造函數(shù)太多了,具體都是傳什么值,什么作用,還沒(méi)有深入了解.
SpringMVC就暫時(shí)到這里了,看了網(wǎng)上對(duì)它的評(píng)價(jià),雖然最近用到肯能性不大,但對(duì)Spring的學(xué)習(xí),還是起了一定的作用的.
源文件下載,沒(méi)有LIB,需要自己導(dǎo)
突然明白,崩潰的日子,是自己的不努力造成的.