1、写出HTTP协议中请求头和响应头的内容。
1、1 请求头
Accept:浏览器能够处理的内容类型
Accept-Charset:浏览器能够显示的字符集
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串
Date:表示消息发送的时间,时间的描述格式由rfc822定义
server:服务器名字。
Connection:浏览器与服务器之间连接的类型
content-type:表示后面的文档属于什么MIME类型
Cache-Control:控制HTTP缓存
2、写出请求转发和重定向的语法,以及两者之间的区别。
2、1请求转发
HttpServletRequest.getRequestDispatcher.forward(hreq,hresp)
ServletContext.getRequestDispatcher().forward(hreq,hresp)
2、2 重定向
HttpServletResponse.sendRedirect
2、3 区别
①
请求转发 属于服务端行为。是在服务器端内部将请求转发给另外一个资源xx.jsp,
"浏览器"只知道发出了请求并得到了响应结果,
并不知道在服务器程序内部发生了转发行为。
重定向是客户端行为。比如浏览器也知道他借到的钱最后是出自xx.jsp之手。
②
转发:浏览器URL的地址栏不变
重定向:浏览器URL的地址栏改变;
③
转发:浏览器只做1次访问请求,得到1次响应
重定向:浏览器做了至少2次的访问请求,得到至少2次响应
④
转发:传输信息不丢失
重定向:传输信息丢失=无法携带数据
⑤
转发 快于 重定向【毕竟重定向 还得要浏览器再发请求】
⑥
转发 仅可访问 当前web的程序
所以当访问外部web只能选 重定向
3、写出Servlet的执行过程。
3、1 检查容器中是否 已有1个servlet实例【有就跳至3、3】
3、2 没有 则 init1个servlet
3、3 创建HTTPServletRequest和HTTPServletresponse给service方法/doPost、...方法
完成接收请求 返回响应
3、4 web应用程序被停止 ——调destroy销毁容器中这个servlet
4、写出完成一次请求的过程。
4、1 成功连接到服务器后
4、2 浏览器发送HTTP请求
4、3 解析出http地址中——客户端想访问的主机localhost,项目=web应用程序、工程名 ,到xml的url,到类=web资源=servlet类
4、4 将磁盘中servlet装进servlet容器 调init初始化1个servlet对象
4、5 执行service||doget、dopost、...方法 此中封装了HttpServletRequest对象用于接受客户端发送过来的请求,HttpServletResponse响应对象
4、6 将数据给httpservletresponse写入装好
4、7 调httpservletresponse响应给客户端
5、ServletConfig对象,ServletContext对象、response对象和request对象的
常用方法。
5、1 ServletConfig:
getInitParamter(String name); 读取web.xml中 局部配置参数init-param中的数据
getInitParamterNames();
5、2 ServletContext:
getAttribute();
setAttribute();
getRequestDispatcher(String uri);
getResourceAsStream(String uri);
getRealPath(String uri);
getInitParamter(String name); 读取web.xml 中 全局配置参数 = 整个web应用 的参数
5、3 HttpServletResponse:
addCookie(Cookie cookie)
addHeader(String name,String value);
sentRedircet(String path);
5、4 HttpServletRequest:
1 getRequestURL;
2 getRequestURI;
3 getQueryString();
4 getRemoteAddr();
5 getRemotePort();
6 getLocalAddr();
7 getLocalName();
8 getHeader(String name);
9 getHeaders(String name);
10 getHeaderNames();
11 getParameter(String name);
12 getParameterValues(String name);
13 getParameterNames();
14 getParameterMap();
getRequestDispatcher(String path)【他的接口ServletRequest的方法】
6、jsp的九大内置对象。
request response session application(上下文内置对象)
page(代表当前页面对象),
pageContext(页面的作用域对象)
out(在页面中输出的对象)
exception(异常对象)
config(配置对象)
7、编写代码实现,服务器端request设置数据,请求转发到jsp页面
用EL表达式获取后端传递过来的数据。其中包括传递:对象,数组,Collection集合,Map集合等数据。
servlet:
package controller;
@WebServlet("/aServ")
public class AServ extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 包括传递:对象,数组,Collection
//
// 集合,Map集合等数据。
//对象
Dog dog=new Dog("小花",18);
req.setAttribute("dog",dog);
//数组
int[] nums={33,44,55};
req.setAttribute("nums",nums);
//ArrayList
ArrayList list = new ArrayList<>();
list.add("大黄");
list.add("小黑");
req.setAttribute("list",list);
//HashMap
Map hm = new HashMap<>();
hm.put("one","one");
hm.put("two","two");
req.setAttribute("hm",hm);
req.setAttribute("msg","Hey Guys!");
//转回 原页面
req.getRequestDispatcher("/aPage.jsp").forward(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%-- 引入maven中的 jquery--%>
aPage
<%--对象--%>
${dog.dogName}
${dog.age}
<%--数组--%>
${num}
<%--list--%>
${list.get(1)}
${o}
<%--HashMao--%>
${hm.one}
${hm["two"]}
${oo.key}
${oo.value}
8、完成一个请求和响应,如何使用代码处理乱码问题。
package controller;
@WebServlet("/myserv")
public class Myserv extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求
req.setCharacterEncoding("utf-8");
//响应
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//告诉浏览器 以utf-8格式打开
resp.setHeader("content-type","text/html;charset=utf-8");
//确保格式
// resp.getOutputStream().write("hi".getBytes("utf-8"));
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
9、使用代码完成一个网页下载文件。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String realPath = this.getServletContext().getRealPath("/1.jpg");
String FileName = realPath.substring(realPath.lastIndexOf("\\")+1);
response.setHeader("content-disposition", "attachment;filename="+FileName);
File file = new File(realPath);
FileInputStream in = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte []b = new byte[1024];
int len = 0;
while((len=in.read(b))!=-1){
out.write(b,0,len);
}
}
10、用户数据:用户名,密码,性别,年龄,城市(下拉列表),兴趣爱好(复选框)
将这些数据在前端使用表单提交,提交到后端,后端将判断性别,年龄是否合法,
合法则存入数据库中。(代码实现)。
jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
Title
<%--用户注册页--%>
servlet:
package controller;
import domain.User;
import service.UserServiceImpl;
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("/registServ")
public class RegistServ extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//合法: 性别————男or女 && 年龄————18到50
String sex = req.getParameter("sex");
int age = Integer.parseInt(req.getParameter("age"));
int i=-1;
if((sex.equals("男")||sex.equals("女"))&&(age>18&&age<50)){
//爱好可多选 把数据字符串拼接
String[] hobbies = req.getParameterValues("hobby");
String hobbys="";
for (int j = 0; j
详解:
为什么有必要验证radio中的性别?
校验分为前端校验和后端校验
前端校验是为了方便用户提示以及校验外行和菜鸟
后端校验是为了屏蔽漏洞,防止被攻击
图上浏览器地址可以跨越前端直接发送数据到后端