SpringMvc从菜鸟到大拿完成蜕变

news2024/12/23 19:29:25

SpringMvc从菜鸟到大拿完成蜕

  1. 介绍
    1. Why springmvc

  1. Servlet缺点:
    1. servlet中的service:方法一次只能处理一类请求;单拿用户表来说,得需要创建五个Servlet;在url中输入的是urlpattern;默认只访问service方法;如何减少Servlet的个数呢?

增加了一个method参数;其他人有可能会喜欢叫oper;method名字随便起;

用户列表

/AdminsBackServlet?method=adminsList

用户添加

/AdminsBackServlet?method=adminsInsert

用户添加提交

/AdminsBackServlet?method=adminsInsertSubmit

用户更新

/AdminsBackServlet?method=adminsUpdate

用户更新提交

/AdminsBackServlet?method=adminsUpdateSubmit

用户删除

/AdminsBackServlet?method=adminsDelete

  1. 所有的servlet都得在web.xml中配置;一个项目有n个人开发;多个人同时修改一个文件;拆分文件;SpringMVC依托于Spring,Spring就支持配置文件拆分;
  2. 用户添加提交:里面包含了Servlet最全的代码;把Service和jsp连接起来了_*********
    1. 接收参数
    2. 处理参数(接收的参数全部是String)
    3. New一个对象
    4. 为对象赋值
    5. 调用Service的方法
    6. 将Service执行的结果存储到四大作用域;
  3. 文件上传的代码;commonfileupload
    1. 文件上传;如何接收二进制图片,如何接收字符串
    2. 上传文件限制大小
    3. 上传文件限制格式
  4. 过滤器也有不足
    1. 过滤器要拦截路径;路径里面支持*吗?文件名+*;/back*/head/*
    2. 过滤器new对象是tomcat new的,也需要调用Service查询数据库;(service交给了spring),过滤器咋办
    1. 介绍:
  1. SpringMVC它是一个mvc框架,开发模式;依托Spring,springmvc只需要一个jar包就可以;已经放到sping必须的包里面;
  2. Struts1,技术并不是很好;webwork;struts2+webwork结合起来出了一个struts2;
  3. springmvc有spring;spring把springmvc捧起来;三大框架整合的时候Spring不可替代;整合框架总是出现各种问题;纯Spring+springmvc spring团队,内部已经做过整合的问题;
  4. 流程

  1. 核心的Servlet:DispatcherServlet;父类是:FrameworkServlet;父类是:HttpServletBean;的父类是HttpServlet

  1. 先执行FrameworkServlet的service方法;有一段代码:super.service();

  1. 因为有了super.service方法,用户请求的时候先执行service方法,然后再执行dopost或者doget方法,doget调用了processRequestdoService(抽象的)
  2. DispatcherServlet中的doService(非抽象的),此方法中的doDispatch

处理器:

适配器

ModelAndView:

XML的适配器:

  1. 不用再写处理器和适配器了,因为SpringMVC已经默认配置好了

spring-webmvc-5.0.2.RELEASE.jar:/org/springframework/web/servlet/DispatcherServlet.properties

BeanNameUrlHandlerMapping:xml将bean的name和url关联起来;

RequestMappingHandlerMapping:注解中的requestMapping;类上面的requestMapping+方法上面的requestmapping;

就是从JSP-->Servlet;要把JSP的参数,变成JAVA的对象;

  1. 专门是为了解决此不足:
  1. 接收参数
  2. 处理参数(接收的参数全部是String)
  3. New一个对象
  4. 为对象赋值
  5. 调用Service的方法
  6. 将Service执行的结果存储到四大作用域;
  7. http请求不管是get还是post,发送的参数格式都是(字符串):

http://localhost:8080/项目名/a.html?a=1&b=2&c=3

  1. 实战
    1. Hw
  1. 创建一个web项目;一定要将项目发布到tomcat上,试着访问一下,不能出现404
  2. Web项目支持SpringMVC
    1. 添加jar包;将spingaop所需要的jar包,拷贝过来;
    2. 修改配置文件;
      1. Log4j2.xml;

<?xml version="1.0" encoding="UTF-8"?>

<!-- status=debug 可以查看log4j的装配过程 -->

<configuration status="off" monitorInterval="1800">

<appenders>

<!-- 定义控制台输出 -->

<Console name="Console" target="SYSTEM_OUT" follow="true">

<PatternLayout

pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />

</Console>

<!-- 系统打印日志 ,按照天记录日志;filePattern文件的格式-->

<RollingRandomAccessFile name="System"

fileName="logs/system.log" filePattern="logs/system_%d{yyyy-MM-dd}_%i.log">

<!-- 日志文件中内容的格式 -->

<PatternLayout

pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />

<Policies>

<!-- 一天记录的日志如果大于100m,重新再创建一个新的日志 -->

<TimeBasedTriggeringPolicy interval="1"

modulate="true" />

<SizeBasedTriggeringPolicy size="100M" />

</Policies>

</RollingRandomAccessFile>

</appenders>

<loggers>

<!-- Root Logger -->

<root level="info">

<!-- 引入了一个Console和System -->

<appender-ref ref="Console" />

<appender-ref ref="System" />

</root>

<!-- 外部日志,只记录到文件中,不记录到控制台中 -->

<logger name="SystemLog" level="info" additivity="false">

<appender-ref ref="System" />

</logger>

</loggers>

</configuration>

      1. 修改web.xml;web项目启动的时候加载web.xml,如果web.xml里面啥也木有
      2. 写,springmvc拷贝了jar包也木有用;

<?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>springmvc-01-hw</display-name>

<!-- 只能写servlet,filter,listener -->

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 初始化参数

此参数只能是此Servlet使用

context-param:所有的Servlet都能使用

 -->

<init-param>

<!--

contextConfigLocation:上下文的配置位置

Spring配置文件的路径:

从哪些地方加载Spring的配置文件

 -->

<param-name>contextConfigLocation</param-name>

<!--

从classpath中找配置文件

第一个*:表示从所有的classpath中找配置文件(包含jar包里面的)

第二个*:通配

 -->

<param-value>classpath*:applicationContext_*.xml</param-value>

</init-param>

<!-- tomcat一启动就初始化此Servlet

数字:如果tomcat启动的时候要初始化多个Servlet,它是按照数字的大小来的,

小的先启动,大的后启动

 -->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<!-- *.html(扩展名随便写)

给人的感觉到是html,静态页面,加载特别快;

seo:(搜索引擎喜欢静态页面)

*.do:是Struts1玩的

*.action:Struts2玩的

*.jsp:javaee有的

 -->

<url-pattern>*.html</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>

    1. 访问:

启动后如下图:

    1. 创建一个Controller--Servlet
      1. Xml配置

Java文件:Controller:

package com.calrinfo.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

/**

 * XML版本的Controller

 * @author wangshMac

 */

