码迷,mamicode.com
首页 > 其他好文 > 详细

Select总结

时间:2020-03-24 23:41:47      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:工具   word   mic   ica   vue   之间   out   obj   客户端   

什么是Servlet?

??Servlet: Server applet : 服务端的小程序.Servlet就是服务端一个用于接收客户端的请求和向客户端做出响应的程序。

??Servlet 是运行在 Web 服务器或应用服务器上的 java 程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户数据,呈现来自数据库或者其他源的记录,还可以动态创建网页。

??在实际工作中,Servlet的概念,分为狭义和广义的.

??狭义的Servlet是一个小程序.

??广义的servlet其实是一个Java类,是一个实现了Servlet接口的类.

Servlet的作用?

Servlet 执行以下主要任务:

  1. 读取客户端信息(传递的信息,请求头信息).(获取客户端数据)
  2. 处理信息.(处理数据)
  3. 响应数据.(返回数据: 业务数据,响应头信息).

如何实现Servlet:

Servlet: Java类,是一个实现了Servlet的类.

  1. 创建一个类

  2. 实现Servlet接口

   package com.sxt.controller;
   
   import java.io.IOException;
   
   import javax.servlet.ServletException;
   import javax.servlet.ServletRequest;
   import javax.servlet.ServletResponse;
   import javax.servlet.http.HttpServlet;
   
   public class ServletDemo01 extends HttpServlet  {
   
   	private static final long serialVersionUID = -2597540888550505998L;
   	
   	@Override
   	public void init() throws ServletException {
   		System.out.println("====init====");
   	}
   
   
   	@Override
   	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
   		System.out.println("====service====");
   		// 读取谁的?
   	}
   
   	@Override
   	public void destroy() {
   		System.out.println("====destroy====");
   	}
   
   }
  1. 注册Servlet

  2. 配置Servlet 提供访问方式

     <!-- 注册Servlet -->
     <servlet>
     	<!-- servlet别名 -->
     	<servlet-name>ergou</servlet-name>
     	<!-- Servlet类的全路径 -->
     	<servlet-class>com.sxt.controller.ServletDemo01</servlet-class>
     </servlet>
     
     <!-- 配置Servlet 提供访问方式 -->
     <servlet-mapping>
     	<!-- servlet别名 -->
     	<servlet-name>ergou</servlet-name>
     	<!-- servlet的访问地址  -->
     	<url-pattern>/ergou.html</url-pattern>
     </servlet-mapping>

Servlet生命周期

??在Servlet中,Servlet是单例模式的.每个Servlet类,有且只有一个对象.

??init方法,默认会在第一次访问时执行,且只执行一次,一般用于初始化Servlet信息.

??detory方法,默认会在服务器停止时执行,且只执行一次,用于销毁Servlet对象.

??service方法,默认会在每次有访问请求时执行,每次请求都会执行.用于处理请求.

??init----> service ----> detory 这就是Servlet生命周期.

注意:

??Servlet是单例的,所以Servlet是非线程安全的.一般在使用Servlet时,不建议定义成员变量.

Servlet执行流程

技术图片

Servlet的功能

接收客户端信息:HttpServletRequest

form表单信息

package com.sxt.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestServlet extends HttpServlet {
	
	private static final long serialVersionUID = 4858130557364545084L;
	/**
	 * 当是  get请求时  执行
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet");
//		String userName = req.getParameter("userName");
//		String password = req.getParameter("password");
//		String selectName = req.getParameter("selectName");
//		String[] likes = req.getParameterValues("like");
//		String sex = req.getParameter("sex");
//		String textName = req.getParameter("textName");
//		
//		System.out.println("userName: "+userName);
//		System.out.println("password: "+password);
//		System.out.println("selectName: "+selectName);
//		System.out.println("likes: "+Arrays.toString(likes));
//		System.out.println("sex: "+sex);
//		System.out.println("textName: "+textName);	
	}
	
	/**
	 * 当是 post请求时 执行
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		System.out.println("doPost");
		String userName = req.getParameter("userName");
		String password = req.getParameter("password");
		String selectName = req.getParameter("selectName");
		String[] likes = req.getParameterValues("like");
		String sex = req.getParameter("sex");
		String textName = req.getParameter("textName");
		
		System.out.println("userName: "+userName);
		System.out.println("password: "+password);
		System.out.println("selectName: "+selectName);
		System.out.println("likes: "+Arrays.toString(likes));
		System.out.println("sex: "+sex);
		System.out.println("textName: "+textName);
		
		// 获取所有表单数据的  name值
		Enumeration<String> parameterNames = req.getParameterNames();
		//遍历所有的name值
		while(parameterNames.hasMoreElements()) {
			System.out.println("name值:"+parameterNames.nextElement());
		}
		System.out.println("==========================");
		//将 所有的请求参数 封装成一个Map 集合
		Map<String, String[]> parameterMap = req.getParameterMap();
		//获取所有的key
		Set<String> names = parameterMap.keySet();
		for (String name : names) {
			System.out.println(name +":"+Arrays.toString(parameterMap.get(name)));
		}
		Map<String, Object> paramMap = paramMap(parameterMap);
		System.out.println("转化后的:"+paramMap);
		
	}
	
	/**
	 * 将存储封装一个map
	 * @return
	 */
	public Map<String,Object> paramMap(Map<String, String[]> parameterMap){
		Map<String,Object> map = new HashMap<String, Object>();
		//获取所有的key
		Set<String> keys = parameterMap.keySet();
		for (String key : keys) {
			String[] values = parameterMap.get(key);
			Object value = null;
			if(values != null &&values.length == 1 && values[0] != "") {
				value = values[0];
			}else if(values != null && values.length > 1) {
				List<String> data = new ArrayList<String>();
				for (String v : values) {
					data.add(v);
				}
				value = data;
			}
			map.put(key,value);
		}
		return map;
	}

}

