springmvc实现数据获取-列表显示-重定向等

在这里插入图片描述
springmvc就是一个库,他要依赖一大堆的库,并且版本很多,因此引入maven。导库,只需要书写依赖的坐标。以后需要库到mvnrepository.com找,找到之后将其贴到pom.xml中就好。jar包引入后还需要启动起来,springmvc的启动是通过一个超级servlet来完成的。它可以使任何请求都指向它。 原来是有请求servlet才启动做回应,现在只要web应用程序启动它就启动。一访问路径都是它。然后有一个初始化参数告诉它怎么工作。初始化参数指明的类路径下的dispatcher,指明了servlet应该怎么工作 。dispatcher-servlet的内容大致如下:

1`表明是注解驱动的,要去扫描注解了

2·告诉springmvc到哪里找。使用注解的话,说明是写在类上的,在类上要去找,并不是所有的类都是。为提高搜索效率,指明搜索位置。

3·任何的路径,都会被认为是控制器的访问路径。会被servlet拦截,到Controller去查,发现什么都没有,就404了。要告诉他那些东西是不是控制器路径。

4·在Controller中的方法的返回值都是字符串,如果在方法前写上“@ResponseBody”就是返回给我们的文字。如果没有“@ResponseBody”,就不会原样返回,会传给后台,然后台处理字符串,就是返回回来的视图的路径的构成的一部分。

让后台的处理器——视图解析器处理,它得到一个字符串,努力将他解析成一个路径。设定前缀和后缀,视图解析器会以前缀+传入字符串+后缀的方式拼接出一个网页路径。然后forward过去,就到达相应的界面上了。

运行:
访问/a:
在这里插入图片描述

访问/adfdf:

在这里插入图片描述

就会报错,因为它会将其当做控制器。
在这里插入图片描述

他说:针对这个地址,没有mapping被找到。
访问/student/input:
在这里插入图片描述
在springmvc的超级servlet眼中,所有的路径都是控制器路径,其会把所有的请求当做控制器路径来理解。去适配。只要一个请求到来,他就会去找控制器中的条目,一一的去适配。但是有些路径是一些文件,所以我们必须告诉springmvc哪些路径是可以豁免的,不要去强行解析。

现在要做的:收到数据,将其提交给Mybatis。
可以一部分使用springmvc,一部分保持servlet不变。可以慢慢转化,侵入性低。
新建包domain,将原来的domain的Student搬过来:
在这里插入图片描述
在Controller中,添加方法“createStudent”:

@PostMapping("/student/save")
public String createStudent(Student stu) throws Exception{
	
	System.out.println(stu);
	
	return null;
}

以post方法提交,提交网址为"/student/save",即以post方式访问这个路径的话,有这个方法来处理。
来到input_student.jsp,修改:
原来:
在这里插入图片描述
现在:
在这里插入图片描述

修改一下路径,确定提交方式是post。原来的task就不需要了。
原来输入控件的名字是随便命名的,现在要严格的按照java的属性来命名:
在这里插入图片描述
在这里插入图片描述
测试:
在这里设置一个断点
在这里插入图片描述
以调试模式来运行:
在这里插入图片描述
控制台上有这样一句:
在这里插入图片描述
表示路径映射到了方法,参数是一个学生对象。
在这里插入图片描述
在这里插入图片描述
点击确认:
在这里插入图片描述
断点到位。
在这里插入图片描述
student都有了,原来要自己写:
在这里插入图片描述
这些才可以。
原来要写中文格式化:
在这里插入图片描述
现在只要配置一下过滤器就能全部中文格式化(下面会说道)。原来是在if-else的东西,现在写到各自的方法里去。
让他跑完;
在这里插入图片描述
在这里插入图片描述
所有的数据已经封装进去了。
接下来就是Service了,复制原来的Service:
新建包:service和dao
dao只要MybatisDao就好
Mybatis还需要工具类:
再新建一个包
总的长这样:
在这里插入图片描述
这里是因为没有Mybatis报错了:
在这里插入图片描述

来到pom.xml,添加:

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>

这报错消失了:
在这里插入图片描述
现在还需要驱动:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

导入了一个用不到的东西,删掉就好:
在这里插入图片描述
Mybatis还需要配置文件:
新建包config,完整如下:
在这里插入图片描述
Controllrt修改如下:

@PostMapping("/student/save")
public String createStudent(Student stu) throws Exception{
	
	System.out.println(stu);
	
	
	StudentService stuService = new StudentServiceImpl();
	stuService.regStudent(stu);	
	
	return null;
}

测试:
如果出现这个,表示还有一个服务器还活着。
在这里插入图片描述
如果杀不死,在任务管理器找到这个进程,杀掉他就OK:
在这里插入图片描述
在这里插入图片描述
是404:
在这里插入图片描述
是没问题的。
数据库里是有的:
在这里插入图片描述
再试试中文:
在这里插入图片描述
出现乱码:
在这里插入图片描述

处理中文编码。
只要使用字符编码过滤器就好了。
过滤器的名字是编码过滤器,字符过滤以utf-8进行:

<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>

完整web.xml如下,注意添加顺序:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>stuinfo</display-name>



	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/dispatcher-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>


	<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-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

测试中文:
在这里插入图片描述
中文正常:
在这里插入图片描述

接下来是loadStus,回到控制器再写一个方法。
方法的格式是,返回一个字符串抛出一个异常。
加载学生列表,是Get提交。
得到的学生列表使用传入的模型来保存到请求范围。
要什么只要在方法的参数中指明需要的东西,他会帮你传进来,这是注入依赖。
模型是一个数据存储的地方。

复制原先的list_student.jsp到views目录下。
看一下原来控制器的Key是什么:

在这里插入图片描述

list_student.jsp是到请求范围去取数据的,如果list_student.jsp可以正常工作,那就表示,数据有存到请求范围。

@GetMapping("/student/loadStus")
public String loadStus(Model model) throws Exception{
	StudentService stuService = new StudentServiceImpl();
	List<Student> stuList = stuService.loadStus();
	
	以key/value键值对形式保存到模型,其实就是保存到request范围(请求范围)
	model.addAttribute("stuList", stuList);

	return "list_student";//去到页面,叫list_student

	
}

测试:
访问/student/loadStus:
在这里插入图片描述
路径要改为resources:
在这里插入图片描述
在这里插入图片描述
可以了
但是两个页面之间还没有通过重定向连接起来。
修改方法loadStus的返回值即可:

	@PostMapping("/student/save")
	public String createStudent(Student stu) throws Exception{
		
		System.out.println(stu);
		
		
		StudentService stuService = new StudentServiceImpl();
		stuService.regStudent(stu);	
		
//		return null;
		return "redirect:/student/loadStus";
	}
	

测试:
在这里插入图片描述

在这里插入图片描述
可以跳转。
OK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值