1.入门案例
1.新建一个web maven工程,使用web-app 骨架,如果我们有下载过骨架,那么在第三步Properties中添加键值对archetypeCatalog=internal
即使用本地仓库的骨架,避免创建maven工程时去网上下载,可以缩短时间。
2.添加依赖 spring-context,spring-webmvc,spring-web,servlet-api,jsp-api.
3.在web.xml中添加前端控制器:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4.配置tomcat服务器,在Deployment中添加我们当前项目,然后配置好热部署
5.重新创建index.jsp文件作为请求页面,并写入请求代码,创建控制器类,并写入请求的方法,和返回参数
6.创建spring配置文件,导入约束(除了基本的还需包含context和mvc),开启注解扫描,开启springmvc注解,配置Controller,RequestMapping注解在控制器类中
<!--开启自动扫描的包-->
<context:component-scan base-package="com.qjw"></context:component-scan>
<!--添加视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--开启springmvc的注解-->
<mvc:annotation-driven></mvc:annotation-driven>
7.在web.xml中配置spring.xml文件的加载:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置Servlet初始化参数,用来加载我们的spring配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
8.在控制器中配置return参数,并在WEB-INF新建一个pages用来返回请求成功的页面
9.在spring中配置视图解析器
<!--添加视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀和后缀-->
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
10.在请求页面填入访问地址需要和控制器方法中的RequestMapping中的path或者value的路径或者值一致,一般我们在RequestMapping path或者value中配置了/,那么在请求页面就不用加/了。
11. RequestMapping的属性
- path 指定请求路径的url
- value value属性和path属性是一样的
- mthod 指定该方法的请求方式
- params 指定限制请求参数的条件(指定参数,返回一个String类型,如果请求的参数不一致(key和value的名字要一致),则不能访问)
- headers 发送的请求中必须包含的请求头
2.请求参数及自定义类型转换
1.请求参数(基本数据类型和字符串类型)
在jsp页面编写请求参数:
<h1><a href="param/paramtest1?username=aa&password=123">请求参数为基本数据类型和字符串</a></h1>
然后在Conroller类中:
@RequestMapping("/paramtest1")
//在要请求的方法中加入参数,参数名必须和请求的一致,即上面的username=aa必须和参数的username一致
public String paramTest(String username,int password)
{
System.out.println("请求成功,取得参数:"+username+"和"+password);
return "success";
}
2.请求参数(实体类(javaBean对象))
1.创建提交表单的页面:
<body>
<form action="javabean/saveaccount">
<!--name的值需和要请求的javabean的属性名一致-->
姓名:<input type="text" name="name"></br>
年龄:<input type="text" name="age"></br>
存款:<input type="text" name="account"></br>
<!--引用名.属性名-->
用户名:<input type="text" name="user.username"></br>
密码:<input type="text" name="user.password"></br>
<input type="submit" value="提交">
</form>
</body>
2.创建实体类或者javaBean类:
public class UserAccount {
private String name;
private int age;
private String account;
private User user;
....
public class User implements Serializable {
private String username;
private String password;
....
生成对应的get,set,toString方法,表单中的name属性要和javabean中的属性名一致,如果有引用类型的属性,那么采用引用名.属性名的方式,也需要一致
3.创建控制器类
@Controller
@RequestMapping("/javabean")
public class JavaBeanParamDemo {
@RequestMapping("/saveaccount")
//这里参数需要填表单所需要提交到哪个javabean
public String saveAccount(UserAccount useraccount)
{
System.out.println("请求成功:"+"\n"+useraccount);
return "success";
}
}
4.返回结果:
3.请求参数(集合类型)
1.写个表单用来提交数据:要注意的就是集合请求的方式
<form action="javabean/saveaccount">
<!--name的值需和要请求的javabean的属性名一致-->
姓名:<input type="text" name="name"></br>
年龄:<input type="text" name="age"></br>
存款:<input type="text" name="account"></br>
<!--集合引用名.对应类型的属性名-->
List用户名:<input type="text" name="myList[0].username"></br>
List密码:<input type="text" name="myList[0].password"></br>
Map用户名:<input type="text" name="myMap[0].username"></br>
Map密码:<input type="text" name="myMap[0].password"></br>
<input type="submit" value="提交">
</form>
2.修改javabean类,生成get,set,toString方法
public class UserAccount {
private String name;
private int age;
private String account;
private List<User> myList;
private Map<String,User> myMap;
....
3.控制类不变
@Controller
@RequestMapping("/param")
public class RequestParamDemo1 {
@RequestMapping("/paramtest1")
//在要请求的方法中加入参数,参数名必须和请求的一致,即上面的username=aa必须和参数的username一致
public String paramTest(String username,int password)
{
System.out.println("请求成功,取得参数:"+username+"和"+password);
return "success";
}
}
4.结果:
4.解决中文乱码(如果在传参时传表单输入中文,控制台输出乱码,注意,过滤器在web.xml中的位置要在Servlet前面)
解决办法:设置过滤器
在web.xml