JavaWeb——题目汇总

1、写出HTTP协议中请求头和响应头的内容。
1、1 请求头

Accept:浏览器能够处理的内容类型
Accept-Charset:浏览器能够显示的字符集
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串

如:火狐查看 Http请求头:
在这里插入图片描述
1、2 响应头

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<String> list = new ArrayList<>();
        list.add("大黄");
        list.add("小黑");
        req.setAttribute("list",list);
        //HashMap
        Map<String, String> 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"%>
<html lang="zh-CN">
<head>
    <%--    引入maven中的 jquery--%>
    <script src="webjars/jquery/3.4.1/dist/jquery.min.js" charset="UTF-8"></script>
    <title>aPage</title>
</head>
<body>
<%--对象--%>
${dog.dogName}
${dog.age}
<br/>

<%--数组--%>
<c:forEach items="nums" var="num">
    ${num}
</c:forEach>

<br/>

<%--list--%>
${list.get(1)}

<c:forEach items="${list}" var="o">
    ${o}
</c:forEach>

<br/>

<%--HashMao--%>
${hm.one}
${hm["two"]}
<c:forEach items="${hm}" var="oo">
    ${oo.key}
    ${oo.value}
</c:forEach>



</body>
</html>

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" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<%--用户注册页--%>

<form action="registServ">
    用户名<input type="text" name="username"><br/>
    密码<input type="password" name="password"><br/>
    性别<input type="radio" name="sex" value="男">男
        <input type="radio" name="sex" value="女">女
        <br/>
    年龄<input type="text" name="age" placeholder="仅填数字"><br/>

<%--    下拉列表--%>
    城市<select name="city">
            <option value="cq">重庆</option>
            <option value="bj">北京</option>
    </select>
    <br/>
<%--    复选框--%>
    兴趣爱好
    <input type="checkbox" name="hobby" value="游泳">游泳
    <input type="checkbox" name="hobby" value="睡觉">睡觉
    <br/>

    <input type="submit" value="提交">
</form>

</body>
</html>

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<hobbies.length ; j++) {
                if(j==(hobbies.length-1)){
                    hobbys+=hobbies[j];
                    break;
                }
                hobbys=hobbies[j]+",";
            }

            User user = new User(req.getParameter("username"), req.getParameter("password"), age, sex, req.getParameter("city"), hobbys);
            i = new UserServiceImpl().addOne(user);
        }

        if(i==-1){
            //性别年龄不合法 或 数据库存入失败  跳转注册页
            resp.sendRedirect(req.getContextPath()+"/regist.jsp");
        }else{
            //跳转登录页
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

}

详解:
为什么有必要验证radio中的性别?

校验分为前端校验和后端校验
前端校验是为了方便用户提示以及校验外行和菜鸟
后端校验是为了屏蔽漏洞,防止被攻击
图上浏览器地址可以跨越前端直接发送数据到后端

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值