Servlet:
servlet是运行在服务器上的程序。能接受请求,并且用servlet中的service()方法做出响应。
JQuery发送异步get请求的方法和参数的含义
$.get(url,function(data){}) url:服务器地址,从该服务器获得数据 function(data){}: ,回调函数 请求成功,获得的数据就在函数的参数data中,data是一个json对象
简述从浏览器发请求到执行servlet类的过程:
-
启动服务器
-
启动过程中,加载解析web.xml(此时,如果web.xml有错,直接报错)
-
浏览器通过地址栏,a标签发送一个http请求
-
匹配web.xml中定义的url-pattern(如果请求之后是404,说明请求的路径在web.xml中没有定义)
-
匹配到url,找对应servlet-name
-
通过name找到servlet类路径
-
通过类路径找到类文件,执行它(如果Java代码报错请求会报500)
首页问题:
在idea中运行servlet时,服务器启动,自动访问web文件夹下的名字为index.jsp或者index.html文件
可以通过web.xml设置访问的首页
<welcome-file-list> <!-- 默认访问的index开头的文件,可以是jsp html --> <!-- 在web下创建ok.html文件,此处指定ok.html文件,启动就会直接访问该文件 --> <welcome-file>ok.html</welcome-file> </welcome-file-list>
映射细节:
-
一个请求不能映射多个servlet类
-
多个请求可以映射一个servlet类
url-pattern写法:
-
绝对路径 (/路径名)
-
后缀匹配(*.do)
-
模糊匹配(/路径名/*)
-
全部匹配(/*)
Servlet生命周期:
-
创建(请求映射到这个类,才会创建该类对象,只创建一次,单实例,该类只有这一个对象)
-
初始化(创建完成立即初始化,且初始化一次)
-
服务(后续每次发送请求都会执行服务方法)
-
销毁(服务器关闭立即销毁,或者是应用程序从服务器卸载是销毁)
HTTP请求 响应 状态码:
请求:请求行、请求头、请求正文(即发送到服务器的数据)
响应:响应行、响应头、响应正文
状态码:200(请求成功)、404(请求资源未找到)、500(服务器请求失败)、302(重定向)
GET 和 POST 的区别:
get 请求:通过地址栏发送数据,数据直接展现在url中,不安全,
支持数据大小最大为4kb,传输快效率高。一般用来查询数据
post 请求:通过请求 body 发送 ,是隐式的,比较安全,
携带的数据大小不限,效率低,一般向服务器发送数据,例如注册
Servlet 的另一种创建方式(httpservlet):【重点】
流程:
-
创建类,继承 httpservlet
-
按需重写方法 { doget()方法和 dopost()方法 }
-
编写 web.xml
-
编写 html 页面,发请求
-
测试
接受请求具体的格式:
//第一步:页面 在web下新建html <form action ="路径名字" method ="方法名字"> 用户名<input type="text" name="username"><br> 密码<input type="password" name="password"><br> <!-- 单选框,需要设置value属性,后台服务器获得是value值 --> 性别<input type="radio" name="sex" value="1">男 <input type="radio" name="sex" value="2">女<br> <!-- 复选框,需要设置value属性,后台服务器获得是value值 --> 爱好:<input type="checkbox" name="hobby" value="eat"> 吃饭 爱好:<input type="checkbox" name="hobby" value="sleep"> 睡觉 爱好:<input type="checkbox" name="hobby" value="hit"> 打豆豆<br> 生日: <input type="date" name="birthday"> <!-- 下拉框,option需要设置value属性,后台服务器获得是value值 --> 地址:<select name="address"> <option value="henan">河南</option> <option value="hebei">河北</option> <option value="beijing">北京</option> </select> <input type="submit" value="登录"> </form> //第二步:写web.xml <servlet> <servlet-name>data</servlet-name> <servlet-class>项目的路径(com.hehe.wss.lian)</servlet-class> </servlet> <servlet-mapping> <servlet-name>data</servlet-name> <url-pattern>/路径名</url-pattern> </servlet-mapping>
第三步:接受请求的Servlet的响应
//第三步:接受请求的Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import java.util.Enumeration; public class MyServlet4 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception { // 如果,发送了get请求,直接将请求和响应交个post处理 doPost(request,response); } /**** @param request 使用该参数获得各种请求数据 * @param response 使用该参数做出响应 * @throws ServletException * @throws IOException */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception { // 接收请求行(熟悉) // 获得请求方法 String method = request.getMethod( ); // 获得请求协议 String protocol = request.getProtocol( ); // 获得请求路径 String requestURI = request.getRequestURI( ); // 资源标识符 StringBuffer requestURL = request.getRequestURL( ); // 资源定位符 System.out.println("method=" + method); System.out.println("protocol=" + protocol ); // 接收请求正文(重点!!!) // 获得input输入框的值,通过input的name属性值 //明文,暗文,单选,日期,下拉都使用getParameter获得数据 String username = request.getParameter("username"); String password = request.getParameter("password"); String sex = request.getParameter("sex"); String birthday = request.getParameter("birthday"); String address = request.getParameter("address"); // 复选框,使用getParameterValues // 如果不选任何一个,那么数组是null String[] hobbies = request.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby ); }
重点方法是:
-
getParameter()
-
getParameterValues()
-
getMethod()
-
getRequestURI()