Java的MVC玩起来比.Net的有意思,因为每一步你都知道它是如何运作的,都由自己去实现。而在.Net的MVC中,你却不知道一个Controller是如何对应到View中的,因为MS给了你IDE上的操作方便,具体内部是如何做的映射,很难找到或不知道。
Java MVC的原理可有这样理解(网上说是这种):JSP -> Servlet -> JSP
(个人认为最合适的是这样解释比较好):Servlet -> JSP
即不需要让用户直接访问JSP。因为这是Resful风格哈。
上代码例子。
建一个Bean: User
package com.my.beans; import java.lang.*; public class User { private String name; private String password; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } public User() {} }
建一个JSP:mvctest.jsp
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%> <html> <header> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </header> <body> <form action="${pageContext.request.contextPath}/requestattr" method="POST"> User name: <input type="textbox" id="txtUserName" name="txtUserName" value="${param.txtUserName}" /> <input type="submit" value="Submit" /><br/> <hr /> User name textbox value: ${param.txtUserName}<br/> Bean user name value: ${userBean.name}<br/> Bean password value: ${userBean.password}<br/> Bean age value: ${userBean.age}<br/> </form> </body> </html>
建一个Servlet: RequestAttr
package com.my; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.my.beans.User; public class RequestAttr extends HttpServlet { public RequestAttr() {} public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { req.getRequestDispatcher("/pages/mvctest.jsp").forward(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { PrintWriter out = resp.getWriter(); String strUserName = req.getParameter("txtUserName"); User user = new User(); user.setName(strUserName); user.setPassword("123"); user.setAge(18); req.setAttribute("userBean", user); req.getRequestDispatcher("/pages/mvctest.jsp").forward(req, resp); } }
web.xml修改:
<servlet> <servlet-name>requestattr</servlet-name> <servlet-class>com.my.RequestAttr</servlet-class> </servlet> <servlet-mapping> <servlet-name>requestattr</servlet-name> <url-pattern>/requestattr</url-pattern> </servlet-mapping>
结果:
访问地址:http://localhost:8080/mytest/requestattr
一个MVC模型如来。性奋....