public class XMLController implements Controller

{

/**

 * 谁调用了此方法

 * Spring框架调用的

 * Service方法也是Tomcat调用的

 *

 * Tomcat调用了Servlet(Spring的DispatcherServlet-->自己写的类),

 * 只要有Request和Response就可以工作了

 *

 * ModelAndView:模型和视图

 */

@Override

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception

{

System.out.println(request + "======" + response);

/* 赶紧跳转jsp

 * 服务器端跳转

 * 客户端跳转

 *  */

ModelAndView modelAndView = new ModelAndView() ;

/**

 * 参数是JSP的路径

 * 服务器端跳转

 */

modelAndView.setViewName("/WEB-INF/jsp/xmlController.jsp");

return modelAndView;

}

}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入Schema 为什么要引入schema或者dtd 因为引入了就有提示了 -->

<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:aop="http://www.springframework.org/schema/aop"

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

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop.xsd"

    default-autowire="byName">

    <!-- 自动按照名字装配 -->

    <!-- 一定要加上此配置,否则注解不起作用 -->

    <context:component-scan base-package="com"/>

    

    <!--

     name:就是url的访问路径;

     http://localhost:8080/项目名/bean的name

     一定要注意,扩展名和servleturlpattern配置的名字一样

     -->

    <bean id="xmlController" name="/xmlController.html" class="com.calrinfo.springmvc.controller.XMLController"></bean>

