2.1注解开发入门案例
web.xml为如果看了我上篇文章这个和上篇是一样的
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--springmvc的过滤器 防止中文乱码-->
<filter>
<filter-name>EncodingFilter</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>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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:mvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
修改mvc-servlet.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:p="http://www.springframework.org/schema/p"
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/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--1.配置注解扫描位置-->
<context:component-scan base-package="com.ywj.web.controller"/>
<!--2.配置处理器映射,通过注解查找-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!--3.配置适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--4.配置资源视图解析-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀 这里是活的,你根据你的实际情况改动-->
<property name="prefix" value="/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
写注解控制器
package com.ywj.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/user")//区分模块推荐配置,不配置的话可以直接访问/list.do等
public class UserController {
@RequestMapping("/list")
public String list(){
//返回的是页面名 因为配置了前缀和后缀会自动找到页面
return "user";
}
@RequestMapping("add")
public String add(){
return "user";
}
@RequestMapping(value ="/update")
public String update(){
return "user";
}
/**
*@Description: 只接受post请求
* @Param: []
* @return: java.lang.String
* @Author: ywj
* @Date: 2019/1/14 0014
*/
@RequestMapping(value ="/del",method = RequestMethod.POST)
public String del(){
return "user";
}
/**
*@Description: 只接受get请求
* @Param: []
* @return: java.lang.String
* @Author: ywj
* @Date: 2019/1/14 0014
*/
@RequestMapping(value ="/ss",method = RequestMethod.GET)
public String ss(){
return "user";
}
}
2.2RequestMapping讲解
@Controller//相当于在spring中配置了一个<bean class='控制器的路径'
2.3接收请求参数
参数类型有:基本类型string int等等,Pojo类
Struts2参数:基于属性进行封装,在action中提供属性和set方法
SpringMVC参数封装:基于方法进行封装
- 第一种获取参数的方法参数名和页面的name要一致
/**
*@Description: 第一种传递参数的方式
* date默认的格式是月/日/年
* @Param: [username, userpassword, usersex, userage, userbirthday, userhobby]
* @return: java.lang.String
* @Author: ywj
* @Date: 2019/1/14 0014
*/
@RequestMapping("add")
public String add(String username, String userpassword, String usersex, int userage, Date userbirthday , String[] userhobby){
System.out.println(username);
System.out.println(userpassword);
System.out.println(usersex);
System.out.println(userage);
System.out.println(userbirthday);
System.out.println(Arrays.toString(userhobby));
return "user";
}
前台代码:
<form action="${pageContext.request.contextPath}/user/add2.do" method="post">
用户名:<input type="text" name="username"> <br>
密 码:<input type="password" name="userpassword"> <br>
性 别:<input type="radio" name="usersex" value="男">男<input type="radio" name="usersex" value="女"> 女 <br>
年 龄:<input type="text" name="userage"> <br>
生 日:<input type="text" name="userbirthday"> <br>
爱 好:<input type="checkbox" name="userhobby" value="1">篮球
<input type="checkbox" name="userhobby" value="2">足球
<input type="checkbox" name="userhobby" value="3">跳舞
<input type="checkbox" name="userhobby" value="4">瞎子<br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
2.第二种使用pojo 也就是实体类装入属性,数据自动封装到对象中
//第二种使用pojo 也就是实体类装入属性,数据自动封装到对象中
@RequestMapping(value ="/update")
public String update(User user){
System.out.println(user);
return "user";
}
3.用封装类,把对象放进一个类中做属性,然后前台的话对应的name就用那个的对象的名字.属性就行了
@RequestMapping(value ="/add2")
public String add2(UserEx u){
System.out.println(u.getUser());
return "user";
}
前台使用user.userpasswrd作为属性即可就是这个对象名.属性
4. 传一个list集合的参数,整一个封装对象,对象里放一个list集合,记得要初始化,然后泛型放具体对象,然后看代码
<form action="${pageContext.request.contextPath}/user/add3.do" method="post">
用户名:<input type="text" name="list[0].username"> <br>
密 码:<input type="password" name="list[0].userpassword"> <br>
<hr>
用户名:<input type="text" name="list[1].username"> <br>
密 码:<input type="password" name="list[1].userpassword"> <br>
<hr>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
5.传一个Map集合,同样,整个封装类,属性弄个map集合,前台name就给map名[键名]就行了
前台代码
<form action="${pageContext.request.contextPath}/user/add4.do" method="post">
用户名:<input type="text" name="map['username']"> <br>
密 码:<input type="password" name="map['userpassword']"> <br>
<hr>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
后台输出map的结果为:
Spring和struts的区别
struts | Spring | |
实现机制 | struts是基于过滤器实现的 | SpringMVC是基于servlet实现的,servlet比过滤器快 |
运行速度 | Struts是多例,请求来了之后创建多个对象:ActionContext,valuestack,Useraction,Actionsuport, ModelDriven,每一次请求会创建一个action |
SpringMVC是单例,同一个Controller请求,只会创建一个Controller |
参数封装 | 基于属性进行封装 | 基于方法进行封装 |