HTTP之request请求

request:请求

    作用:获取浏览器发送过来的数据
组成部分:请求行 请求头 请求体
操作请求行
格式: 请求方式 请求资源 协议/版本
        常用方法:HttpServletRequest
掌握
String getMethod():获取请求方式
String getRemoteAddr():获取ip地址
String getContextPath() :在java中获取项目名称 (/day10) 了解:
getRequestURI():获取的是 从项目名到参数之前的内容 /day10/regist
getRequestURL():获取的带协议的完整路径 http://localhost/day10/regist
String getQueryString():get请求的所有参数 username=tom&password=123
String getProtocol():获取协议和版本 例如:请求行
GET /day10/row?username=tom&password=123 HTTP/1.1

案例1:请求头的方法

  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" id="WebApp_ID" version="3.1"> <servlet>
<servlet-name>RowServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.RowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RowServlet</servlet-name>
<url-pattern>/row</url-pattern>
</servlet-mapping> </web-app>

  RowServlet.java源码:

package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class RowServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求方式
String method = request.getMethod();
System.out.println("请求方式:"+method); //获取请求资源
String uri = request.getRequestURI();
String url = request.getRequestURL().toString();
System.out.println("uri:"+uri+" "+" url:"+url); //获取请求参数的字符串
String query = request.getQueryString();
System.out.println("请求参数字符串:"+query); //获取协议版本
String protocol = request.getProtocol();
System.out.println("协议版本:"+protocol); System.out.println("---------------------------以下为重要方法----------------------------"); //获取请求IP
String addr = request.getRemoteAddr();
System.out.println("请求IP:"+addr); //获取项目名
String contextPath = request.getContextPath();
System.out.println("项目名:"+contextPath);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

  启动项目,浏览器输入url“http://localhost:8080/Servlet/row?username=hjh&password=12345”,回车,eclipse中console输出为:

请求方式:GET
uri:/Servlet/row url:http://localhost:8080/Servlet/row
请求参数字符串:username=hjh&password=12345
协议版本:HTTP/1.1
---------------------------以下为重要方法----------------------------
请求IP:0:0:0:0:0:0:0:1
项目名:/Servlet

操作请求头

   格式:key/value(value可以是多个值)

常用方法:
★String getHeader(String key):通过key获取指定的value (一个) 了解:
Enumeration getHeaders(String name) :通过key获取指定的value(多个)
Enumeration getHeaderNames() :获取所有的请求头的名称
int getIntHeader(String key):获取整型的请求头
long getDateHeader(String key):获取时间的请求头
重要的请求头:
user-agent:浏览器内核 msie firefox chrome
referer:页面从那里来 防盗链

案例2:请求头

  web.xml配置:

 <servlet>
<servlet-name>HeaderServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.HeaderServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HeaderServlet</servlet-name>
<url-pattern>/header</url-pattern>
</servlet-mapping>

  HeaderServlet.java源码:

package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取浏览器内核
String user_agent = request.getHeader("user-agent");
System.out.println("浏览器内核:"+user_agent); //获取referer
String referer = request.getHeader("referer");
if(referer==null) {
System.out.println("直接在地址栏输入的");
}else if(referer.contains("localhost")) {
System.out.println("本机输入");
}else if(referer.contains("192.167.23.156")) {
System.out.println("其他人的");
}else {
System.out.println("兄弟,盗链可耻");
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

  启动项目,在浏览器中输入url  “http://localhost:8080/Servlet/header”,回车,在eclipse中查看console输出为:

浏览器内核:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
直接在地址栏输入的
操作请求参数 ★
username=tom&password=123&hobby=drink&hobby=sleep
常用方法:
String getParameter(String key):获取一个值
String[] getParameterValues(String key):通过一个key获取多个值
Map<String,String[]> getParameterMap():获取所有的参数名称和值

案例3:请求参数

  web.xml配置:

<servlet>
<servlet-name>ParamServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.ParamServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ParamServlet</servlet-name>
<url-pattern>/param</url-pattern>
</servlet-mapping>
ParamServlet.java源码:
package com.hjh.servlet.request;

import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 请求参数
*/
public class ParamServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取username
String username = request.getParameter("username");
System.out.println("用户名:"+username); //获取爱好hobby,多个
String[] hobby = request.getParameterValues("hobby");
System.out.println("爱好hobby:"+Arrays.toString(hobby)); //获取所有的请求参数
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
System.out.println(key+":"+Arrays.toString(map.get(key)));
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

  浏览器中输入以下url,回车:

http://localhost:8080/Servlet/param?username=hjh&password=8888&hobby=swimming&hobby=sport

  eclipse中console输出为:

用户名:hjh
爱好hobby:[swimming, sport]
username:[hjh]
password:[8888]
hobby:[swimming, sport]
请求的中文乱码
        对于get请求:参数追加到地址栏,会使用utf-8编码,服务器(tomcat7)接受到请求之后,使用iso-8859-1解码,所以会出现乱码
对于post请求,参数是放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码 通用的方法:
new String(参数.getBytes("iso-8859-1"),"utf-8");
针对于post请求来说:只需要将请求流的编码设置成utf-8即可
request.setCharacterEncoding("utf-8");

案例1:乱码问题

  web.xml配置:

<servlet>
<servlet-name>MessyCodeServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.MessyCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MessyCodeServlet</servlet-name>
<url-pattern>/mcode</url-pattern>
</servlet-mapping>
MessyCodeServlet.java源码
package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 请求中文乱码问题
*/
public class MessyCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+":"+password);
}
}

   messyCode.html页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/Servlet/mcode" method="post">