</beans>

      1. 注解版本

Java代码:Controller

package com.calrinfo.springmvc.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

 * 注解不用写名字,

 * 写了也木有人调用

 * @author wangshMac

 *

 */

@Controller

public class AnnoController

{

/**

 * 随便定义一个方法

 *

 * http://localhost:8080/项目名/类上面的requestMapping+方法上面的requestMapping;

 * @RequestMapping:后面不加扩展名,不加,系统会自动的加上去

 * @return

 */

@RequestMapping("/hw")

public String hw()

{

System.out.println("==AnnoController==hw=");

/*

 * 默认就是服务器端跳转

 *  */

return "/WEB-INF/jsp/xmlController.jsp" ;

}

@RequestMapping("/test")

public String test()

{

System.out.println("==AnnoController==test=");

/*

 * 默认就是服务器端跳转

 *  */

return "/WEB-INF/jsp/xmlController.jsp" ;

}

}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入Schema 为什么要引入schema或者dtd 因为引入了就有提示了 -->

<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:aop="http://www.springframework.org/schema/aop"

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

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop.xsd"

    default-autowire="byName">

    <!-- 自动按照名字装配 -->

    <!-- 一定要加上此配置,否则注解不起作用 -->

    <context:component-scan base-package="com"/>

    

    <!--

     name:就是url的访问路径;

     http://localhost:8080/项目名/bean的name

     一定要注意,扩展名和servleturlpattern配置的名字一样

     -->

    <bean id="xmlController" name="/xmlController.html" class="com.calrinfo.springmvc.controller.XMLController"></bean>

</beans>

使用注解多好,为啥还要讲xml;

先有的xml后有注解,xml功能最全;

注解就是封装了xml;

适配器,处理器

    1. 标准配置

Web.xml中的/和/*

标准化的springmvc中的前缀和后缀

注解Controller中的return:返回值:客户端跳转和服务器端跳转;

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>springmvc-02-config</display-name>

<!-- 只能写servlet,filter,listener -->

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 初始化参数

此参数只能是此Servlet使用

context-param:所有的Servlet都能使用

 -->

<init-param>

<!--

contextConfigLocation:上下文的配置位置

Spring配置文件的路径:

从哪些地方加载Spring的配置文件

 -->

<param-name>contextConfigLocation</param-name>

<!--

classpath中找配置文件

第一个*:表示从所有的classpath中找配置文件(包含jar包里面的)

第二个*:通配

 -->

<param-value>classpath*:applicationContext_*.xml</param-value>

</init-param>

<!-- tomcat一启动就初始化此Servlet

数字:如果tomcat启动的时候要初始化多个Servlet,它是按照数字的大小来的,

小的先启动,大的后启动

 -->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<!--

/:如果直接访问css,html,js(静态资源文件),是不可以的;jsp和Controller是可以的,

/*:都会访问SpringMVC,但是在从Controller跳转到JSP的时候都不行,直接访问静态资源文件都不可以

静态资源文件,如果想可以,得需要配置;

个人建议:使用*.html(扩展名)

 -->

<url-pattern>*.html</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>

配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入Schema 为什么要引入schema或者dtd 因为引入了就有提示了 -->

<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:aop="http://www.springframework.org/schema/aop"

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

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop.xsd

        http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc.xsd"

    default-autowire="byName">

    <!-- 自动按照名字装配 -->

    <!-- 一定要加上此配置,否则注解不起作用 -->

    <context:component-scan base-package="com"/>

    

    <!-- 让静态资源文件可以访问 -->

    <!-- <mvc:default-servlet-handler/> -->

    

    <!-- 需求:

     我建议将所有的JSP都放到WEB-INF下面;

     把所有的JSP从WEB-INF挪到WebContent根目录里面去

     -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

     <!-- 为所有服务器跳转,客户端跳转的jsp路径增加上前缀和后缀

      -->

      <!-- 前缀 ,注意/可以多加,但是不能不加-->

      <property name="prefix" value="/WEB-INF/jsp/"/>

      <!-- 后缀 -->

      <property name="suffix" value=".jsp"/>

    </bean>

</beans>

Controller

package com.calrinfo.springmvc.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

 * 目录的Controller

 * @author wangshMac

 */

@Controller

@RequestMapping("/folder/")

public class FolderController

{

/**

 * 随便定义一个方法

 *

 * http://localhost:8080/项目名/类上面的requestMapping+方法上面的requestMapping;

 * @RequestMapping:后面不加扩展名,不加,系统会自动的加上去

 * @return

 */

@RequestMapping("/hw")

public String hw()

{

System.out.println("==FolderController==hw=");

/*

 * 默认就是服务器端跳转

 *

 * 返回的jsp路径:

 * InternalResourceViewResolver的前缀+方法的返回值+后缀

 * 如果return null,默认就是类上面的requestmapping+方法上面的requestMapping

 *  */

return "xmlController" ;

/*return null ; */

/*return "" ; */

}

@RequestMapping("/folder_01")

public String folder_01()

{

System.out.println("==FolderController==folder_01=");

/* 默认是服务器端跳转到jsp */

/*return "folder_01" ; */

/* 默认前面加了一个forward;得把路径写全了*/

/*return "forward:/WEB-INF/jsp/folder_01.jsp" ; */

/* 服务器端跳转到另外一个Controller方法;

 * 扩展名不能省略 */

/*return "forward:/folder/hw.html" ;*/

/* 客户端跳转到另外一个Controller中的方法 */

/*return "redirect:/folder/hw.html" ;*/

/* 客户端跳转的时候,url会发现变化,跳转到任何网址 */

return "redirect:http://www.baidu.com" ;

}

}

    1. 驱动分以下三块-*******************************
  1. url赋值

Java代码:

package com.carlinfo.springmvc.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

/**

 * url赋值

 * @author wangshMac

 */

@Controller

@RequestMapping("/url/")

public class UrlController

{

/**

 * url赋值

 *

 * @PathVariable:此值为方法参数,从url中获取;在requestMapping定义的时候,用{变量名},变量名

 * 必须是方法的参数,两者一样

 * ~接收参数的时候全部是字符串,(接收参数);转换为各种各样的类型,处理参数

 * 凡是400错误,都是处理参数出问题了.

 * http://localhost:10001/springmvc-03-driver/url/method01_10_a.html

 * 在url中对应的requestMapping;一定要对应上去,把requstmapping中的{};在url中理解为任何字符

 *

 * 原:http://localhost:10001/springmvc-03-driver/url/usersInfo.html?id=10

 * 目标:http://localhost:10001/springmvc-03-driver/url/10.html

 *

 * https://item.jd.com/goodsInfo.html?id=4325123

 * https://item.jd.com/4325123.html

 * https://item.jd.com/5001175.html

 * 把?后面的参数挪到?的前面;urlRewrite;

 * REST:有含义的url;

 * SEO喜欢;?左边的是url,?后面的都不认识;将原来的一个url变成了多个url,让SEO多收录一些;

 * @return

 */

@RequestMapping("/method01_{id}_{age}")

public String method01(@PathVariable String id,@PathVariable int age)

{

System.out.println("=UrlController===method01=");

System.out.println("==id==" + id);

System.out.println("==age==" + age);

return "method01" ;

}

}

  1. 基本数据类型赋值字符串
  2. 对象赋值

Java代码:

