@RequestMapping注解的作用:
用于路径映射:
例:
/*该方法的映射请求为 http://localhost:8080/项目名/user/register .该方法支持GET请求*/ @RequestMapping(value="/register",method=RequestMethod.GET) public String registerFrom(){ }
@RequestParam注解的作用:
例:
public String register(@RequestParam("loginname") String loginname, @RequestParam("password") String password, @RequestParam("username") String username){}
前端的loginname变量的值赋给java程序的 String loginname变量
前端的password变量的值赋给java程序的 String password变量
前端的username变量的值赋给java程序的 String username变量
=============================================================
完整demo:
(登录注册demo):
0.要导入的jar包:
建议将 spring框架的jar包一次性导入,这样就一定不会缺包
=============================================================
1.目录树
=============================================================
2.springMVC核心配置文件:(spring-mvc.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="controller"></context:component-scan> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>14行:开启controller包中的注解扫描。
15行:springmvc的映射器的配置
16行:springmvc的适配器的配置
17行:springmvc的视图解析器的配置
=============================================================
3.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>pro4</display-name> <!-- 定义springMVC的前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>5~17都属于配置servlet,且都是为了配置 springmvc中的前端控制器,用于拦截匹配的请求
7行:前端控制器的位置(不用改的)
10行:指定springmvc核心配置文件的路径
6行和15行的name要一样。
=============================================================
4.到目前为止,spring mvc的配置已经完成。
下面开始完成功能:
JAVA代码主要由2个部分组成,控制器(MVC中的C) 和 持久类,持久类用于记录登录或注册的用户的信息
持久类User.java:
package po; import java.io.Serializable; public class User implements Serializable{ private String loginname; //账号名 private String password; //密码 private String username; //用户姓名 public User(){ super(); } public String getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
package controller; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import po.User; @Controller @RequestMapping(value="/user") //映射路径为http://localhost:8080/pro4/user public class UserController{ private static List<User> userList; //用一个静态的列表保存注册了的用户,模拟数据库 public UserController(){ super(); userList = new ArrayList<User>(); } private static final Log logger=LogFactory.getLog(UserController.class); /*该方法的映射请求为 http://localhost:8080/pro4/user/register .该方法支持GET请求*/ //pro4为项目的名称 @RequestMapping(value="/register",method=RequestMethod.GET) public String registerFrom(){ //logger.info("register GET方法被调用"); return "registerForm"; } /*该方法的映射请求为 http://localhost:8080/pro4/user/register .该方法支持POST请求*/ @RequestMapping(value="/register",method=RequestMethod.POST) public String register(@RequestParam("loginname") String loginname, @RequestParam("password") String password, @RequestParam("username") String username){ logger.info("register POST方法被调用"); User user = new User(); user.setLoginname(loginname); user.setPassword(password); user.setUsername(username); userList.add(user); return "loginForm";//返回“loginForm”后,由spring-mvc.xml的规定,跳转至/loginForm.jsp处 } /*该方法的映射请求为 http://localhost:8080/pro4/user/login */ @RequestMapping(value="/login") public String login(@RequestParam("loginname") String loginname, @RequestParam("password") String password, Model model){ logger.info("登录名:"+loginname+" 密码:"+password);//测试用的打印信息,可以不用管 /*检测账号和密码是否在userList中存在*/ for(User user :userList){ if(user.getLoginname().equals(loginname) && user.getPassword().equals(password)){ model.addAttribute("user",user);//检测通过后,给模型model建一个变量,用于把user对象传过去,让跳转的页面可以接收次变量 return "welcome"; } } return "loginForm"; } }
=============================================================
5.各个 JSP文件(相当于MVC中的视图V)
(1)loginForm.jsp 登录页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>登陆页面</h3> <br> <form action="login" method="post"> <table> <tr> <td><label>登录名:</label></td> <td><input type="text" id="loginname" name="loginname"></td> </tr> <tr> <td><label>密码:</label></td> <td><input type="password" id="password" name="password"></td> </tr> <tr> <td></td> <td><input type="submit" value="登录" id="submit"></td> </tr> </table> </form> <form action="register"> <table> <tr> <td></td> <td><input type="submit" value="注册" id="register"></td> </tr> </table> </form> </body> </html>
(2)registerForm.jsp 注册页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="register" method="post"> <table> <tr> <td><label>登录名:</label></td> <td><input type="text" id="loginname" name="loginname"></td> </tr> <tr> <td><label>密码:</label></td> <td><input type="password" id="password" name="password"></td> </tr> <tr> <td><label>用户性别:</label></td> <td><input type="text" id="username" name="username"></td> </tr> <tr> <td><input type="submit" value="注册" id="submit"><td> </tr> </table> </form> </body> </html>
(3)welcome.jsp 登录成功页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>欢迎[${requestScope.user.username}}]登录</h3> <br> </body> </html>登录成功后,会自动跳转到此页面。
第10行:KL表达式获取用 Model 传出的数据。(可以看看UserController.java的第60行,这里用Model传出数据)
=============================================================
demo操作过程:
输入http://localhost:8080/pro4/user/register (其中pro4为Web工程的名称)
输入信息,点击注册后,跳转到登录窗口
若点击注册,会返回注册窗口继续注册,若点击登录,若账号密码正确,会跳转到 welcome.jsp(登录成功页面)