用户名:<input name="username"><br/>
密码:<input name="password"><br/>
<input type="submit">
</form>
</body>
</html>

  启动项目,浏览器中输入如下url,页面显示如下,输入“hjh 88888”,回车

  点击提交按钮,eclipse中console打印如下:

  浏览器中输入如下url,页面显示如下,输入“王大锤  12345”,回车

  点击提交按钮,eclipse中console打印如下,中文出现乱码:

  解决方式:在方法第一行加入以下代码:

//设置编码
request.setCharacterEncoding("utf-8");
域对象:
request:
创建:一次请求来的时候
销毁:响应生成的时候
作用:
一次请求里面的数据
请求转发(请求链,请求串)
request.getRequestDispatcher("内部路径").forward(request,response);

案例:请求转发,url不变

  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" id="WebApp_ID" version="3.1">
<servlet>
<servlet-name>TransmitServlet1</servlet-name>
<servlet-class>com.hjh.servlet.request.TransmitServlet1</servlet-class>
</servlet> <servlet>
<servlet-name>TransmitServlet2</servlet-name>
<servlet-class>com.hjh.servlet.request.TransmitServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TransmitServlet2</servlet-name>
<url-pattern>/transmit2</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>TransmitServlet1</servlet-name>
<url-pattern>/transmit1</url-pattern>
</servlet-mapping>
</web-app>

  

TransmitServlet1.java源码:
package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 请求转发:浏览器需某个资源,访问这个servlet 中没有,但是这个servlet知道哪里有;
* 这个servlet将路径告诉浏览器,浏览器根据这个路径再次访问资源
*
*/
public class TransmitServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//将请求者的姓名放入username
request.setAttribute("username", "hjh"); System.out.println(request.getServletPath()+":我这没你要的东西,去找XXX"); //请求转发
request.getRequestDispatcher("/transmit2").forward(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
} 
TransmitServlet2.java源码:
package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 请求转发
*/
public class TransmitServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getServletPath()+":是谁在找资源呀?是:"+
request.getAttribute("username")+";来来来,我给你");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

  浏览器中输入以下url,回车:

http://localhost:8080/Servlet/transmit1

   eclipse中console输出为:

/transmit1:我这没你要的东西,去找XXX
/transmit2:是谁在找资源呀?是:hjh;来来来,我给你

  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" id="WebApp_ID" version="3.1">
<servlet>
<servlet-name>TransmitServlet1</servlet-name>
<servlet-class>com.hjh.servlet.request.TransmitServlet1</servlet-class>
</servlet>
<servlet>
<servlet-name>TransmitServlet2</servlet-name>
<servlet-class>com.hjh.servlet.request.TransmitServlet2</servlet-class>
</servlet>
<servlet>
<servlet-name>MsgServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.MsgServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MsgServlet</servlet-name>
<url-pattern>/msg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TransmitServlet2</servlet-name>
<url-pattern>/transmit2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TransmitServlet1</servlet-name>
<url-pattern>/transmit1</url-pattern>
</servlet-mapping>
</web-app>

