1.web开发概述
什么是服务器?
解释一:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.
可以在服务器中部署文件,让他人访问
解释二:也可以把运行服务器软件的计算机也可以称为服务器。
2.web开发环境搭建
1.获取Tomcat安装程序包:
2.安装JDK
3.创建并发web项目
3.Servlet
1.概述
2.Servlet创建和使用
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- .xml文件:ml结尾的,也是一种标记语言,设计的目的是用来在项目中存储配置信息的,制定好就可以使用那些标签即可 web.xml文件:存储web后端的配置信息,在服务器启动时,由服务器加载读取的, --> <!--配置servlet程序 把我们开发的servlet程序注册到服务器,有服务器启动时加载,在第一次访问时,由服务器创建对象,--> <servlet> <servlet-name>demo</servlet-name> <servlet-class>com.ffyc.dormServer.web.DemoServlet</servlet-class> <init-param><!-- 向servlet中配置一些参数--> <param-name>count</param-name> <param-value>10</param-value> </init-param> </servlet> <!--为servlet配置一个访问地址--> <servlet-mapping> <servlet-name>demo</servlet-name><!--为指定name的servlet程序配置访问地址--> <url-pattern>/demo</url-pattern><!--配置的供外界访问的地址 必须以/开头--> </servlet-mapping> <!--注册登录处理的servlet程序--> <servlet> <servlet-name>login</servlet-name> <servlet-class>com.ffyc.dormServer.web.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
3.Servlet对象生命周期
创建(实例化):
第一访问Servlet程序时,由服务器创建
初始化:
在构造方法执行完成后,调用init()执行一些初始化操作
服务:
每次请求调用service()
销毁:服务器关闭时,会销毁servlet对象,
并且在销毁servlet对象时,会自动调用destroy(),执行一些最终操作。
执行代码:(及注意事项)
import javax.servlet.ServletConfig; 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 LoginServlet extends HttpServlet { //无参构造默认是存在 /*init()方法在没有需要初始化操作时可以不用重写,但是服务器会调用父类中的init()*/ /* @Override public void init(ServletConfig config) throws ServletException { super.init(config); }*/ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("执行登录处理"); } //destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy() /*@Override public void destroy() { super.destroy(); }*/ }
4.HTTP协议
1.http请求概述
请求头:包含客户端的一些环境信息,这些信息都是由浏览器自动发送的,以键值对形式传递
请求体:以表单post方式向后端发送的请求数据,在请求体中包含请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析.
get请求主要是从后端获取信息,例如网页上的超链接,向后端传递少量信息,获得大量信息。
请求数据在请求地址中直接拼接,所以传输的数据量有限的,并且敏感数据不安全。
post请求:主要用于向后端发送大量数据,请求数据在请求体中,可以传输大量数据,不会在地址中显示,所以相对安全。
2.简单的交互代码
web前端
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a href=" http://127.0.0.1:8008/dormServer/login?account=1111&&password=2222">登录</a>
<form action="http://127.0.0.1:8008/dormServer/login" method="post">
账号:<input type="text" name="account" value=""/><br/>
密码:<input type="password" name="password" value=""/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
点击登录按钮,向后端提交你输入的账号和密码。
浏览器的网络断端检测到的对login发送的信息,及请求类型POST
web后端
package com.ffyc.dormServer.web; import javax.servlet.ServletConfig; 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 LoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("执行登录处理"); //接受前端提交的数据 String account=req.getParameter("account"); String password=req.getParameter("password"); System.out.println(account); System.out.println(password); } }
后端显示前端输入的账号和密码。
由于前端请求有get 和post两种,在后端的处理略有不同,所以在父类的方法中,会根据请求方式的不同,会调用doGet或者doPost方法,分别处理。
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 LoginServlet extends HttpServlet { /*用来处理get请求*/ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet()"); String name=req.getParameter("name"); String age=req.getParameter("age"); Integer.parseInt(age); System.out.println(name); System.out.println(age); } /*用来处理post请求*/ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8");//设置解码的编码格式 System.out.println("doPost()"); String account=req.getParameter("account"); String password=req.getParameter("password"); System.out.println(account); System.out.println(password); } //destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy() /*@Override public void destroy() { super.destroy(); }*/ }
3.Http请求的常用方法
System.out.println(req.getMethod());//获取请求方式 System.out.println(req.getProtocol());//获取请求协议 System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名 System.out.println(req.getServerPort());//获得服务端口号 System.out.println(req.getRemoteAddr());//获得客户端ip System.out.println(req.getRemotePort());//获得客户端端口 System.out.println(req.getHeader("User-Agent"));//获得客户机信息 System.out.println(req.getHeader("Accept-Language")); req.setCharacterEncoding("utf-8");//设置解码的编码格式
实验代码:
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 LoginServlet extends HttpServlet { /*用来处理get请求*/ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接受我们自己向后端发送的数据 System.out.println("doGet()"); String name=req.getParameter("name"); String age=req.getParameter("age"); Integer.parseInt(age); System.out.println(name); System.out.println(age); //接收请求行和请求头的数据。 System.out.println(req.getMethod());//获取请求方式 System.out.println(req.getProtocol());//获取请求协议 System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名 System.out.println(req.getServerPort());//获得服务端口号 System.out.println("===================="); System.out.println(req.getRemoteAddr());//获得客户端ip System.out.println(req.getRemotePort());//获得客户端端口 System.out.println(req.getHeader("User-Agent"));//获得客户机信息 System.out.println(req.getHeader("Accept-Language")); } }
运行结果:
4.Http响应
代码:
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class LoginServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("执行登录处理"); //接受前端提交的数据 String account=req.getParameter("account"); String password=req.getParameter("password"); System.out.println(account); System.out.println(password); } */ /*用来处理get请求*/ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //接受我们自己向后端发送的数据 System.out.println("doGet()"); String name=req.getParameter("name"); String age=req.getParameter("age"); Integer.parseInt(age); System.out.println(name); System.out.println(age); //接收请求行和请求头的数据。 System.out.println(req.getMethod());//获取请求方式 System.out.println(req.getProtocol());//获取请求协议 System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名 System.out.println(req.getServerPort());//获得服务端口号 System.out.println("===================="); System.out.println(req.getRemoteAddr());//获得客户端ip System.out.println(req.getRemotePort());//获得客户端端口 System.out.println(req.getHeader("User-Agent"));//获得客户机信息 System.out.println(req.getHeader("Accept-Language")); } /*用来处理post请求*/ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8");//设置解码的编码格式 System.out.println("doPost()"); String account=req.getParameter("account"); String password=req.getParameter("password"); System.out.println(account); System.out.println(password); //调用jdbc与数据库交互 //作出响应。 //设置响应内容编码格式 /*resp.setHeader("content-type", "text/html;charset=utf-8");*/ resp.setContentType("text/html;charset=utf-8");//设置响应内容编码格式 PrintWriter printWriter=resp.getWriter();//获得打印输出字符流 printWriter.write("<h2>登录成功</h2>"); } //destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy() /*@Override public void destroy() { super.destroy(); }*/ }
运行结果: