各位小伙伴大家好,欢迎参加暑期后端培训之第一节课~~
话不多说,让我们开始吧。
这一学期,我们先学习了基本环境的搭建配置。
学习了java的基本知识,多态、异常处理、容器、io流等等。
学习了jsp,知道了jsp是由html+java+jsp自己一些标签构成,后面在和前端partner合项目时候,就把他们写的html套入jsp中的html标签就好了。
学习了servlet的基本知识,学习了如何写一个servlet,以及怎么配置servlet。
学习了MVC的开发理念,如果对这个还不是很了解的同学,不用着急,可以先根据模版一步步套,在后端中分为哪几个包,每个包是在做什么,他们之间数据如何交互的,等到实际写出一个具体项目那时候你可能就突然懂了。
学习了sql基本语句,select,insert,delete,update这四个sql语句(一定一定要熟练掌握,去年我暑假学习时候因为sql语句出了好多bug,后来找了很久发现就是sql写错了)。
最后带大家做了一个小demo,可能大家对于这个项目还有很多不懂得地方,后面几节课我们会一起慢慢学的~
今天主要学习以下几点:
1. switch case语句
2.servlet的四大作用域
3.filter过滤器
一、switch case
相信大家在java课中已经了解了这个语句,今天我们学习下这个在实际编码时候的用法。
switch(变量){
case 变量值1:
//;
break;
case 变量值2:
//...;
break;
...
case default:
//...;
break;
}
首先需要注意的是,switch其实是java的语法糖,在java1.7之前,是不支持变量为String类型的,只支持byte short char int四种数据类型.后来在1.7中引入了String类型。但对于编译器来说,switch只支持整型,任何类型比较最后都是转化为整型,String类型正是通过调用hashcode()方法来实现的。(感兴趣的同学可以看https://blog.csdn.net/guohengcook/article/details/81267768这篇博客)。
回到正题,来看看switch在实际编码时候用到的一些地方
比如说前台传来一个flag值,你要根据这个flag判断调用哪个函数,是登录函数还是注册函数,又或者是增删改查的哪一个
protected void doPost(HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
int flag = Integer.parseInt(request.getParameter("flag"));
//根据flag判断跳转哪个函数,如果是1执行登录函数,2执行注册函数
switch (flag) {
case 1:{
login();
break;
}
case 2:{
regist();
break;
}
}
}
private void login(){
System.out.println("login hello");
}
private void regist(){
System.out.println("regist hello");
}
这样在jsp中提交数据的action的地址就可以根据需要执行同一个servlet的不同函数,而不是每一个功能都要单独写一个servlet。
比如说你就不用登录写一个servlet,注册又写一个servlet,又配置一遍servlet的url
二、四大作用域
pageContext当前页面有效(较少使用)
request一次请求(常用)
session会话期间有效(常用)
application服务器运行期间有效
在servlet处理完一些逻辑之后,使用域对象往前台返回数据。
比如说,前端传来一个登录请求,带有用户信息,后端验证正确后,可以使用session把这个信息存储下来,之后使用的话从session中获取
常用
request.setAttribute(key,value);(key为String类型,value为Object类型)
request.getAttribute(key);(注意返回的是Object类型)
session.setAttribute(key,value);
request.getAttribute(key)
在jsp中,后面会学习el表达式和jstl标签,这时候可以在jsp拿到servlet传来的值,然后再使用css,js进行数据呈现。
三、filter过滤器
filter用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,这样实现很多开发者想得到的功能。
一个过滤器是一个可以传送请求或修改响应的对象。过滤器并不是servlet,他们并不实际创建一个请求。他们是请求到达一个servlet前的预处理程序,和/或响应离开servlet后的后处理程序。一个过滤器能够:
·在一个servlet被调用前截获该调用
·在一个servlet被调用前检查请求
·修改在实际请求中提供了可定制请求对象的请求头和请求数据
·修改在实际响应中提供了可定制响应对象的响应头和响应数据
·在一个servlet被调用之后截获该调用
filter和servlet在编写时候类似,分为创建和配置两步
我们需要重写doFilter方法,然后在web.xml中配置这个filter
创建一个filter
在web.xml中配置
<filter>
<filter-name>filterTest</filter-name>
<filter-class>com.lp.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filterTest</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*代表通配符,这样就可以实现在访问每个资源之前先跑到filter中,执行我们想要的功能
举个栗子:处理中文乱码
写上这三行代码,改变request、response消息头实现乱码处理
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
本来我们可能需要在每个servlet的doPost方法里写上这三行,但是通过filter就可以实现,只用写在一个地方,每次访问时候调用一下,减少代码冗余。
当然filter还有好多其他用法,比如说拦截没有登录的用户(在filter中,拿session里登录时候放进去的对象,如果为空,则没有登录)大家可以自己去学习。