注册案例:

例2-步骤分析:
1.数据库和表(day09)
2.页面(表单)
给每个字段添加name属性
还需修改表单提交的路径 method=post
3.表单提交到一个servlet(RegistServlet)
4.RegistServlet:
操作:
接受数据,封装成一个user
调用UserSerivce完成保存操作 int regist(User user)
判断结果是否符合我们预期
若int=1; 插入成功
若int!=1; 插入失败
相应的提示信息在当前的servlet不做处理,将信息转发给另一个servlet展示(MsgServlet);
5.UserService
调用dao
6.userdao 通过dbutils在数据库中插入一条记录.

  建表:

   DataSourseUtils.java源码:

package com.hjh.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource; public class DataSourseUtils {
//建立连接池ds
private static ComboPooledDataSource ds = new ComboPooledDataSource(); //获取数据源
public static DataSource getDataSourse() {
return ds;
} //获取连接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
} //释放资源
public static void closeResourse(Connection conn,Statement st) {
try {
if(st!=null) {
st.close();
}else {
st = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}else {
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**释放资源closeResourse(conn,ps)*/
public static void closeResourse(Connection conn,PreparedStatement ps) {
try {
if(ps!=null) {
ps.close();
}else {
ps = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}else {
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**释放资源closeResourse(rs)*/
public static void closeResourse(ResultSet rs) {
try {
if(rs!=null) {
rs.close();
}else {
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  c3p0-config.xml,根据实际连接数据库配置,jdbcUrl加“?characterEncoding=UTF-8”是为了解决插入数据库数据中文乱码的问题:

<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
<!-- 基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost/hejh?characterEncoding=UTF-8</property>
<property name="user">root</property>
<property name="password">root</property> <!--扩展配置-->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config> <!-- 命名的配置 -->
<named-config name="XXX">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/xxxx</property>
<property name="user">root</property>
<property name="password">1234</property> <!-- 如果池中数据连接不够时一次增长多少个 -->
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">40</property>
<property name="maxStatements">20</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>

  register.html:

<!doctype html>

<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/Servlet/register" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="register"><br/>
</form> </body>

  RegisterServlet.java源码:

package com.hjh.servlet.request;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import com.hjh.domain.User;
import com.hjh.service.UserService; /**
* 用户注册
*/
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码,防止中文乱码
request.setCharacterEncoding("utf-8"); //2.封装数据
//推荐使用beanutils封装对象
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap()); //3.调用userService.register(user)方法,返回int
int i = new UserService().register(user); //4.判断int,将信息转发答msgServlet类,交由它处理
if(i==1) {
request.setAttribute("msg", "注册成功");
request.getRequestDispatcher("/msg").forward(request, response);
}else {
request.setAttribute("msg", "注册失败");
request.getRequestDispatcher("/msg").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

  MsgServlet.java源码:

package com.hjh.servlet.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MsgServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、设置编码
response.setContentType("text/html;charset=utf-8"); //2.从request域中获取msg信息
String msg = (String)request.getAttribute("msg"); //3.将msg打印到浏览器页面上
response.getWriter().print(msg);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

  UserService.java

package com.hjh.service;

import java.sql.SQLException;
import com.hjh.dao.UserDao;
import com.hjh.domain.User; public class UserService { public User login(String username, String password) {
User user = null;
try {
user = new UserDao().findUserByUsernameAndPassword(username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return user;
} public int register(User user) throws Exception {
//调用UserDao
UserDao dao = new UserDao();
return dao.register(user);
}
}

  UserDao.java源码

package com.hjh.dao;

import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.hjh.domain.User;
import com.hjh.util.DataSourseUtils; public class UserDao { public User findUserByUsernameAndPassword(String username, String password) throws SQLException {
//创建QueryRunner对象,操作sql语句
QueryRunner qr = new QueryRunner(new DataSourseUtils().getDataSourse()); //编写sql语句
String sql = "select * from user where username=? and password=?"; //执行sql BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
User user = qr.query(sql, new BeanHandler<User>(User.class),username,password); //返回user对象
return user;
} public int register(User user) throws Exception {
//创建QueryRunner对象,操作sql语句
QueryRunner qr = new QueryRunner(new DataSourseUtils().getDataSourse());
//编写sql语句
String sql = "insert into user(username,password) values(?,?)";
//执行sql
int i = qr.update(sql,user.getUsername(),user.getPassword());
return i;
}
}

  User.java源码

package com.hjh.domain;

public class User {

    private int id;
private String username;
private String password; public User() {}
public User(int id,String username,String password) {
this.id = id;
this.username = username;
this.password = password;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}

  web.xml配置:

 <servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.hjh.servlet.request.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>MsgServlet</servlet-name>
<url-pattern>/msg</url-pattern>
</servlet-mapping>

  浏览器中输入以下url:

   输入框输入:王大锤,12345

  点击register按钮,url显示:

  查看数据库表数据:

请求转发和重定向区别:
重定向发送两次请求,请求转发一次请求 重定向地址栏发生该表,请求转发不变 重定向是从浏览器发送,请求转发是服务器内部 重定向不存在request域对象,请求转发可以使用request域对象 重定向是response的方法,请求转发是request的方法 重定向可以请求站外资源,请求转发不可以

HTTP之request请求(注册)的更多相关文章

  1. javaWeb中request请求转发和response重定向

    1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL.  2.request.get Forward代码中的&q ...

  2. PHP Request请求封装

    /** * Request请求封装 * Class Request * @package tool */ class Request { // curl 请求错误码 protected static ...

  3. 监控微信小程序wx.request请求失败

    在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...

  4. Django视图函数之request请求与response响应对象

    官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...

  5. opa gatekeeper笔记:AdmissionReview input.request请求对象结构

    官方:https://v1-17.docs.kubernetes.io/zh/docs/reference/access-authn-authz/extensible-admission-contro ...

  6. springMVC中 request请求数据绑定到Controller入参 过程剖析

    前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...

  7. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  8. Java中request请求之 - 带文件上传的form表单

    常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类 ...

  9. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

随机推荐

  1. Java基础(业务问题)

    幂等的处理方式 一.查询与删除操作是天然幂等 二.唯一索引,防止新增脏数据 三.token机制,防止页面重复提交 四.悲观锁  for update 五.乐观锁(通过版本号/时间戳实现, 通过条件限制 ...

  2. Linux-c glib库hash表GHashTable介绍

    百度云glib  链接:https://pan.baidu.com/s/1W9qdlMKWRKIFykenTVuWNQ 密码:ol6y hash表是一种提供key-value访问的数据结构,通过指定的 ...

  3. Odoo models.py BaseModel

    class BaseModel(object): """ Base class for OpenERP models. OpenERP models are create ...

  4. css的层叠性+继承性+优先级+权重

    一.层叠性 1.含义 多种css样式叠加,浏览器处理冲突的能力. 2.原则 1>一般情况下,若出现冲突,会按照css的书写顺序,以最后的样式为准 2>样式不冲突,就不会层叠 二.css的继 ...

  5. java的堆栈通俗理解

    java内存模型有堆内存和栈内存, 初学者可能看官方解释很模糊 堆:new 出来的对象或者数组都存放在堆中: List <String> list =new ArrayList<St ...

  6. mysql 安装失败 start service执行不下去

    简单说一下自己安装mysql的经历坑点,新手应该都会遇到.新买了一个电脑,第一次安装的情况:在网上下载好几个不同的mysql,安装都在最后一步执行的时候,执行不下去,最后打开客户端,就是闪一下就消失了 ...

  7. leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval

    lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的in ...

  8. spring深入学习(六)-----springmvc

    MVC设计模式 有过一定开发经验的人肯定都知道这个模式,先简单介绍下这种模式,然后再去讨论为啥要这么设计: 传统的web应用中应该主要包括这些组件,不同组件负责不同的模块. 数据实体:POJO 数据层 ...

  9. Python子进程 (subprocess包)

    Python子进程 (subprocess包) subprocess以及常用的封装函数 当我们运行python的时候,我们都是在创建并运行一个进程.正如我们在Linux进程基础中介绍的那样,一个进程可 ...

  10. linux追加中文字库,解决imagemagick 中文乱码的问题。

    Windows下的字体丰富多样,而且显示的工整.漂亮. 所以自己想把windows上的字体移到Ubuntu下来.Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windo ...