package com.carlinfo.springmvc.controller;

import java.util.Arrays;

import java.util.List;

import java.util.Map;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.carlinfo.springmvc.pojo.AAdmins;

/**

 * 表单操作

 * @author wangshMac

 *

 */

@Controller

@RequestMapping("/form/")

public class FormController

{

/**

 * 表单打开

 *springmvc-03-driver/form/formInsert.html?name=a&age=20&score=30.2

 *name=a&age=20&score=30.2:表单提交的参数(get,post)

 *省去了自动接收参数,

 *自动处理参数;

 *如果参数的类型是非String,千万不要发生类型转换的错误问题

 *参数的名字要类请求参数中键值对 键的名字一样

 *

 *页面打开的时候,就传值(get方式)

 * @return

 */

@RequestMapping("/formInsert")

public String formInsert(String name,int age , double score)

{

System.out.println("===FormController====formInsert=");

System.out.println("==name==" + name);

System.out.println("==age==" + age);

System.out.println("==score==" + score);

return "formInsert" ;

}

/**

 * 表单打开提交

 *

 * (是表单提交的时候传值)post方式;

 * post和get:post提交:只能是表单提交,而且method=post,其它的全部是get提交

 *

 * ~自动接收参数

 * ~自动处理参数

 * ~自动的new对象

 * ~自动的为对象赋值

 *

 * ~不足:为啥不能将方法中的参数放到四大作用域中

 *

 * ~对象的属性名得和参数键值对中键的名字一样,键的名字在表单提交时就是控制的name属性

 * 如果请求中有多个键,值是字符串,用逗号隔开;

 * 数组接口,可以,List接口不行

 * Map:虽然不报错,但是也不是我们想要的;

 * @return

 */

@RequestMapping("/formInsertSubmit")

public String formInsertSubmit(String name,int age , double score,

byte sex,int cityId,

//String hobbys,

//String[] hobbys,

//List hobbys,

Map<String, String> hobbys,

AAdmins admins)

{

System.out.println("===FormController====formInsertSubmit=");

System.out.println("==name==" + name);

System.out.println("==age==" + age);

System.out.println("==score==" + score);

System.out.println("==admins==" + admins);

System.out.println("==sex==" + sex);

System.out.println("==cityId==" + cityId);

//System.out.println("==hobbys==" + Arrays.toString(hobbys));

System.out.println("==hobbys==" + hobbys);

return "formInsert" ;

}

}

AAdmins的POJO

package com.carlinfo.springmvc.pojo;

/**

 * 管理员的POJO

 *

 * @author wangshMac

 *

 */

public class AAdmins

{

private String name;

private int age;

private double score;

Set/get方法

@Override

public String toString()

{

return "AAdmins [name=" + name + ", age=" + age + ", score=" + score + "]";

}

}

Jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="${pageContext.request.contextPath }/form/formInsertSubmit.html" method="post">

<input type="hidden" name="id" value="1">

<table border="1">

<tr>

<td>邮箱:</td>

<td><input type="text" name="name" value="22@22.com"></td>

</tr>

<tr>

<td>年龄:</td>

<td><input type="text" name="age" value="10"></td>

</tr>

<tr>

<td>分数:</td>

<td><input type="text" name="score" value="10.2"></td>

</tr>

<tr>

<td>性别:</td>

<td>

<label for="sex0">

<input type="radio" name="sex" value="0" id="sex0">

</label>

<label for="sex1">

<input type="radio" name="sex" value="1" id="sex1">

</label>

</td>

</tr>

<tr>

<td>城市</td>

<td>

<select name="cityId">

<option value="0">北京</option>

<option value="1">郑州</option>

<option value="2">朱仙傎</option>

</select>

</td>

</tr>

<tr>

<td>爱好:</td>

<td>

<label for="hobbys0">

<input type="checkbox" name="hobbys" value="0" id="hobbys0">逃课

</label>

<label for="hobbys1">