获取作用域信息

package com.sxt.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AttributeServlet extends HttpServlet {
	
	private static final long serialVersionUID = 4858130557364545084L;
	/**
	 * 当是  get请求时  执行
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet");
		//getAttribute(name值) : 根据name值从 request 作用域中 获取对应值
		//getAttributeNames() : 获取作用域中,所有属性名称
		//setAttribute(name,value) : 设置request作用域中的属性值
		// 设置属性值
		req.setAttribute("key1", "value1");
		req.setAttribute("key2", "value2");
		req.setAttribute("key3", "value3");
		System.out.println(""+req.getAttribute("key1"));
		
		Enumeration<String> attributeNames = req.getAttributeNames();
		while(attributeNames.hasMoreElements()) {
			System.out.println(attributeNames.nextElement());
		}
	}
	
	/**
	 * 当是 post请求时 执行
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
	
}

获取其他作用域对象

package com.sxt.controller;

import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ScopeServlet extends HttpServlet {
	
	private static final long serialVersionUID = 4858130557364545084L;
	/**
	 * 当是  get请求时  执行
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet");
		//获取其他作用域 
		//获取session作用域
		HttpSession session = req.getSession();
		session.setAttribute("sessionKey", "sessionValue");
		// 获取 application 作用域
		ServletContext application = req.getServletContext();
		application.setAttribute("applicationKey", "applicationValue");
	}
	
	/**
	 * 当是 post请求时 执行
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
	
}

获取网络请求信息

package com.sxt.controller;

import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class HttpInfoServlet extends HttpServlet {
	
	private static final long serialVersionUID = 4858130557364545084L;
	/**
	 * 当是  get请求时  执行
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取请求的方法  :  get   post
		String method = req.getMethod();
		System.out.println(method);
		// 获取请求的资源路径   
		String uri = req.getRequestURI();
		System.out.println(uri);
		// 获取请求URL地址  http://127.0.0.1:8080/sxt/servlet.do
		String url = req.getRequestURL().toString();
		System.out.println(url);
		// 请求端口
		int remotePort = req.getRemotePort(); //客户端端口
		System.out.println(remotePort);
		int localPort = req.getLocalPort(); //服务器本地端口
		System.out.println(localPort);
		String remoteHost = req.getRemoteHost(); //客户端IP
		String localAddr = req.getLocalAddr(); // 服务器IP
		System.out.println("remoteHost:"+remoteHost);
		System.out.println("localAddr:"+localAddr);
		//设置请求的编码
		req.setCharacterEncoding("UTF-8");
		//获取请求头信息 :  Map  :  key -- value
		String language = req.getHeader("Accept-Language");
		System.out.println(language);
	}
	
	/**
	 * 	当是 post请求时 执行
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
	
}

重定向和内部转发

//resp.sendRedirect("地址");  重定向
resp.sendRedirect("scope.jsp");
// 内部转发  req.getRequestDispatcher("scope.jsp").forward(req, resp); 
req.getRequestDispatcher("scope.jsp").forward(req, resp);

获取文件信息

req.getPart("name") : 根据name值,获取对应part数据

向客户端响应数据:HttpServletResponse

package com.sxt.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseServlet  extends HttpServlet{
	private static final long serialVersionUID = -2958733507466419241L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取打印流
		//resp.getWriter();
		// 获取输出流
		resp.getOutputStream();
		// 设置 cookie
		resp.addCookie(new Cookie("name","value"));
		//设置编码
		resp.setCharacterEncoding("UTF-8");
		//设置响应头信息
		resp.addHeader("token", "xxxxx");	
	}
}

MVC模型:

???MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的
是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别
用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

??模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
??MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
????Model(模型)表示应用程序核心(比如数据库记录列表)(数据模型)。
????View(视图)显示数据(数据库记录)。
????Controller(控制器)处理输入输出(写入数据库记录)。
????MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制 .

Model: 是应用程序中用于处理应用程序数据逻辑的部分.

??数据逻辑部分:数据校验,数据的持久化相关处理.

View(视图) :是应用程序中处理数据的部分.

???处理数据:显示数据,输入数据.(界面)

Controller(控制器) :是应用程序中处理用户交互的部分.

???交互:交流互动.输入输出.用于接收客户发送的信息,向客户端做出响应.

而在JavaWeb开发中,利用各种技术优点和缺点.一般使用:

??Servlet 充当控制层.

???JSP 充当视图层

??Model 相关Java代码.

MVC模型三层关系

技术图片

MVC模型的优点

  1. 降低了程序耦合性
  2. 提高了代码的复用性
  3. 提高了程序的可维护性
  4. 提高了程序的可读性
  5. 提高了扩展性
  6. 提高了开发效率

但是,提高了程序结构的复杂性.

随着开发的发展,从MVC模型,演变:

??MVP:移动端

??MVVM:vue.js

Servlet总结

概念:

??Server Applet.在服务器上运行的一个小程序.用于接收客户端的数据且可以向客户端做出响应的小程序.Servlet有狭义和广义之分:

?狭义上:Servlet小程序

?广义上:在Java中,实现了Servlet接口.注册 配置

生命周期:

???init????初始化??执行1次

??service??提供服务??执行N次

??destory??销毁??执行1次

Servlet是单例,非线程安全 ,不要定义成员变量。

Select总结

标签:工具   word   mic   ica   vue   之间   out   obj   客户端   

原文地址:https://www.cnblogs.com/lyang-a/p/12562788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!