Java5tomcat&servlet,request&response,cookie&session,Filter,maven,mybatis,mvc,ajax&js
Posted 码农编程录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java5tomcat&servlet,request&response,cookie&session,Filter,maven,mybatis,mvc,ajax&js相关的知识,希望对你有一定的参考价值。
文章目录
- 1.nginx的conf文件:以前网络编程中B/S架构中服务器是用socket写,用文件输入流读一个文件,读到后socket通过outputstream写出去,这些过程有了nginx后再也不用写
- 2.nginx反向代理与负载均衡:nginx是被广泛使用的网页服务器,在www.163.com的F12的Network中Headers中有server:nginx,使用nginx首当其冲,做反向代理,将请求分发到公司的多台服务器上
- 3.服务器:软件为tomcat或nginx,程序为servlet
- 4.servlet:多态,web.xml
- 5.servlet生命周期:LifecycleServlet
- 6.servlet优化:GenericServelt/HttpServelt
- 7.http协议和抓包:枚举Enumeration,request.getHeaderNames()
- 8.request对象:.getParameterMap(),post请求中文参数乱码
- 9.请求转发:jrss,request.setAttribute()
- 10.登陆案例:成功和失败页面相当于两个模块
- 11.response对象:text/html,重定向(.setStatus,.setHeader)
- 12.文件下载:request/response
- 13.cookie:再次时请求头携带cookie到服务端
- 14.登陆案例_记住我:js访问浏览器数据用document
- 15.session:根据sessionid,服务器才能找到session(session对象在服务器内存中增加压力)
- 16.登录案例_验证码:request.getSession().setAttribute("code",sb.toString())
- 17.web中的k-v存储们:同一域名下可以互相调用
- 18.多过滤器:先执行小ASCII
- 19.maven安装和创建项目:settings/pom.xml,web.xml
- 20.管理:以前在WEB-INF右击new一个lib文件夹,现在不用,只需写dependency标签就行
- 21.插件:maven的jdk是1.5,所以maven要扩展功能jdk1.8即插件
- 22.旅游项目环境塔建:选中数据库右击运行sql文件
- 23.注册/提交功能:局部刷新主要应用于失败的情况,不跳转
- 24.邮箱激活业务:MailTest.java,MailUtil.java,ActiveServlet.java
- 25.项目部署:linux
- 26.dao层的CRUD操作:以前userdao都是用jdbc template实现,现在换成Mybatis,需要一个sqlsession对象
- 27.MVC:Spring_IOC(对象创建交给spring工厂),Spring_AOP(基于动态代理功能增强)。Runapplication启动类:控制层(UserController),业务层(UseService,UseServiceImpl),持久层(User即pojo,UseMapper.xml,UseMapper接口)
- 28.RPC:远程过程调用,我这台电脑调用一个函数(这函数在另一个电脑上执行),像是本地正常运行函数一样,不需要关注远程(网络连接,断开,传数据)细节
- 29.ajax/fetch/axios:xhr对象,$.,浏览器输入框加载脚本
- 30.json:new ObjectMapper()
- 31.ajax和json综合:ajax_json_union.html
- 32.案例_校验用户名是否可用:this.value
- 33.案例_自动提示:$(result).each
- 34.跨域请求CORS:接口是在一台服务器或一个端口上,前端的页面服务在另一个服务器或端口上,从前端获取接口里数据时会存在跨域问题
- 35.swagger:用来规范前端和后端统一接口管理
- 36.Websocket保证前端实时性:socket通常指tcp的socket,上来建立双向连接,有通道随意先后发送
- 37.DNS原理与域名的配置:域名作用是方便记忆,dns作用是将域名解析成ip
1.nginx的conf文件:以前网络编程中B/S架构中服务器是用socket写,用文件输入流读一个文件,读到后socket通过outputstream写出去,这些过程有了nginx后再也不用写
nginx软件链接:https://pan.baidu.com/s/1zvF2irI6OenDKVfvSIOZmg ,提取码:gsn9。
如果http协议是80端口的话,80端口会被隐藏,本机浏览器输入http://localhost:80启动服务端
显示如下,hello nginx是E\\my81\\index.html里内容。本机ipconfig显示192.168.33.71。上面红框浏览器
(客户端)是别人的电脑【局域网下同一网段】,上面两个大框是服务端,浏览器和服务器三要素对应。
nginx作用:1.反向代理
:s被代理1个公网ip,但有n台s对外服务。
2.负载均衡
:基于反向代理。
3.正向代理
:我们电脑接入VPN 后,我们对外IP地址就会变成VPN服务器的公网IP。
4.动静分离
:网页f12显示js,css,img属静态数据。
2.nginx反向代理与负载均衡:nginx是被广泛使用的网页服务器,在www.163.com的F12的Network中Headers中有server:nginx,使用nginx首当其冲,做反向代理,将请求分发到公司的多台服务器上
原生nginx没有集成很多插件,使用不方便。推荐使用openresty(在nginx基础上集成了很多lua写的插件),官网下载openresty后解压后进一级目录输入nginx.exe回车运行服务端,浏览器输入localhost默认:80端口
。修改conf目录下nginx.conf文件,删除注释。50x.html是错误页面,暂时不用。
如下还是在nginx.conf文件里,stream类型执行下载,echo是插件。
2.1 location匹配方式:location / 默认匹配所有请求,相当于第四优先级(最弱)
1.
如下最强级别=。
2.
如下优先级第二,^~
以什么开头。如下/
是路径,不是转义符。
3.
如下优先级第三,正则表达式~
。\\w
匹配数字、字母、下划线,转义字符\\
可以转义很多字符,比如\\n
表示换行,\\t
表示制表符,字符\\
本身也要转义,所以\\\\
表示的字符就是\\
。如下/
是路径。
如下同优先级的,按匹配程度较高的先匹配。
同优先级并且匹配程度相同的话,写在上面的优先执行。
2.2 反向代理写法:http80
如下是其他服务器,192…:80是it works页面。
1.
默认拼接。
2.
如下转到192...:80/
,两个/省去后一个字母。
2.3 负载均衡写法:基于反向代理
两个ip+端口根据权重切换。
3.服务器:软件为tomcat或nginx,程序为servlet
Web(World Wide Web)即全球广域网,也称为万维网。
nginx不支持java规范,tomcat支持。tomcat8:https://tomcat.apache.org/download-80.cgi。免安装,解压即可用:链接:https://pan.baidu.com/s/1UJM9kbIHGIXkNXlYLpcoGw ,提取码:g610。dos系统识别文件后缀名不能超过3位(先有dos后有windows),所以.htm。8080一般是用来连接代理的(8080不能省,只有80才能省)。 只有index.html是默认的,不用加在最后,localhost:8080/a.html。
如下javaee新建项目,apache-tomcat8…是前面tomcat软件解压路径。如下不需要自己开启tomcat,idea配置自动开启。
如下New和上面一样,关联tomcat软件解压路径。
如下将web文件夹当成前端static web项目,web文件夹里都可以访问,除了web-info无法访问,Toolbar工具栏。
如下是点乌龟运行后,浏览器自动打开的原理。改变路径 / 写法。
如上若还是不会默认打开谷歌,需要File - Settings - Tools - Web Browsers。
4.servlet:多态,web.xml
如下选中src右击new - java class,name为com.itheima01.servlet.MyServlet,还有一件事配置web.xml如上图所示。
package com.itheima01.servlet;
import javax.servlet.*;
import java.io.IOException;
public class MyServlet implements Servlet //javax.servlet.Servlet (x指extend,如果没有提示,则上面tomcat项目配置失败) //没有main函数,右击run不了,点乌龟
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException
System.out.println("控制台日志: 服务器被访问了");
servletResponse.getWriter().print("hello servlet"); //在网页上打印(英文,中文会乱码)
@Override
public void init(ServletConfig servletConfig) throws ServletException
@Override
public ServletConfig getServletConfig()
return null;
@Override
public String getServletInfo()
return null;
@Override
public void destroy()
如下点击idea中乌龟,自动打开网页,改变/my路径。
tomcat+servlet原理(4步):以前解析xml文件(web.xml)用dom4j,将xml先读到内存里在进行解析。第4步
:mapping映射后,tomcat(中介即代理默认端口8080)底层会进行反射,当前类com.itheima01.servlet.MyServlet肯定是Servlet接口的implements实现类,可以向上转型,父类Servlet调用方法执行子类重新的方法。
为什么tomcat底层用反射?tomcat底层设计不能和MyServlet耦合,只有全限定名和MyServlet有关(自己设定的),通用性。tomcat像管家中介(用户,tomcat软件【中介】,jdk的Servlet)在第3步等客人,第4步客人来了找my,tomcat根据客人请求找到my的住址com....MyServlet
,把my叫醒进行service办公。
如上在web.xml中,MyServlet01可以随便命名但要上下一致,my是资源位置,/my(因为在当前项目,http…8080可以省略,url)和com…MyServlet(class,全限定名
就是全类名
就是包名加类名
)对应关系。
5.servlet生命周期:LifecycleServlet
package com.itheima02.life;
import javax.servlet.*;
import java.io.IOException;
public class LifecycleServlet implements Servlet
public LifecycleServlet() //不写也可以,一个类默认有 空参构造
System.out.println("LifecycleServlet");
//如下生命周期 5个重写
@Override
public void init(ServletConfig servletConfig) throws ServletException
System.out.println("init");
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException
System.out.println("service");
@Override
public void destroy()
System.out.println("destroy");
//11111111111111111111111111111111111111111111111111111111以下没用
@Override
public ServletConfig getServletConfig()
System.out.println("getServletConfig");
return null;
@Override
public String getServletInfo()
System.out.println("getServletInfo");
return null;
//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>MyServlet01</servlet-name>
<servlet-class>com.itheima01.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet01</servlet-name>
<!-- <url-pattern>http://localhost:8080/my</url-pattern>-->
<url-pattern>/my</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LifecycleServlet</servlet-name>
<servlet-class>com.itheima02.life.LifecycleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LifecycleServlet</servlet-name>
<url-pattern>/life</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>GoodServlet</servlet-name>
<servlet-class>com.itheima03.good.GoodServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GoodServlet</servlet-name>
<url-pattern>/good</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BetterServlet</servlet-name>
<servlet-class>com.itheima03.good.BetterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BetterServlet</servlet-name>
<url-pattern>/better</url-pattern>
</servlet-mapping>
</web-app>
如下默认调用空参构造创建实例(第一行)。
6.servlet优化:GenericServelt/HttpServelt
只留一个接口叫适配器设计模式。将service方法根据不同请求方式
分化出两个不同方法。
package com.itheima03.good;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class GoodServlet extends GenericServlet
//ServletRequest : 请求(前端发送服务器的数据), 兼容大部分协议(包括http), 子接口: HttpServletRequest
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException //这个service方法将下面3个方法(service2,doPost,doGet)都调用了
System.out.println("goodServlet");
//没有ServletRequest.getgetMethod() //因为不是所有的协议都有请求方式,所以要向下转型成http
HttpServletRequest request = (HttpServletRequest) servletRequest; //协议: 必须是http
HttpServletResponse response = (HttpServletResponse) servletResponse;
//request.getMethod(); //http协议有请求方式
service2(request,response);
private void service2(HttpServletRequest request, HttpServletResponse response)
String method = request.getMethod(); //请求方式
if("GET".equals(method))
doGet(request,response);
else if("POST".equals(method))
doPost(request,response);
//以后再写Servlet只要继承GoodServlet(GoodServlet可以改名为HttpServlet),重写doPost和doGet就行
//如下相当于 http协议中post请求方式的service方法,HttpServletRequest类比原ServletRequest类好用
private void doPost(HttpServletRequest request, HttpServletResponse response)
//如下相当于 http协议中get请求方式的service方法
private void doGet(HttpServletRequest request, HttpServletResponse response)
浏览器:localhost:8080/good,网页无显示,控制台打印goodServlet。
package com.itheima03.good;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class BetterServlet extends HttpServlet //sun公司已经封装HttpServlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
doGet(req,resp);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
如上解决了前二个问题。如下解决第三个问题,不用配置web.xml。
package com.itheima03.good;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/best")
public class BestServlet extends HttpServlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
doGet(req,resp);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
System.out.println("被访问了");
如下把上面BestServlet类设置为模板,使用:选中包(包下)-new-servlet。
如上模板如下:
#if ($PACKAGE_NAME && $PACKAGE_NAME != "")package $PACKAGE_NAME;#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet(urlPatterns = "/$Entity_Name")
public class $Class_Name extends javax.servlet.http.HttpServlet
@Override
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
doGet(request,response);
@Override
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
7.http协议和抓包:枚举Enumeration,request.getHeaderNames()
http的request对象:由tomcat创建,并且里面数据由tomcat set进去,我们只需要get出来。
File-New-Project-Java Enterprise。
<!DOCTYPE html>
<html lang=