<input type="checkbox" name="hobbys" value="1" id="hobbys1">

</label>

<label for="hobbys2">

<input type="checkbox" name="hobbys" value="2" id="hobbys2">谈恋爱

</label>

</td>

</tr>

<tr>

<td>个性签名:</td>

<td>

<textarea rows="5" cols="50" name="intro">adfasfasfasf</textarea>

</td>

</tr>

<tr>

<td colspan="2"><input type="submit" value="提交"></td>

</tr>

</table>

</form>

从四大作用域中取值

name:${name }<br/>

</body>

</html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云CVM S5服务器优惠价格表,买一年送3个月

腾讯云服务器CVM标准型S5有活动&#xff0c;CVM 2核2G S5优惠价280.8元一年自带1M带宽&#xff0c;15个月313.2元、2核4G配置748.2元15个月、4核8G配置1437.24元15个月、8核16G优惠价3048.48元15个月&#xff0c;公网带宽可选1M、3M、5M或10M&#xff0c;腾讯云服务器网txyfwq.…

【算法练习Day39】单词拆分多重背包的介绍

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 单词拆分多重背包总结&…

[BUUCTF NewStar 2023] week5 Crypto/pwn

最后一周几个有难度的题 Crypto last_signin 也是个板子题&#xff0c;不过有些人存的板子没到&#xff0c;所以感觉有难度&#xff0c;毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 from Crypto.Util.number import * flag b?e 655…

Winform 实现俄罗斯方块游戏(一)

第一步&#xff0c;先用GDI绘制小正方形方块&#xff0c;其它形状的用这个方块合成 如何绘制一个方块&#xff1f;先绘制两个正方形&#xff0c;如下&#xff1a; 然后四周用梯形填充&#xff0c;内部颜色用渐变&#xff0c;这样更有立体感&#xff0c;下篇介绍如何实现。

D-link未授权访问以及远程代码执行

随便输入一个错误密码&#xff0c;会跳转到页面&#xff1a; /page/login/login.html?errorfail继续访问有效页面漏洞url&#xff1a; /Admin.shtml然后访问管理页面去更改管理密码 直接构造payload访问漏洞url&#xff1a; /cgi-bin/execute_cmd.cgi?cmdid执行命令&#…

2023年11月5日网规考试备忘

早上题目回忆&#xff1a; pki体系 ipsec&#xff0c;交换安全&#xff08;流量抑制&#xff09; aohdlc bob metclaf —ethernet pon tcp三次握手 OSPF lsa&#xff1f;交换机组ospf配置问题&#xff0c;ping网关可通&#xff0c;AB不通 raid6 300G*8 网络利用率 停等协议10…

腾讯云CVM S5服务器4核8G配置性能测评和优惠价格表

腾讯云4核8G服务器CVM标准型S5实例性能测评&#xff0c;包括CPU型号、内存、系统盘、CVM实例规格性能测评&#xff0c;腾讯云4核8G租用优惠价格表&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云4核8G服务器CVM S5性能测评和优惠价格表&#xff1a; 腾讯云4核8G服务器CVM S5性…

dupeGuru 清理微信重复文件

本文摘录于&#xff1a;https://www.bilibili.com/video/BV13p4y1G75Y/?spm_id_from333.337.search-card.all.click&vd_source483e5c52353ea59d1a5eadac7737591a只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 微信用了七八年,文件…

Java异常你还没有了解吗?

&#x1f937;‍♀️&#x1f937;‍♀️&#x1f937;‍♀️ 今天和大家一起学习一下Java中的异常&#xff01; 清风的CSDN博客个人主页 &#x1f302;c/java领域新星创作者 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我…

【JavaScript】window 对象、location 对象、navigator 对象和 history 对象

1. window 对象 BOM (Browser Object Model ) 是浏览器对象模型&#xff1a; window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的所有通过var定义在全…

【Java 进阶篇】JSP 简单入门

