欢迎光临散文网 会员登陆 & 注册

Spring MVC框架介绍和表单处理,全局的乱码处理,个人解决404报错的经验【诗书画唱】

2021-03-19 11:14 作者:诗书画唱  | 我要投稿

本篇专栏目录:

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

常见的框架

使用在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的错误,但代码没错,那么建议这样做

如果报404的错误,但代码没错,那么建议这样做 




关于@RequestMapping和return后面的值的设置,一个是和访问路径有关,一个是和访问路径跳转到的界面的jsp文件名有关



开启servers服务器后浏览器输入访问的路径来获得运行效果(这个是Java Web中通用的运行方法,因为在Java Web中,WEB-INF目录下创建的jsp文件运行后就是会报404的错误)。


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



常见的框架


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

使用在Java Web项目的Spring MVC框架的关键是配置文件的base-package的值,其值代表其控制器类要放的包名
配置视图名称解析器
这个return ”index“的意思是:在当前配置文件的设置下表示要return跳转的界面是WEB-INF目录下的index.jsp
运行开启服务器后,输入图中的访问地址就有如图的运行效果


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


关于Spring MVC框架的配置文件的注意事项
覆盖默认配置文件servlet-name的param-name和param-value设置 
配置文件servlet-name等的设置




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

更方便的配置文件的param-name和param-value设置

@RequestMapping(“XXX”)中的XXX有时在某方面可以理解为类似于访问路径中的“包名”的作用
在Spring MVC框架中跳转到WEB-INF目录下的jsp文件的界面的方法(WEB-INF目录下的界面有时不可以直接访问等等,要通过控制器controller这个类似于servlet的文件的转发来实现跳转
在Spring MVC框架中的form框架的表单提交的话,也是要提交到要跳转到要接收提交过来的信息的界面。@RequestMapping中命名的值的话就是form中action中的值,就是提交表单时要跳转到的界面,本图中要注意option的value的赋值
图中我框起来的部分的内容的意思是:自动把jsp表单提交的内容封装到u这个User类中,通过打印语句来查看是否封装成功

图中我框起来的部分的内容的意思是:自动把jsp表单提交的内容封装到u这个User类中,通过打印语句来查看是否封装成功
在web.xml文件中的form表单提交时的数据的全局的乱码处理(在web.xml中配置乱码过滤器)


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


个人理解:Spring MVC框架很”聪明“,当你在form表单中的name的赋值和bean中实体类对应的属性名一致时,提交时name的赋值中对应的value的赋值就会赋值给实体类对应的属性名。因为如此,要做注册等的功能的实现的代码就会变得更少。
在控制器controller中设置跳转到一个jsp界面中用EL表达式获取其值的方法用put方法




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


个人的项目经验 START

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

关于@RequestMapping和return后面的值的设置,一个是和访问路径有关,一个是和访问路径跳转到的界面的jsp文件名有关




个人的项目经验 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的错误)。



http://localhost:8080/Spring5/test/hl
http://localhost:8080/Spring5/test/pn
http://localhost:8080/Spring5/addForm





项目例子记录 END


Spring MVC框架介绍和表单处理,全局的乱码处理,个人解决404报错的经验【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律