Spring MVC框架介绍和表单处理,全局的乱码处理,个人解决404报错的经验【诗书画唱】
本篇专栏目录:
边看教程视频边做记录的部分
常见的框架
使用在Java Web项目的Spring MVC框架的关键是配置文件的base-package的值,其值代表其控制器类要放的包名
配置视图名称解析器
这个return ”index“的意思是:在当前配置文件的设置下表示要return跳转的界面是WEB-INF目录下的index.jsp
运行开启服务器后,输入图中的访问地址就有如图的运行效果
很多都是先从实现简单的效果开始,比如打印出”Hello World“,无论学习什么框架,vue,微信小程序等等都是先从最简单的部分开始,实现后就是开启了”新世界的大门“,因为最开始最关键的是环境的搭建等等。
关于Spring MVC框架的配置文件的注意事项
覆盖默认配置文件servlet-name的param-name和param-value设置
更方便的配置文件的param-name和param-value设置
配置文件servlet-name等的设置
下面的是更常用关于Spring MVC框架的web.xml的配置
@RequestMapping(“XXX”)中的XXX有时在某方面可以理解为类似于访问路径中的“包名”的作用
在Spring MVC框架中跳转到WEB-INF目录下的jsp文件的界面的方法(WEB-INF目录下的界面有时不可以直接访问等等,要通过控制器controller这个类似于servlet的文件的转发来实现跳转
在Spring MVC框架中的form框架的表单提交的话,也是要提交到要跳转到要接收提交过来的信息的界面。@RequestMapping中命名的值的话就是form中action中的值,就是提交表单时要跳转到的界面,本图中要注意option的value的赋值
图中我框起来的部分的内容的意思是:自动把jsp表单提交的内容封装到u这个User类中,通过打印语句来查看是否封装成功
在web.xml文件中的form表单提交时的数据的全局的乱码处理(在web.xml中配置乱码过滤器)
个人理解:Spring MVC框架很”聪明“,当你在form表单中的name的赋值和bean中实体类对应的属性名一致时,提交时name的赋值中对应的value的赋值就会赋值给实体类对应的属性名。因为如此,要做注册等的功能的实现的代码就会变得更少。
在控制器controller中设置跳转到一个jsp界面中用EL表达式获取其值的方法用put方法
个人的项目经验
项目例子记录
个人经验:
“http://localhost:8080/Spring5/textBug.jsp”
是我运行了textBug.jsp文件后获取的写明了端口号是8080
等的路径。有时候(比如导入别人的项目,改项目名等的时候)
如果报404,就是要先在WebContent目录下
创建一个jsp文件,这样的话,运行后,再输入controller的
访问路径后才访问得了某个界面,不然的话就算开启Servers,输入
正确的访问路径的话也会报错。





如果报404的错误,但代码没错,那么建议这样做
关于@RequestMapping和return后面的值的设置,一个是和访问路径有关,一个是和访问路径跳转到的界面的jsp文件名有关
开启servers服务器后浏览器输入访问的路径来获得运行效果(这个是Java Web中通用的运行方法,因为在Java Web中,WEB-INF目录下创建的jsp文件运行后就是会报404的错误)。

边看教程视频边做记录的部分 START


使用在Java Web项目的Spring MVC框架的关键是配置文件的base-package的值,其值代表其控制器类要放的包名






很多都是先从实现简单的效果开始,比如打印出”Hello World“,无论学习什么框架,vue,微信小程序等等都是先从最简单的部分开始,实现后就是开启了”新世界的大门“,因为最开始最关键的是环境的搭建等等。



下面的是更常用关于Spring MVC框架的web.xml的配置








图中我框起来的部分的内容的意思是:自动把jsp表单提交的内容封装到u这个User类中,通过打印语句来查看是否封装成功


个人理解:Spring MVC框架很”聪明“,当你在form表单中的name的赋值和bean中实体类对应的属性名一致时,提交时name的赋值中对应的value的赋值就会赋值给实体类对应的属性名。因为如此,要做注册等的功能的实现的代码就会变得更少。



边看教程视频边做记录的部分 END
个人的项目经验 START

“http://localhost:8080/Spring5/textBug.jsp”
是我运行了textBug.jsp文件后获取的写明了端口号是8080
等的路径。有时候(比如导入别人的项目,改项目名等的时候)
如果报404,就是要先在WebContent目录下
创建一个jsp文件,这样的话,运行后,再输入controller的
访问路径后才访问得了某个界面,不然的话就算开启Servers,输入
正确的访问路径的话也会报错。

个人的项目经验 END
项目例子记录 START

package com.SSHC.bean;
public class User {
private String name;
private String sex;
private String edu;
private String hobbys;
private String birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getsex() {
return sex;
}
public void setsex(String sex) {
this.sex = sex;
}
public String getEdu() {
return edu;
}
public void setEdu(String edu) {
this.edu = edu;
}
public String getHobbys() {
return hobbys;
}
public void setHobbys(String hobbys) {
this.hobbys = hobbys;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}

package com.SSHC.controller;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("test")
public class HelloController {
/**
*
* 个人经验:
“http://localhost:8080/Spring5/textBug.jsp”
是我运行了textBug.jsp文件后获取的写明了端口号是8080
等的路径。有时候(比如导入别人的项目,改项目名等的时候)
如果报404,就是要先在WebContent目录下
创建一个jsp文件,这样的话,运行后,再输入controller的
访问路径后才访问得了某个界面,不然的话就算开启Servers,输入
正确的访问路径的话也会报错。
*/
//http://localhost:8080/Spring5/test/hl
@RequestMapping("hl")
public String hello(){
System.out.println("Hello world");
return "index";
}
//http://localhost:8080/Spring5/test/pn
@RequestMapping("pn")
public String printNow(){
System.out.println(new Date());
return "pub/date";
}
}

package com.SSHC.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.SSHC.bean.User;
@Controller
public class UserController {
//http://localhost:8080/Spring5/addForm
@RequestMapping("addForm")
public String toAdd(){
return "addForm";
}
@RequestMapping(value = "reg",method = RequestMethod.POST)
public String doReg(@ModelAttribute("SpringWeb")User u,ModelMap mm){
//查看输入的值
System.out.println(u.getName());
System.out.println(u.getsex());
System.out.println(u.getEdu());
System.out.println(u.getHobbys());
System.out.println(u.getBirth());
String msg = "注册成功!诗书画唱提醒你该三连啦!";
/*request.setAttribute("_msg",msg);
【以前servlet的传值的方法,如今在Spring MVC框架中
被put替代*/
mm.put("_msg", msg);
return "info";
}
}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<h1>当前日期</h1>
</body>
</html>


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
*{
font-size: 50px;
}
</style>
</head>
<body>
<form action="reg" method="post">
<input type="text" name="name" placeholder="请输入姓名"/>
<br>
<input type="radio" name="sex" value="男"/>男
<input type="radio" name="sex" value="女"/>女
<br>
<select name="edu">
<option value="">请选择</option>
<option value="本科">本科</option>
<option value="大专">大专</option>
<option value="高中">高中</option>
<option value="初中">初中</option>
</select>
<br>
<input type="checkbox" name="hobbys" value="1"/>唱歌
<input type="checkbox" name="hobbys" value="2"/>街舞
<input type="checkbox" name="hobbys" value="3"/>滑冰
<input type="checkbox" name="hobbys" value="4"/>吉他
<br>
<input type="text" name="birth" placeholder="请输入生日" />
<br>
<input type="submit" value="提交" />
</form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<h1>Hello world</h1>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<h1>${_msg }</h1>
</body>
</html>

<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 扫描指定的包和它的子包中的所有java类 -->
<context:component-scan base-package="com.SSHC.controller"/>
<!-- 默认注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter类 -->
<mvc:annotation-driven />
<!-- jsp引用外部js,css等静态资源的解决方法(和上面的标签必须同时出现,否则无法访问url) -->
<mvc:default-servlet-handler />
<!-- 配置视图名称解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<!-- 将所有的jsp文件存放在/WEB-INF/my/目录下 -->
<property name="prefix" value="/WEB-INF/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
<!-- 优先级设定 -->
<property name="order" value="10"></property>
</bean>
</beans>

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Spring5</display-name>
<!-- controller中文乱码处理,注意一点:要配置在所有过滤器的前面 -->
<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>
<!-- springmvc框架配置 -->
<!-- DispatcherServlet是前置控制器,配置在web.xml文件中的。
拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,
依据相应的规则分发到目标Controller来处理,
是配置spring MVC的第一步。 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 覆盖默认配置文件{servlet-name}-servlet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</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>
开启servers服务器后浏览器输入访问的路径来获得运行效果(这个是Java Web中通用的运行方法,因为在Java Web中,WEB-INF目录下创建的jsp文件运行后就是会报404的错误)。