在现代Web开发中&#xff0c;JavaServer Pages&#xff08;JSP&#xff09;是一项非常重要的技术。JSP允许开发者将Java代码嵌入HTML页面&#xff0c;以实现动态内容的生成和呈现。本文将详细介绍JSP的概念、原理以及如何使用JSP来构建Web应用程序。 第一部分&#xff1a;JSP …

基于Google Colaboratory安装Go语言编译器操作流程

文章目录 1. 什么是Google Colaboratory2. 访问Google Colaboratory3. 创建新的笔记本4.【方法①】使用apt命令安装golang5.【方法②】使用Go安装包安装golang6. 参考链接 1. 什么是Google Colaboratory Colab是一种托管的笔记本电脑服务&#xff0c;不需要安装即可使用&#x…

Perl安装教程

1. perl简介 Perl 是 Practical Extraction and Report Language 的缩写&#xff0c;可翻译为 “实用报表提取语言”。Perl 是高级、通用、直译式、动态的程序语言。Perl 最初的设计者为拉里沃尔&#xff08;Larry Wall&#xff09;&#xff0c;于1987年12月18日发表。Perl 借…

PCTA认证考试-01_TiDB数据库架构概述

TiDB 数据库架构概述 一、学习目标 理解 TiDB 数据库整体结构。了解 TiDB Server&#xff0c;TiKV&#xff0c;TiFlash 和 PD 的主要功能。 二、TiDB 体系架构 1. TiDB Server 2. TiKV OLTP 3. Placement Driver 4. TiFlash OLAP OLTPOLAPHTAP

【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库

为什么需要开发自己的 Go 库 在编程语言中&#xff0c;包&#xff08;Package&#xff09;和库&#xff08;Library&#xff09;是代码组织和复用的重要工具。在 Go 中&#xff0c;包是代码的基本组织单位&#xff0c;每个 Go 程序都由包构成。包的作用是帮助组织代码&#xf…

高等数学教材重难点题型总结(十二)无穷级数

最后一更&#xff01;原谅博主已经开始瞎写字了&#xff0c;最近压力太大&#xff0c;以后有时间用mathPix打出来&#xff0c;看起来更舒适一些~ 高数最后一章&#xff0c;重点在于审敛法和求解幂级数的收敛半径~ 高数基础笔记全部更新完毕&#xff0c;共12*336期&#xff0c…

【qemu逃逸】华为云2021-qemu_zzz

前言 虚拟机用户名&#xff1a;root 无密码 设备逆向 经过逆向分析&#xff0c;可得实例结构体大致结构如下&#xff1a; 其中 self 指向的是结构体本身&#xff0c;cpu_physical_memory_rw 就是这个函数的函数指针。arr 应该是 PCI 设备类结构体没啥用&#xff0c;就直接用…

动态规划算法实现0-1背包问题Java语言实现

问题介绍&#xff1a; 动态规划算法&#xff1a; 动态规划&#xff08;Dynamic Programming&#xff09;是一种解决多阶段决策问题的优化算法。它通过将问题分解为一系列子问题&#xff0c;并利用子问题的解来构建更大规模问题的解&#xff0c;从而实现对整个问题的求解。 动态…

五子棋对战测试报告

目录 一、项目背景 二、项目功能 三、功能测试 1、注册页面测试 测试用例 测试结果 测试总结 2、登录页面测试 测试用例 测试结果 测试总结 3、游戏大厅页面测试 测试用例 测试结果 测试总结 4、游戏房间页面测试 测试用例 测试结果 测试总结 一、项目背景 …

物联网AI MicroPython传感器学习 之 无源蜂鸣器

一、产品简介 蜂鸣器是一种将音频信号转化为声音信号的发音器件传感器&#xff0c;通过利用压电效应原理&#xff0c;当对其施加交变电压时产生机械振动。应用场景&#xff1a;在家用电器、电子玩具、游戏机等场景下都得到普遍应用&#xff0c;通过设置不同的频率&#xff0c;…