SpringMVC(二)
SpringMVC注解方式
1.常用注解:
名称 说明
@Controller 指明某个类是一个Controller
@RequestMapping 请求路径的映射,可以配置在类或者方法上面
@RequestParam 配置在方法的参数前面,指明从request中获取指定的值并注入到参数中
@PathVariable 指明从请求的地址的中获取配置项来注入到方法的参数中
2.使用注解完成用户登录
a.在所需要的Controller中标注@Controller
b.在dispatcherServlet-servlet.xml配置
1)配置视图解析器
2)配置需要扫描的包
3)启动SpringMVC注解扫描
3.REST风格
a.Representational State Transfer表述性状态转移
b.传统的查、改、删的URL与REST风格的增删改URL对比
/userview.action?id=12 <--> /user/12
/userdelete.action?id=12 <--> /user/delete/12
/userupdate.action?id=12 <--> /user/update/12
c.请求方式
GET、POST、DELETE、PUT
d.他强调的是一个资源可以对应多种视图
4.JSR-303验证
a.使用注解完成实体类的验证
1)需要导入hibernate-validator验证所需jar包
2)在实体类上配置验证注解
@NotEmpty
@Range
@Length
@Pattern
@Valid
b.DispatcherServlet
1)Handler
@Controller
@RequestMapping(value、method、params)
@PathVariable
@RequestParam
@ResponseBody
2)方法的返回值
ModelAndView
View
Model
String
Object
void
访问静态文件
在SpringMVC中配置了拦截地址为 / 时,拦截所有请求,静态资源(图片、外部样式、外部JS)都会被拦截
解决方案:使用<mvc:resources/>排除静态资源拦截
返回JSON数据
1.步骤:
a.导入jar包:jackson-all-1.9.11.jar
b.@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")
c.@ResponseBody
范例:
1.entity包
a.User
1 package com.Elastic.SpringMVCDemo2.ivy.entity; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable { 6 private String name; 7 private String pass; 8 9 public String getName() { 10 return name; 11 } 12 13 public void setName(String name) { 14 this.name = name; 15 } 16 17 public String getPass() { 18 return pass; 19 } 20 21 public void setPass(String pass) { 22 this.pass = pass; 23 } 24 }
2.controller包
a1.UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 import org.springframework.web.bind.annotation.RequestParam; 7 import org.springframework.web.servlet.ModelAndView; 8 9 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 10 11 @Controller 12 public class UserController { 13 /** 14 * 访问登录页面 15 * @return 16 */ 17 @RequestMapping("/login") 18 public ModelAndView login() { 19 return new ModelAndView("login"); 20 } 21 22 @RequestMapping("/doLogin") 23 public ModelAndView doLogin(User user, String code) { 24 System.out.println(user.getName()); 25 System.out.println(code); 26 return new ModelAndView("index"); 27 } 28 }
a2.jsp中name与controller中参数名不同时 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 import org.springframework.web.bind.annotation.RequestParam; 7 import org.springframework.web.servlet.ModelAndView; 8 9 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 10 11 @Controller 12 public class UserController { 13 /** 14 * 访问登录页面 15 * @return 16 */ 17 @RequestMapping("/login") 18 public ModelAndView login() { 19 return new ModelAndView("login"); 20 } 21 22 @RequestMapping("/doLogin") 23 public ModelAndView doLogin(@RequestParam(value="name1", required=false) String name1, String pass) { 24 System.out.println(name1); 25 return new ModelAndView("index"); 26 } 27 28 }
a3.required=false和defaultValue="asd"属性常用在分页 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 import org.springframework.web.bind.annotation.RequestParam; 7 import org.springframework.web.servlet.ModelAndView; 8 9 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 10 11 @Controller 12 public class UserController { 13 /** 14 * 访问登录页面 15 * @return 16 */ 17 @RequestMapping("/login") 18 public ModelAndView login() { 19 return new ModelAndView("login"); 20 } 21 22 @RequestMapping("/doLogin") 23 public ModelAndView doLogin(@RequestParam(defaultValue="asd", required=false) String name1, String pass) { 24 System.out.println(name1); 25 return new ModelAndView("index"); 26 } 27 28 }
a4.方法重载 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 import org.springframework.web.bind.annotation.RequestParam; 7 import org.springframework.web.servlet.ModelAndView; 8 9 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 10 11 @Controller 12 public class UserController { 13 /** 14 * 访问登录页面 15 * @return 16 */ 17 @RequestMapping(value="/login",method=RequestMethod.GET) 18 public ModelAndView login() { 19 return new ModelAndView("login"); 20 } 21 22 @RequestMapping(value="/login",method=RequestMethod.POST) 23 public ModelAndView login(User user, String code) { 24 System.out.println(user.getName()); 25 System.out.println(code); 26 return new ModelAndView("index"); 27 } 28 }
a5.增删查改 + 多参 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import javax.websocket.server.PathParam; 4 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.PathVariable; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestMethod; 9 import org.springframework.web.bind.annotation.RequestParam; 10 import org.springframework.web.servlet.ModelAndView; 11 12 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 13 14 @Controller 15 public class UserController { 16 @RequestMapping(value="/delete/{id}") 17 public ModelAndView delete(@PathVariable(value="id") String name) { 18 System.out.println("执行删除"); 19 System.out.println(name); 20 return new ModelAndView("index"); 21 } 22 23 /*@RequestMapping(value="/delete/{id}/{name}") 24 public ModelAndView delete(@PathVariable String id,@PathVariable String name) { 25 System.out.println("执行删除"); 26 System.out.println(id); 27 System.out.println(name); 28 return new ModelAndView("index"); 29 }*/ 30 31 @RequestMapping(value="/delete/{id}/{name}") 32 public ModelAndView search(String name,String sex,int age) { 33 System.out.println("执行搜索"); 34 return new ModelAndView("list"); 35 } 36 }
a6.页面显示信息 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import javax.websocket.server.PathParam; 4 5 import org.springframework.stereotype.Controller; 6 import org.springframework.ui.Model; 7 import org.springframework.ui.ModelMap; 8 import org.springframework.web.bind.annotation.PathVariable; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RequestMethod; 11 import org.springframework.web.bind.annotation.RequestParam; 12 import org.springframework.web.servlet.ModelAndView; 13 14 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 15 16 @Controller 17 public class UserController { 18 /** 19 * 访问登录页面 20 * @return 21 */ 22 //方法1 23 /*@RequestMapping("/login") 24 public ModelAndView login() { 25 return new ModelAndView("login","msg","欢迎使用xxx系统"); 26 }*/ 27 28 //方法2 29 /*@RequestMapping(value="/login",method=RequestMethod.GET) 30 public String login(Model model) { 31 model.addAttribute("msg", "欢迎使用xxx系统"); 32 return "login"; 33 }*/ 34 35 //方法3 36 @RequestMapping(value="/login",method=RequestMethod.GET) 37 public String login(ModelMap modelMap) { 38 modelMap.put("msg", "欢迎使用xxx系统"); 39 return "login"; 40 } 41 }
a7.重定向 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import javax.websocket.server.PathParam; 4 5 import org.springframework.stereotype.Controller; 6 import org.springframework.ui.Model; 7 import org.springframework.ui.ModelMap; 8 import org.springframework.web.bind.annotation.PathVariable; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RequestMethod; 11 import org.springframework.web.bind.annotation.RequestParam; 12 import org.springframework.web.servlet.ModelAndView; 13 14 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 15 16 @Controller 17 public class UserController { 18 @RequestMapping(value="/login",method=RequestMethod.GET) 19 public String login(ModelMap modelMap) { 20 modelMap.put("msg", "欢迎使用xxx系统"); 21 // 逻辑视图名称 22 // return "login"; 23 // 重定向:URL地址 24 return "redirect:/index"; 25 } 26 }
a8.完整版 -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import javax.validation.Valid; 4 import javax.websocket.server.PathParam; 5 6 import org.springframework.stereotype.Controller; 7 import org.springframework.ui.Model; 8 import org.springframework.ui.ModelMap; 9 import org.springframework.validation.BindingResult; 10 import org.springframework.web.bind.annotation.ModelAttribute; 11 import org.springframework.web.bind.annotation.PathVariable; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMethod; 14 import org.springframework.web.bind.annotation.RequestParam; 15 import org.springframework.web.servlet.ModelAndView; 16 17 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 18 19 @Controller 20 public class UserController { 21 @RequestMapping(value="/login",method=RequestMethod.GET) 22 public String login(ModelMap modelMap) { 23 modelMap.put("msg", "欢迎使用xxx系统"); 24 // 逻辑视图名称 25 return "login"; 26 // 重定向:URL地址 27 // return "redirect:/index"; 28 } 29 30 @RequestMapping(value="/login",method=RequestMethod.POST) 31 //@ModelAttribute("loginUser") 32 public ModelAndView login(@Valid User user, BindingResult bindingResult, String code, ModelMap modelMap) { 33 if (null == code || code.trim().length() == 0) { 34 modelMap.put("codeError", "验证码不能为空"); 35 } 36 37 if (bindingResult.hasErrors()) { 38 modelMap.addAllAttributes(bindingResult.getModel()); 39 System.out.println("有错误"); 40 System.out.println(bindingResult.getModel()); 41 return new ModelAndView("login",modelMap); 42 } 43 return new ModelAndView("index"); 44 } 45 }
a9.json -- UserController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import javax.validation.Valid; 4 import javax.websocket.server.PathParam; 5 6 import org.springframework.stereotype.Controller; 7 import org.springframework.ui.Model; 8 import org.springframework.ui.ModelMap; 9 import org.springframework.validation.BindingResult; 10 import org.springframework.web.bind.annotation.ModelAttribute; 11 import org.springframework.web.bind.annotation.PathVariable; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMethod; 14 import org.springframework.web.bind.annotation.RequestParam; 15 import org.springframework.web.servlet.ModelAndView; 16 17 import com.Elastic.SpringMVCDemo2.ivy.entity.User; 18 19 @Controller 20 public class UserController { 21 @RequestMapping(value="/login",method=RequestMethod.GET) 22 public String login(ModelMap modelMap) { 23 modelMap.put("msg", "欢迎使用xxx系统"); 24 // 逻辑视图名称 25 return "login"; 26 // 重定向:URL地址 27 // return "redirect:/index"; 28 } 29 30 @RequestMapping(value="/login",method=RequestMethod.POST) 31 //@ModelAttribute("loginUser") 32 public ModelAndView login(@Valid User user, BindingResult bindingResult, String code, ModelMap modelMap) { 33 if (null == code || code.trim().length() == 0) { 34 modelMap.put("codeError", "验证码不能为空"); 35 } 36 37 if (bindingResult.hasErrors()) { 38 modelMap.addAllAttributes(bindingResult.getModel()); 39 System.out.println("有错误"); 40 System.out.println(bindingResult.getModel()); 41 return new ModelAndView("login",modelMap); 42 } 43 return new ModelAndView("index"); 44 } 45 46 @RequestMapping("/ajax/login") 47 @ResponseBody 48 public Object ajaxLogin(){ 49 Map<String, Object> result = new HashMap<String, Object>(); 50 result.put("name", "admin"); 51 result.put("pass", "123456"); 52 result.put("success", true); 53 return result; 54 } 55 }
b.IndexController
1 package com.Elastic.SpringMVCDemo2.ivy.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 6 @Controller 7 public class IndexController { 8 @RequestMapping("/index") 9 public String index() { 10 return "index"; 11 } 12 }
3.Spring配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 9 http://www.springframework.org/schema/aop 10 http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 11 http://www.springframework.org/schema/tx 12 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 13 http://www.springframework.org/schema/context 14 http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 15 16 17 </beans>
4.SpringMVC配置文件
a1.SpringMVC-servlet.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 8 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 9 <!-- 配置需要扫描注解的包 --> 10 <context:component-scan base-package="com.Elastic.SpringMVCDemo2.ivy.controller"></context:component-scan> 11 12 <!-- 开启SpringMVC注解扫描 --> 13 <mvc:annotation-driven></mvc:annotation-driven> 14 15 <!-- 配置视图解析器 --> 16 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 17 <property name="prefix" value="/WEB-INF/views/"></property> 18 <property name="suffix" value=".jsp"></property> 19 </bean> 20 </beans>
a2.SpringMVC-servlet.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 8 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 9 <!-- 配置需要扫描注解的包 --> 10 <context:component-scan base-package="com.Elastic.SpringMVCDemo2.ivy.controller"></context:component-scan> 11 12 <!-- 开启SpringMVC注解扫描 --> 13 <mvc:annotation-driven></mvc:annotation-driven> 14 15 <!-- 配置视图解析器 --> 16 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 17 <property name="prefix" value="/WEB-INF/views/"></property> 18 <property name="suffix" value=".jsp"></property> 19 </bean> 20 21 <!-- 配置静态资源(图片、CSS、JS) --> 22 <mvc:resources location="/css/*" mapping="/css/**"/> 23 <mvc:resources location="/js/*" mapping="/js/**"/> 24 </beans>
5.web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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"> 3 <display-name>SpringMVCDemo1_ivy</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <!-- 指定Spring的配置文件 --> 14 <context-param> 15 <param-name>contextConfigLocation</param-name> 16 <param-value>classpath:applicationContext.xml</param-value> 17 </context-param> 18 19 <!-- 配置Spring的监听器 --> 20 <listener> 21 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 22 </listener> 23 24 <!-- 配置SpringMVC的拦截器 --> 25 <servlet> 26 <servlet-name>SpringMVC</servlet-name> 27 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 28 <init-param> 29 <param-name>contextConfigLocation</param-name> 30 <param-value>classpath:SpringMVC-servlet.xml</param-value> 31 </init-param> 32 <load-on-startup>1</load-on-startup> 33 </servlet> 34 <servlet-mapping> 35 <servlet-name>SpringMVC</servlet-name> 36 <url-pattern>/</url-pattern> 37 </servlet-mapping> 38 39 </web-app>
6.jsp
a.login.jsp
1 <%--引入JSP页面PAGE指令 --%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3 <%-- 引入JSTL标签指令 --%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <!DOCTYPE html> 6 <html language="zh-CN"> 7 <head> 8 <meta charset="utf-8"> 9 <!-- 设置浏览器渲染的引擎 --> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 11 <!-- 设置支持移动设备 --> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 <title>登录</title> 14 <!-- 引入bootstrap的样式 --> 15 <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/bootstrap.min.css"> 16 </head> 17 <body> 18 <div class="container"> 19 <div class="panel panel-primary center-block"> 20 <div class="panel-heading">登录</div> 21 <div class="panel-body"> 22 <form action="" method="post"> 23 <div class="form-group"> 24 <label class="col-md-3 control-label" for="loginName">用户名:</label> 25 <div class="col-md-6" > 26 <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/> 27 </div> 28 </div> 29 <div class="form-group"> 30 <label class="col-md-3 control-label" for="loginPass">密码:</label> 31 <div class="col-md-6" > 32 <input class="form-control" id="loginPass" name="pass" type="password"/> 33 </div> 34 </div> 35 <div class="form-group"> 36 <label class="col-md-3 control-label" for="code">验证码:</label> 37 <div class="col-md-6" > 38 <input class="form-control" id="code" name="code" type="text"/> 39 </div> 40 </div> 41 42 <div class="form-group"> 43 <div class="col-md-offset-3 col-md-6"> 44 <input class="btn btn-primary btn-block" type="submit" value="登录" /> 45 </div> 46 </div> 47 </form> 48 </div> 49 </div> 50 </div> 51 52 <!-- 引入JS的样式 --> 53 <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-2.2.4.js"></script> 54 <script type="text/javascript" src="<%=request.getContextPath()%>/js/bootstrap.min.js"></script> 55 56 </body> 57 </html>
a2.页面显示信息 -- login.jsp
1 <%--引入JSP页面PAGE指令 --%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3 <%-- 引入JSTL标签指令 --%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <!DOCTYPE html> 6 <html language="zh-CN"> 7 <head> 8 <meta charset="utf-8"> 9 <!-- 设置浏览器渲染的引擎 --> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 11 <!-- 设置支持移动设备 --> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 <title>登录</title> 14 <!-- 引入bootstrap的样式 --> 15 <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/bootstrap.min.css"> 16 </head> 17 <body> 18 <div class="container"> 19 <div class="panel panel-primary center-block"> 20 <div class="panel-heading">${msg }</div> 21 <div class="panel-body"> 22 <!-- <fm:form action="user/login" method="post"> --> 23 <form action="" method="post"> 24 <div class="form-group"> 25 <label class="col-md-3 control-label" for="loginName">用户名:</label> 26 <div class="col-md-6" > 27 <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/> 28 </div> 29 <div class="col-md-3"> 30 <!-- <fm:errors path="user.name"></fm:errors> --> 31 </div> 32 </div> 33 <div class="form-group"> 34 <label class="col-md-3 control-label" for="loginPass">密码:</label> 35 <div class="col-md-6" > 36 <input class="form-control" id="loginPass" name="pass" type="password"/> 37 </div> 38 <div class="col-md-3"> 39 <!-- <fm:errors path="user.pass"></fm:errors> --> 40 </div> 41 </div> 42 <div class="form-group"> 43 <label class="col-md-3 control-label" for="code">验证码:</label> 44 <div class="col-md-6" > 45 <input class="form-control" id="code" name="code" type="text"/> 46 </div> 47 <div class="col-md-3"> 48 <!-- <fm:errors path="code"></fm:errors> --> 49 </div> 50 </div> 51 52 <div class="form-group"> 53 <div class="col-md-offset-3 col-md-6"> 54 <input class="btn btn-primary btn-block" type="submit" value="登录" /> 55 </div> 56 </div> 57 <!-- </fm:form> --> 58 </form> 59 </div> 60 </div> 61 </div> 62 63 <!-- 引入JS的样式 --> 64 <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-2.2.4.js"></script> 65 <script type="text/javascript" src="<%=request.getContextPath()%>/js/bootstrap.min.js"></script> 66 67 </body> 68 </html>
a3.Spring标签 -- login.jsp
1 <%--引入JSP页面PAGE指令 --%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3 <%-- 引入JSTL标签指令 --%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm"%> 6 <!DOCTYPE html> 7 <html language="zh-CN"> 8 <head> 9 <meta charset="utf-8"> 10 <!-- 设置浏览器渲染的引擎 --> 11 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 12 <!-- 设置支持移动设备 --> 13 <meta name="viewport" content="width=device-width, initial-scale=1"> 14 <title>登录</title> 15 <!-- 引入bootstrap的样式 --> 16 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css"> 17 </head> 18 <body> 19 <div class="container"> 20 <div class="panel panel-primary center-block"> 21 <div class="panel-heading">${msg }</div> 22 <div class="panel-body"> 23 <fm:form action="" method="post" modelAttribute="user"> 24 <div class="form-group"> 25 <label class="col-md-3 control-label" for="loginName">用户名:</label> 26 <div class="col-md-6" > 27 <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/> 28 </div> 29 <div class="col-md-3"> 30 <fm:errors path="name"></fm:errors> 31 </div> 32 </div> 33 <div class="form-group"> 34 <label class="col-md-3 control-label" for="loginPass">密码:</label> 35 <div class="col-md-6" > 36 <input class="form-control" id="loginPass" name="pass" type="password"/> 37 </div> 38 <div class="col-md-3"> 39 <fm:errors path="pass"></fm:errors> 40 </div> 41 </div> 42 <div class="form-group"> 43 <label class="col-md-3 control-label" for="code">验证码:</label> 44 <div class="col-md-6" > 45 <input class="form-control" id="code" name="code" type="text"/> 46 </div> 47 <div class="col-md-3"> 48 <fm:errors path="code"></fm:errors> 49 </div> 50 </div> 51 52 <div class="form-group"> 53 <div class="col-md-offset-3 col-md-6"> 54 <input class="btn btn-primary btn-block" type="submit" value="登录" /> 55 </div> 56 </div> 57 </fm:form> 58 </div> 59 </div> 60 </div> 61 62 <!-- 引入JS的样式 --> 63 <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-2.2.4.js"></script> 64 <script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script> 65 66 </body> 67 </html>
a4.完整版 -- login.jsp
1 <%--引入JSP页面PAGE指令 --%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3 <%-- 引入JSTL标签指令 --%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm"%> 6 <!DOCTYPE html> 7 <html language="zh-CN"> 8 <head> 9 <meta charset="utf-8"> 10 <!-- 设置浏览器渲染的引擎 --> 11 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 12 <!-- 设置支持移动设备 --> 13 <meta name="viewport" content="width=device-width, initial-scale=1"> 14 <title>登录</title> 15 <!-- 引入bootstrap的样式 --> 16 <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css"> 17 </head> 18 <body> 19 <div class="container"> 20 <div class="panel panel-primary center-block"> 21 <div class="panel-heading">${msg }</div> 22 <div class="panel-body"> 23 <fm:form action="" method="post" modelAttribute="user"> 24 <div class="form-group"> 25 <label class="col-md-3 control-label" for="loginName">用户名:</label> 26 <div class="col-md-6" > 27 <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/> 28 </div> 29 <div class="col-md-3"> 30 <fm:errors path="name"></fm:errors> 31 </div> 32 </div> 33 <div class="form-group"> 34 <label class="col-md-3 control-label" for="loginPass">密码:</label> 35 <div class="col-md-6" > 36 <input class="form-control" id="loginPass" name="pass" type="password"/> 37 </div> 38 <div class="col-md-3"> 39 <fm:errors path="pass"></fm:errors> 40 </div> 41 </div> 42 <div class="form-group"> 43 <label class="col-md-3 control-label" for="code">验证码:</label> 44 <div class="col-md-6" > 45 <input class="form-control" id="code" name="code" type="text"/> 46 </div> 47 <div class="col-md-3"> 48 ${codeError } 49 </div> 50 </div> 51 52 <div class="form-group"> 53 <div class="col-md-offset-3 col-md-6"> 54 <input class="btn btn-primary btn-block" type="submit" value="登录" /> 55 </div> 56 </div> 57 </fm:form> 58 </div> 59 </div> 60 </div> 61 62 <!-- 引入JS的样式 --> 63 <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-2.2.4.js"></script> 64 <script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script> 65 66 </body> 67 </html>
b.index.jsp
1 <%--引入JSP页面PAGE指令 --%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3 <%-- 引入JSTL标签指令 --%> 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <!DOCTYPE html> 6 <html language="zh-CN"> 7 <head> 8 <meta charset="utf-8"> 9 <!-- 设置浏览器渲染的引擎 --> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 11 <!-- 设置支持移动设备 --> 12 <meta name="viewport" content="width=device-width, initial-scale=1"> 13 <title>首页</title> 14 <!-- 引入bootstrap的样式 --> 15 <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/bootstrap.min.css"> 16 </head> 17 <body> 18 <div class="container"> 19 <h1>首页</h1> 20 </div> 21 22 <!-- 引入JS的样式 --> 23 <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-2.2.4.js"></script> 24 <script type="text/javascript" src="<%=request.getContextPath()%>/js/bootstrap.min.js"></script> 25 26 </body> 27 </html>