JavaWeb核心内容

目录

一、http协议

二、tomcat服务器

2.1运行窗口乱码问题

2.2默认端口号修改

2.3本地集成使用tomcat或者远程使用(用坐标导入tomcat插件)。

三、servlet

3.1坐标导入

3.2Servlet生命周期

3.3request

3.4统一获取参数的方式

3.5中文参数乱码问题

3.6资源转发

3.7资源重定向

3.8响应字符和字节数据

四、jsp

4.1el表达式原样输出问题

4.2jstl标签(if&foreach)

五、MVC三层架构模式

5.1三层架构


一、http协议

二、tomcat服务器

2.1运行窗口乱码问题

conf目录下修改日志文件(logging.properties)中的编码格式,因为window的运行窗口编码格式为GBK,而tomcat的日志信息为UTF-8。

java.util.logging.ConsoleHandler.encoding = GBK

2.2默认端口号修改

在server.xml直接修改,默认为8080。

2.3本地集成使用tomcat或者远程使用(用坐标导入tomcat插件)。

三、servlet

3.1坐标导入

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

其中的<scope>provided</scope>为编译环境和测试环境有效,在运行环境无效。在web项目中打包后不会生成其jar包,因为tomcat自带其jar包。

3.2Servlet生命周期

1)Servlet对象由Servlet容器(web服务器)创建,当loadOnStartup为默认值时(负数),第一次访问创建,0或正整数时则容器启动时创建。创建之后会被init()方法初始化并加载配置文件。

2)init()方法只会执行一次,当Servlet对象被创建时被调用。

3)service()方法在每一次访问时都会被调用。

4)destroy()方法在容器关闭时被调用,并且只调用一次用来销毁Servlet对象。

3.3getServletConfig()用来获取一个配置对象, 把init()方法中的参数赋值给一个全局变量,在getServletConfig()方法中return该全局变量即可。

5)urlpattern

精确匹配

目录匹配

扩展名匹配

任意匹配(不推荐,因为会覆盖xml中的默认匹配方式导致无法访问静态资源)

3.3request

1)获取请求行

String getMethod();  //获取请求方式

String getContextPath();   //动态获取虚拟路径(项目访问路径)

StringBuffer getRequestURL(); //获取url(统一资源定位符),需要调用toString()方法转换为String

String getRequestURI(); //获取统一资源标识符

String getQueryString(); //获取get方式的请求参数

2)请求头

String getHeader(String name);  //根据请求头名称获取请求头

3)请求体

ServletInputStream getInputStream();  //获取字节输入流(比如上传文件)

BufferReader getReader();   //获取字符输入流

总结:get方式:用getQueryString()方法获取请求参数

           post方式:用getReader()方法获取请求参数

3.4统一获取参数的方式

1)Map<String,String[]> map=req.getParameterMap();//获取所有参数

2)根据键值获取对应的值(数组)

String values=req.getParameterValues();

3)根据键值获取对应的值(单个)

String username=req.getParameter("username");

3.5中文参数乱码问题

post方式:req.setCharacterEncoding("UTF-8");//设置字符输入流为UTF-8解决中文数据乱码。

get方式:

//get请求方式解决乱码问题

//乱码原因(url编码和解码的指定的方式不一样,浏览器是用utf-8,tomcat用的是iso-8859-1)

//解决方法(把tomcat解码后的数据编码为字节数组,再用utf-8的方式解码)

byte[] bytes=username.getBytes(StandardCharsets.ISO_8859_1); //编码

username=new String(bytes,StandardCharsets.UTF_8);//解码

注意:tomcat8版本以后已经自动解决了get的方式乱码问题。

3.6资源转发

1)

//存储键值对到req中

req.setAttribute("msg","HelloWorld!");

//实现跳转

req.getRequestDispatcher("/FourthHttpServlet").forward(req,resp); //资源跳转到另一个servlet中

//实现数据转发(由el表达式接收)

req.getRequestDispatcher("/xxx.jsp").forward(req,resp);

2)获取共享的数据

Object msg = req.getAttribute("msg");   //获取共享的数据

3.7资源重定向

//1.设置重定向响应状态码302

resp.setStatus(302);

//2.设置重定向的请求头和访问资源路径

resp.setHeader("Location","/servlet-demo/resp2");

//3.简化方式完成重定向,并且动态获取虚拟目录 resp.sendRedirect(req.getContextPath()+"/resp2");

3.8响应字符和字节数据

1)字符数据

/*
response响应字符数据
 */
//1.解决中文乱码问题
resp.setContentType("text/html;charset=utf-8");  //解析方式为html,utf-8
//2.获取字符输出流
PrintWriter writer=resp.getWriter();
writer.write("aaa");
writer.write("<h1>aaa</h1>");

2)响应字节数据

/*
response响应字节数据
 */
//1.读取文件
FileInputStream fis=new FileInputStream("d://壁纸.jpg");
//2.获取response字节输出流
ServletOutputStream os=resp.getOutputStream();
//3.完成流的copy
IOUtils.copy(fis,os);
//4.关闭输入流
fis.close();

四、jsp

导入坐标->创建jsp文件->编写html和java代码

4.1el表达式原样输出问题

版本问题。

解决方法:把以下表达式添加到图片的位置。

isELIgnored="false"

4.2jstl标签(if&foreach)

1)导入jstl坐标->导入standard坐标

2)引用标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

五、MVC三层架构模式

5.1三层架构

1)数据访问成:对数据库的基本操作(dao/mapper)

2)业务逻辑层:对业务逻辑进行封装,组合数据访问层(service)

3)表现层:接受请求,封装数据,调用业务逻辑层,响应数据(web/controller)

六、会话跟踪技术(cookie&session)

1.cookie:服务端把cookie数据发送到客户端保存。

发送cookie:

1)创建对象

Cookie cookie=new Cookie("name","value");

2)发送cookie

resq.addCookie(cookie);

获取cookie

1)接收来自客户端所有的cookie

Cookie[] cookies=req.getCookies();

2)遍历cookie数组,获取需要的cookie对象

for (Cookie cookie : cookies) {
            if("username".equals(cookie.getName())){
                String value=cookie.getValue();
                String name=cookie.getName();
                System.out.println(name+":"+value);
                break;
            }
        }

cookie存活时间

cookie.setMaxAge(存活秒数);

cookie无法存储中文问题

解决方法:url编码后再解码

1)URL编码

        String value="张三";
        //URL编码
        value= URLEncoder.encode(value,"utf-8");
        Cookie cookie=new Cookie("username",value);

2)URL解码

 String value=cookie.getValue();
 value= URLDecoder.decode(value,"utf-8");

3)cookie把数据发送到客户端由jsp编写el表达式接收(记住密码需求)

value="${cookie.username.value}

总结:编码URLEncoder.encoder(要编码的变量,"编码方式")

           解码URLDecoder.decode(要解码的变量,"解码方式")

2.session

1)创建session对象

HttpSession session=req.getSession();

2)在session里面存储数据

session.setAttribute("键名","键值");

3)获取session中的数据

Object username=session.getAttribute("username");

4)session的钝化、活化

 5)session销毁

session.invalidate();

总结:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值