Serlet是什么?
Servlet是服务端的小组件是一门动态获取页面资源的技术,是Java语言编写的一个类,Servlet运行在Web服务器中,他是由服务端调用以及执行的,学号Servlet是非常有必要的,Servlet是MVC的基石。
1 编写一个Java类去实现核心接口Servlet即可(要重写Servlet中的五个方法)
package servlet;
import javax.servlet.*;
import javax.servlet.Servlet;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* @author 三月水
* version 0.5
*/
@WebServlet("/dem1")//配置访问路径(精准匹配)
public class HelloServlet implements Servlet {
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init().....");
}
public ServletConfig getServletConfig() {
return null;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello Servlet");
}
public String getServletInfo() {
return null;
}
public void destroy() {
System.out.println("destroy()....");
}
}
2 在pom.xml中导入Servlet相关的依赖包,Servlet3.0之后支持注解开发(通过注解的方式来访问)
3 在init()和servise()方法中写入自己的逻辑
4 配置@WebServlet("/xxx")//配置访问名(精准匹配)
5 启动Web服务器
填写刚刚在@WebServlet("/xxx")中填入的访问名访问即可
访问结果
实现核心接口Servlet会重写5个方法其中三个是关于生命周期的方法
1. init(); 初始化阶段//客服端浏览器第一次访问Servlet时,Web服务器会调用init()完成对Servlet的初始化2. service() 处理浏览器请求阶段// 客户端浏览器每一次访问请求Servlet时,Web服务器会调用Servlet中的Servise()对请求进行处理3. destroy()终止阶段//Web服务器关闭或者是重启会调用该方法对Servlet进行销毁
在实际发开中往往会继承该类对Servlet进行开发
演示案列
1 编写一个类去继承HttpServlet
2 重写doGet 和 doPost方法 并且加上自己的逻辑
3 用注解的方式配置访问名(@WebServlet("/xxx"))
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo11")//用注解的方式访问
public class Servlet extends HttpServlet {//继承该类重写核心方法
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet....");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost....");
}
}
4 运行Web服务器在url中输入注解中的访问名(默认是get)
在开发当中Servlet是经常会使用到的,手动的编写效率不高且繁琐,IDEA中有个模板我们可以设置下,就可以不用每次都手动敲了
点击应用确定就完成了
每次我们需要对Servlet开发时只需点击这个输入你的类名确认即可
注解的访问种类
1 精准匹配
@WebServlet("/demo1") ;//url路径也必须与访问名一致才能访问到 不然会报404异常
2 扩展名匹配
@WebServlet("/xxx.jar") ;//url路径写以.jar结尾的访问名都可访问该资源
3 目录匹配
@WebServlet("/ok / * ") ;//url路径写/ok/xxx都可以访问到该资源
4 任意匹配
@WebServlet("/ ") ;//url路径写任意的都可以访问该资源
@WebServlet("/ *") ;//url路径写任意的都可以访问该资源
小结 :
核心对象 是对客户端请求的处理
常用的方法
1 getMehod() ; //获取请求方式
2 getParament() ; //获取请求参数
3 getParamentValue() ; //获取请求参数数组(多个值)
4 getParamentMap() ; //通过集合Map获取请求参数
5 getHeader() ; //获取请求头
6 getRequstURL() ; //获取请求路径(绝对路径)
7 getContextURL() ; //获取虚拟路径
8 setAttribute(key,value) ; //设置域数据
9 getAttribute(key) ; //获取域数据
post请求的处理:
在获取参数前
request.setCharacterEncoding("utf-8");//设置字符集
get请求参数的处理相对post要复杂 主要的流程
1 获取参数前进行URL编码,获取参数后进行解码 即可
String name = "张三" ;
1 进行URL编码
String encode = URLEncoder.encode(name, "utf-8");
2 进行URL解码
String decode = URLDecoder.decode(encode, "utf-8");
核心的方法
request.getRequstDisparcher("访问名").forward(request,response);
//获取请求转发核心对象
setAttribute(key,value);//设置域数据getAttribute (key); //获取域数据removeAttribute();删除域数据
快速上手
1 编写两个Servlet类继承HttpServlet 重写对应的两个核心方法(doGet和doPost)
2 用注解的方式访问
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo33")
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("ab","管理员");//设置共享数据
//编写请求转发核心方法
request.getRequestDispatcher("demo44").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo44")
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object ab = request.getAttribute("ab");//获取共享数据
System.out.println("ab :" + ab);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
2 启动Web服务器输入访问名demo33即可
小结:
为什么需要请求转发?请求转发在一次会话一次请求中共享同一个域的数据,url访问地址不变,不能访问当前 Web 工程外的资源。
对客服端的请求进行响应
向客户端返回数据的方法
getOutpuStream();//处理二进制文件(照片,音频,视频)
getWriter();//处理纯文本
演示案例
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/demo21")
public class Response extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符集不然出现乱码情况
response.setContentType("text/html;charset:utf-8");
//向控制台打印数据
PrintWriter writer = response.getWriter();
writer.print("<h1 > Hello Word ~ </h1>");
writer.print("hello Response.....");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
启动web服务器url中写入访问名回车即可 输出结果
核心方法response.getsendRedirect("url" );
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo55")
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("demo66");//重定向
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
package servlet;/**
* @author 三月水
* version 0.5
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/demo66")
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("重定向.....");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
输出结果
小结:
请求重定向多用于网站迁移,一次会话两次请求中不可共享域(Request域)中数据,可以重定向至web工程外的资源。
请求转发:一次会话一次请求中共享域中的数据,浏览器url地址栏不会改变,只能转发服务器内部资源
请求重定向:一次会话二次请求不能共享域中的数据 ,浏览器url地址栏发生改变,可以重定向任意位置的资源(服务器内外部皆可)。
CSS学习总结一、什么是CSS一、什么是CSSCSS全称Cascading Style Sheets,叫做级联样式表,是用来美化之前用html构建的网页的显示内容;如整个页面的布局,元素的位置、距离、颜色、大小、是否显示、是否浮动、透明度等等。...
1. 什么是jsonpjsonp全称json with padding,填充式的json,jsonp是为跨域而生的2. 那么有哪些标签可以跨域呢<img src=""> //图片<link href=""> //css<script src=""> //程序我们可以使用script来帮助我们跨域2.1 写一个服务端server.js//服务端//引入支持接受请求,返回响应的模块httpconst http=require("http");//创建
步骤一,将pem文件放在nginx/conf.d中目录二,在conf文件中,添加一下内容(nginx1.5之前的版本是有 ssl on; 的,1.5之后的版本就不需要了,只要在listen 443 后添加ssl即可)server { listen 443 ssl; server_name www.erpmobiletest.xinyartech.com...
MySQL函数IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。IFNULL() 函数语法格式为:IFNULL(expression, alt_value)如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。参数说明:参数 ...
前言:在之前的博客中提到了开集识别的一些方案,主线是基于DNN方式,但是基于ML方式的解决方案有很多是很经典的,所以这里介绍下基于ML的方式基于ML的方式 SVM based (待展开) Sparse Representation based (待展开) Distance based (待展开) Margin Distribution based (待展开)…...
我们常常在学习、开发Java程序时,会碰到@ResponseBody 注解,如果不明白这个注解的作用,看下面这个文章希望能帮助到你 !@ResponseBody 注解的作用是将Controller的方法返回的对象,通过转换器转换为指定的格式之后,写入到 Response 对象的 body 区,常用来返回 JSON 数据或XML 数据 。注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 Response 对象输出指定格式的数据 。1. @Resp...
2016-01-14子查询 出现在FROM、WHERE、HAVING子句中的SELECT语句。一、单行子查询--对外部SQL不返回结果,或只返回一行。1.WHERE子句(嵌套子查询 inline view)select first_name, last_name from customers where customer_id = (se...
本文实例讲述了PHP连接MSSQL2008/2005数据库(SQLSRV)配置方法,分享给大家供大家参考。具体方法如下:PHP连接MSSQL2008/2005数据库与以往的连接mssql2000是不一样的,连接mssql2008/2005是需要自己添加PHP对MSSQL连接的驱动扩展了,而我们常用的hp.ini中的extension=php_mssql.dll扩展只适用连接于MSSQL20
ORB-SLAM2 的安装和编译ORB-SLAM2是一个非常经典的视觉SLAM 开源方案,可以作为你学习SLAM的范本。本文主要介绍如何在LINUX操作系统上,及ubantu上使用视频运行ORB-SLAM2。也列出了本人在安装过程中出现的出现的问题以及解决问题的相应方案。下面是安装及编译的流程,请大家严格遵守安装顺序,不然会出现依赖错误。从github.com下载ORB-SLAM2的代码。地址是:添加链接描述可以在github上直接download ZIP压缩文件。也可在安装git之后,用以下
本文探讨了Elasticsearch是如何让数据均衡的分布在不同的节点上,主要有三个影响:节点位置、磁盘空间、单个节点的Index和Shard个数。
原文地址:https://typecodes.com/web/php7configure.html根据前文《CentOS 7.1编译安装PHP7》的configure编译参数设定,安装后的PHP7配置文件所在路径是/usr/local/php7/etc。该目录下会有两个配置文件:php-fpm.conf和php.ini,以及一个文件夹php-fpm.d(包含www.conf文件)。