springmvc概述
1.springmvc概述
springmvc是一个web层控制层框架,主要用来与客户端交互,业务逻辑的调用。
springmvc是spring家族的一大组件,spring整合springmvc可以做到天衣无缝
特点:简单,易用性能佳
2.为什么有了servlet还要学习springmvc
a.servlet的配置相对的麻烦,servlet特别多的时候web.xml会非常的臃肿
b.每个servlet只能处理一个功能,如果需要多个功能就要开发多个servlet,项目中存在大量的servlet会显得臃肿
c.获取请求参数,进行类型的转换,封装数据到bean过程比较繁琐
d.其它开发中不便的地方,乱码问题,数据格式的问题,表单校验的问题
jar包下载网址:http://www.xwood.net/site_domain/_root/5870/5930/5932/9330/9374/t_c96056.html
所需jar包
配置文件web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>SpringMVCDay01_01_First</display-name>
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!--主页配置 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
" >
<!--处理映射器 -->
<bean name="/first.action" class="cn.tedu.controller.FirstController"></bean>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
package cn.tedu.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class FirstController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
ModelAndView mav=new ModelAndView();
mav.addObject("attr1", "hello word");
mav.addObject("attr2", "hello springmvc");
mav.setViewName("first");
return mav;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML">
<html>
<head>
<title>My JSP 'first.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
${attr1 }<br>
${attr2 }<br>
</body>
</html>
springmvc的详解
1.springmvc的组件
a.前端控制器(DispatcherServlet)
本质上是一个servlet,相当于一个中转站,所有的问题都会走到这个servlet中,再根据配置进行中转到相应handler中进行处理,获取对应的视图和数据在相应的视图做出响应
b.处理器映射器(handlermapping)
本质上是一段映射关系,将访问路径和对应的handler存储为映射关系,在需要时供前端控制器调查阅
c.处理器适配器(handleradapter)
本质上是一个适配器,可以根据要求找到对应的handler来运行,前端控制器通过映射器找到对应的handler之后,将请求响应和对应的handler交由处理器适配器处理,处理器适配器找到真正的handler执行之后,将结果交给控制器
d.视图解析器(viewresolver)
本质上也是一种映射关系,可以将视图名称映射到真正的视图地址
复制的项目在此更改:
流程:
a.导入jar包
b.配置前端控制器(配置springmvc的路径)
c.配置处理映射器
d.配置视图解析器
4.springmvc的注解方式配置
springmvc支持使用注解方式配置,比配置文件的方式更加的方便
a.在配置文件中开启springmvc的注解方式
包扫描和springmvc的注解控制
b.使用注解开发controller
springmvc处理细节
1.@RequestMapping("/logout.action")
a.基本使用
通过注解实现要处理方法的映射
可以用在类或者方法上,用在方法上表示将该方法变为一个处理器,且和指定路径做映射
用在类上则配置的路径会作为这个类中所有处理器的路径的父路径使用
b.注解的属性
i .string[] value() default{}
value属性
指定要将当前的处理器绑定到哪个访问路径上,且可以配置多个路径,路径中可以使用星号作为通配符匹配部分的路径。
ii.RequestMethod[] method()
指定当前的处理器处理那种提交方式的请求
iii.string[] params()
用来限定当前请求中是否包含指定参数名称的参数才会被处理
格式一:只是指定名称
格式二:名称等于值 或名称不等于值
格式三:!名称表示不包含该名称的参数
iv.String[] header()
用来限定当前请求头中必须包含指定名称的请求头才会被处理器处理
格式一:只是指定名称
格式二:名称等于值 或名称不等于值
格式三:!名称表示不包含该名称的请求头
5.获取request response对象
a.获取request对象
b.通过request获取参数
c.直接获取参数(参数名和方法名不一致时处理)
c.请求参数中的名称和属性名不同的处理@RequestParam
属性有value参数名,required声明为true否则报错,default
j.路径动态数据的获取(RestFul风格的请求参数处理)
普通的风格
url:localhost:xxx/adduser.action?name=tom&age=18
RestFul风格
url:localhost:xxx/adduser/tom/18.action
springmvc中实现请求转发和重定向
可以使用传统的方法实现转发和重定向
但是mvc也提供了便捷的请求转发和重定向
springmvc中域的使用
request直接向model中使用
session传统方式写入,向model中写入,在类上标注@SessionAttributes(“prod”)
servletcontext传统的方式写入
@ModelAttribute(“attrx1”)用在方法上或者用在方法中参数前面。优先存入model,给参数值
异常处理:
局部处理和全局处理
配置文件配置全局错误处理
实现返回一段数据-ajax
当页面通过ajax来访问controller时,期望得到的不是一个页面而是一个数据,此时可以使用如下的方法,直接向相应器中写出数据
response.getWriter().write(“数据”);
实现自动发送Ajax格式的数据
View可以直接返回一个带有视图的view对象
字符串直接返回视图的名称
modelandviwe返回返回一个modelandview对象,其中封装了model和view的信息
void 自动返回和当前的处理器路径名称相同的视图名
方法被@ResponseBody修饰则默认将返回的对象转为json写入输出
@cookieValue和@requestValue声明的方法参数
@cookieValue可以将请求中指定名称的cookie赋值给制定的方法参数
@requestHeader可以将方法中指定名称的头赋值给方法参数
代码实现:
package cn.tedu.controller;
public class User {
private String username;
private String password;
private String nickname;
private String email;
private int age;
private Dog dog;
public User(){}
public User(String username, String password, String nickname,
String email, int age, Dog dog) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
this.email = email;
this.age = age;
this.dog = dog;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ ", nickname=" + nickname + ", email=" + email + ", age="
+ age + ", dog=" + dog + "]";
}
}
package cn.tedu.controller;
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Dog() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
}
}
package cn.tedu.controller;
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.servlet.ModelAndView;
@Controller
@RequestMapping("/aaa")
public class FirstController {
@RequestMapping("/first.action")
public ModelAndView first(){
ModelAndView mav=new ModelAndView();
mav.addObject("attr1", "hello");
mav.addObject("attr2", "hello2");
mav.setViewName("first");
return mav;
}
@RequestMapping("/first2.action")
public String first2(Model model){
model.addAttribute("attr1", "hello1");
model.addAttribute("attr2", "hello2");
return "first";
}
/**
* value属性可以配多个
* @param model
* @return
*/
@RequestMapping(value={"/test01.action","/test01*.action"})
public String test01(Model model){
model.addAttribute("attr1", "hello1");
model.addAttribute("attr2", "hello2");
return "first";
}
/**
* 请求方式post不能接收,get可以
* @param model
* @return
*/
@RequestMapping(value={"/test02.action"},method=RequestMethod.POST)
public String test02(Model model){
model.addAttribute("attr1", "hello1");
model.addAttribute("attr2", "hello2");
return "first";
}
/**
* 参数名称
* @param model
* @return
*/
@RequestMapping(value={"/test03.action"},params={"user","gender!=male"})
public String test03(Model model){
model.addAttribute("attr1", "hello1");
model.addAttribute("attr2", "hello2");
return "first";
}
/**
* 请求头名称
* @param model
* @return
*/
@RequestMapping(value={"/test04.action"},headers="host=localhost")
public String test04(Model model){
model.addAttribute("attr1", "hello1");
model.addAttribute("attr2", "hello2");
return "first";
}
}
package cn.tedu.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/my02")
public class MyController02 {
/**
* 利用传统的请求方式request实现请求转发
* @throws IOException
* @throws ServletException
*/
@RequestMapping("/test01.action")
public void test01(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
/**
* 仍然可以通过传统的response实现请求重定向
*
*/
@RequestMapping("/test02.action")
public void test02(HttpServletRequest request,HttpServletResponse response)throws Exception{
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
/**
* 可以通过返回特定的视图名称完成转发
*
*/
@RequestMapping("/test03.action")
public String test03(HttpServletRequest request,HttpServletResponse response)throws Exception{
return "forward:/test03.jsp";
}
/**
* 可以通过返回特定的视图名称完成重定向
*
*/
@RequestMapping("/test04.action")
public String test04(HttpServletRequest request,HttpServletResponse response)throws Exception{
return "redirect:/test03.jsp";
}
}
package cn.tedu.controller;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
//@SessionAttributes("prod")
@Controller
@RequestMapping("/my03")
public class MyController03 {
/**
* 则被修饰的方法会在当前类的任意handler方法执行之前执行,返回值存入model供后续使用
*/
@ModelAttribute("attrx1")
public String mx(){
return "valx1";
}
/**
* model中存入的数据默认存在request中
* @param model
* @return
*/
@RequestMapping("/test01.action")
public String test01(Model model){
model.addAttribute("time", new Date().toLocaleString());
return "my03test01";
}
/**
* 传统方式向session中存入数据
* @param model
* @return
*/
@RequestMapping("/test02.action")
public String test02(HttpServletRequest request){
request.getSession().setAttribute("time", new Date().toLocaleString());
return "my03test";
}
/**
* 参数中获取httpsession
* @param model
* @return
*/
@RequestMapping("/test03.action")
public String test03(HttpSession session){
session.setAttribute("time", new Date().toLocaleString());
return "my03test";
}
/**
* springmvc提供的机制获取session
* 类上标注@SessionAttributes("prod"),则这个类中的任意方法只要向model传值,就能存到session域
* @param model
* @return
*/
@RequestMapping("/test04.action")
public String test04(Model model){
model.addAttribute("prod", "prods");
return "my03test";
}
/**
* 对于servletcontext没有便捷的方法只有传统的方法
* @param model
* @return
*/
@RequestMapping("/test05.action")
public String test05(HttpServletRequest request){
return "my03test";
}
@RequestMapping("/test06.action")
public String test06(){
return "my03test";
}
/**
* @ModelAttribute("attrx1")修饰在参数上会将mode中的值传给修饰的参数
*/
@RequestMapping("/test07.action")
public String test07(@ModelAttribute("attrx1") String attr){
System.out.println(attr);
return "my03test";
}
}
package cn.tedu.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.View;
@Controller
//@RequestMapping("/my05")
public class MyController04 {
@RequestMapping("/test01.action")
public void test01(HttpServletResponse response) throws IOException{
response.getWriter().write("this a data");
}
@RequestMapping("/test02.action")
public void test02(PrintWriter pw) throws IOException{
pw.write("this a data");
}
/**
* 向客户端返回json格式的数据
*
*/
@RequestMapping("/test03.action")
public void test03(PrintWriter pw){
User user=new User("aa","123","ff","ff@qq",6,new Dog("tt",2));
String json="{'username':'"+user.getUsername()+"','password':'"+user.getPassword()+"','nickname':'"+user.getNickname()+"','email':'"+user.getEmail()+"',age:"+user.getAge()+",{'name':'"+user.getDog().getName()+"',age:"+user.getDog().getAge()+"}}";
pw.write(json);
}
/**
* 向客户端返回json格式的数据
*
*/
@RequestMapping("/test04.action")
@ResponseBody
public User test04(){
User user=new User("aa","123","ff","ff@qq",6,new Dog("tt",9));
//System.out.println(user);
return user;
}
/**
* @cookieValue和@requestValue声明的方法参数
* @cookieValue可以将请求中指定名称的cookie赋值给制定的方法参数
* @requestHeader可以将方法中指定名称的头赋值给方法参数
*/
@RequestMapping("/test05.action")
public void test05(@CookieValue("JSESSIONID") String JSESSIONID){
System.out.println(JSESSIONID);
}
/**
* WEBRequest 是request和session的合体
* @param JSESSIONID
*/
@RequestMapping("/test06.action")
public void test06(WebRequest rew){
System.out.println(rew);
}
/**
* View可以直接返回一个带有视图的view对象
* 字符串直接返回视图的名称
* modelandviwe返回返回一个modelandview对象,其中封装了model和view的信息
* void 自动返回和当前的处理器路径名称相同的视图名
* 方法被@ResponseBody修饰则默认将返回的对象转为json写入输出
*/
@RequestMapping("/test07.action")
public View test07(){
return null;
}
}
package cn.tedu.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.View;
@Controller
//@RequestMapping("/my05")
public class MyController04 {
@RequestMapping("/test01.action")
public void test01(HttpServletResponse response) throws IOException{
response.getWriter().write("this a data");
}
@RequestMapping("/test02.action")
public void test02(PrintWriter pw) throws IOException{
pw.write("this a data");
}
/**
* 向客户端返回json格式的数据
*
*/
@RequestMapping("/test03.action")
public void test03(PrintWriter pw){
User user=new User("aa","123","ff","ff@qq",6,new Dog("tt",2));
String json="{'username':'"+user.getUsername()+"','password':'"+user.getPassword()+"','nickname':'"+user.getNickname()+"','email':'"+user.getEmail()+"',age:"+user.getAge()+",{'name':'"+user.getDog().getName()+"',age:"+user.getDog().getAge()+"}}";
pw.write(json);
}
/**
* 向客户端返回json格式的数据
*
*/
@RequestMapping("/test04.action")
@ResponseBody
public User test04(){
User user=new User("aa","123","ff","ff@qq",6,new Dog("tt",9));
//System.out.println(user);
return user;
}
/**
* @cookieValue和@requestValue声明的方法参数
* @cookieValue可以将请求中指定名称的cookie赋值给制定的方法参数
* @requestHeader可以将方法中指定名称的头赋值给方法参数
*/
@RequestMapping("/test05.action")
public void test05(@CookieValue("JSESSIONID") String JSESSIONID){
System.out.println(JSESSIONID);
}
/**
* WEBRequest 是request和session的合体
* @param JSESSIONID
*/
@RequestMapping("/test06.action")
public void test06(WebRequest rew){
System.out.println(rew);
}
/**
* View可以直接返回一个带有视图的view对象
* 字符串直接返回视图的名称
* modelandviwe返回返回一个modelandview对象,其中封装了model和view的信息
* void 自动返回和当前的处理器路径名称相同的视图名
* 方法被@ResponseBody修饰则默认将返回的对象转为json写入输出
*/
@RequestMapping("/test07.action")
public View test07(){
return null;
}
}
package cn.tedu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/aaa")
public class UserController {
@RequestMapping("/regist.action")
public String registUser(){
return null;
}
@RequestMapping("/login.action")
public String loginUser(){
return null;
}
@RequestMapping("/logout.action")
public String logoutUser(){
return null;
}
}
package cn.tedu.err;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/my04")
public class MyContrller01 {
/**
* 只能识别一个类里的错误(局部异常处理)
* @param e
* @return
*/
@ExceptionHandler
public String handlerException(Exception e){
System.out.println("记录日志"+e.getMessage());
return "errpage";
}
@RequestMapping("/test01.action")
public void test01(){
int i=1/0;
}
}
package cn.tedu.err;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class MyContrller02 {
/**
* 全局异常的处理
*/
@ExceptionHandler
public String handlerException(Exception e){
System.out.println("记录全局日志"+e.getMessage());
return "err";
}
}
配置文件:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>SpringMVCDay01_01_First</display-name>
<!-- 前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 乱码过滤 --><!--只针对post -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
" >
<!-- 配置包扫描 -->
<context:component-scan base-package="cn.tedu.controller"></context:component-scan>
<context:component-scan base-package="cn.tedu.err"></context:component-scan>
<!-- 配置注解方式实现处理器映射器 -->
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置文件上传的处理器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
<!-- 配置全局的错误信息提示 -->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">null_err</prop>
<prop key="java.io.IOException">io_err</prop>
<prop key="java.lang.Throwable">g_err</prop>
</props>
</property>
</bean> -->
<!--处理映射器 -->
<!-- <bean name="/first.action" class="cn.tedu.controller.FirstController"></bean> -->
<!-- 视图解析器 -->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean> -->
</beans>
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<h3><font color="red">一个全局的错误</font></h3>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<h3><font color="red">一个错误</font></h3>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML">
<html>
<head>
<title>My JSP 'first.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
${attr1 }<br>
${attr2 }<br>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<h3><font color="red">一个全局的错误</font></h3>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
apgecontext域: ${pageScope.time}<br>
request域:${requestScope.time}<br>
session域:${sessionScope.time}<br>
servletcontext域:${applicationScope.time}<br>
apgecontext域: ${pageScope.prod}<br>
request域:${requestScope.prod}<br>
session域:${sessionScope.prod}<br>
servletcontext域:${applicationScope.prod}<br>
apgecontext域: ${pageScope.attrx1}<br>
request域:${requestScope.attrx1}<br>
session域:${sessionScope.attrx1}<br>
servletcontext域:${applicationScope.attrx1}<br>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
test07测试
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>my Jsp page</title>
</head>
<body>
<form action="http://localhost/SpringMVCDay01_02_anno/my1/test06.action">
姓名<input type="text" name="username"/><br>
密码<input type="password" name="password"/><br>
昵称<input type="text" name="nickname"/><br>
邮箱<input type="text" name="email"/><br>
<input type="submit"/>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>my Jsp page</title>
</head>
<body>
<form action="http://localhost/SpringMVCDay01_02_anno/my1/test08.action">
姓名<input type="text" name="username"/><br>
密码<input type="password" name="password"/><br>
爱好<input type="checkbox" name="like" value="lq"/>篮球<br>
<input type="checkbox" name="like" value="zq"/>足球<br>
<input type="checkbox" name="like" value="ppq"/>乒乓球<br>
<input type="submit"/>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>my Jsp page</title>
</head>
<body>
<form action="http://localhost/SpringMVCDay01_02_anno/my1/test10.action" method="get">
姓名<input type="text" name="username"/><br>
地址<input type="text" name="addr"/><br>
日期<input type="date" name="tday"/><br>
<input type="submit"/>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>my Jsp page</title>
</head>
<body>
<form action="http://localhost/SpringMVCDay01_02_anno/my1/test11.action" enctype="multipart/form-data" method="post">
选择文件<input type="file" name="fx"/>
<input type="submit"/>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>my Jsp page</title>
</head>
<body>
<h2><font color="red">这是一个新的征程</font></h2>
</body>
</html>