环境配置
Tomcat配置
tomcat官网:http://tomcat.apache.org/
配置环境变量
CATALINA_BASE
tomcat的目录CATALINA_HOME
tomcat的目录- 在系统的path中配置
%CATALINA_HOME%\bin
配置文件:conf文件夹下的server.xml
可以配置启动的端口号
- tomcat的默认端口号为:8080
可以配置主机的名称
- 默认的主机名为:localhost->127.0.0.1
- 默认网站应用存放的位置为:webapps
Maven配置
官网:https://maven.apache.org/
配置环境变量
M2_HOME
maven目录下的bin目录MAVEN_HOME
maven的目录- 在系统的path中配置
%MAVEN_HOME%\bin
阿里云镜像
conf文件夹下的settings.xml
- 镜像:mirrors
- 作用:加速我们的下载
- 国内建议使用阿里云的镜像
nexus-aliyun
*,!jeecg,!jeecg-snapshots
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
本地仓库
建立一个本地仓库:localRepository
D:\Environment\apache-maven-3.6.2\maven-repo
web.xml版本问题
修改web.xml版本问题(替换为4.0版本与tomcat一致)
JavaWeb 常用依赖
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.3
provided
mysql
mysql-connector-java
5.1.47
javax.servlet.jsp.jstl
jstl
1.2
taglibs
standard
1.1.2
Servlet
ServletContext
1、共享数据
web容器在启动时,它会为每一个web应用程序都创建一个ServletContext对象,它代表当前web应用
我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;
// 设置servlet的值
ServletContext context = this.getServletContext(); //得到Servlet上下文
String username = "小红"; //数据
context.setAttribute("username",username); //将一个数据保存在了ServletContext中
// 得到servlet中的值
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字"+username);
2、获取初始化参数
url
jdbc:mysql://localhost:3306/mybatis
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
//jdbc:mysql://localhost:3306/mybatis
3、请求转发
ServletContext context = this.getServletContext();
context.getRequestDispatcher("/gp").forward(req,resp);
//RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp"); //转发的请求路径
//requestDispatcher.forward(req,resp); //调用forward实现请求转发;
4、读取资源文件
Properties
- 在java目录下新建properties
- 在resources目录下新建properties
发现:都被打包到了同一个路径下:classes,我们俗称这个路径为classpath:
思路:需要一个文件流;
username=root12312
password=zxczxczxc
public class ServletDemo05 extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/kuang/servlet/aa.properties");
Properties prop = new Properties();
prop.load(is);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getWriter().print(user+":"+pwd);
}
}
HttpServletRequest
1、设置字符编码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
2、获取参数
String username = req.getParameter("username"); //得到单个参数,返回字符串
String password = req.getParameter("password");
String[] hobbys = req.getParameterValues("hobbys");//得到多个参数,返回字符串数组
3、请求转发
req.getRequestDispatcher("/success.jsp").forward(req,resp);
//与servletcontext请求转发相同,对象不同!
HttpServletResponse
1、实现重定向
//重定向时候一定要注意,路径问题,否则404;
resp.sendRedirect("/r/img");//重定向
面试题:请你聊聊重定向和转发的区别?
相同点
- 页面都会实现跳转
不同点
- 请求转发的时候,url不会产生变化(307)
- 重定向时候,url地址栏会发生变化(302)
Cookie、Session
保存会话的两种技术
cookie
- 客户端技术 (响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在Session中!
Cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
Cookie[] cookies = req.getCookies(); //得到cookie对象
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
注意点:
-
Cookie大小有限制4kb;
-
一个Cookie只能保存一个信息;
-
Cookie一般会保存在本地的 用户目录下 appdata;
删除Cookie:
- 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为 0 ;
编码解码:
URLEncoder.encode("小红","utf-8")
URLDecoder.decode(cookie.getValue(),"UTF-8")
Session
- 服务器会给每一个用户(浏览器)创建一个Seesion对象;
- 一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
Session和cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)
- Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)
- Session对象由服务创建;
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("小红",1)); //setAttribute
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
}
// Session创建的时候做了什么事情;
// Cookie cookie = new Cookie("JSESSIONID",sessionId);
// resp.addCookie(cookie);
//得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name"); //getAttribute
System.out.println(person.toString());
//移除Session的值
HttpSession session = req.getSession();
session.removeAttribute("name");
//手动注销Session
session.invalidate();
会话自动过期:web.xml配置
15
JSP
JSP基础语法
<%--jsp注释--%> 注释语句
<%= 变量或者表达式%> 输出语句
<% jsp语句块 %> 代码编写
<%! jsp声明 %> jsp声明部分
JSP声明:会被编译到JSP生成Java的类中!其他的,就会被生成到 jspService 方法中!
JSP指令
<%@page args.... %>
<%@include file=""%>
<%@include file="common/header.jsp"%> 会将多个个页面合二为一
拼接页面,本质还是三个
九大内置对象
NO | 内置对象 | 类型 | 功能 |
---|---|---|---|
1 | pageContext | javax.servlet.jsp.PageContext | 页面上下文 |
2 | request | javax.servlet.http.HttpServletrequest | 请求 |
3 | response | javax.servlet.http.HttpServletResponse | 响应 |
4 | session | javax.servlet.http.HttpSession | 会话 |
5 | application | javax.servlet.ServletContext | 应用程序 |
6 | config | javax.servlet.ServletConfig | Servlet的配置信息 |
7 | out | javax.servlet.jsp.jspWriter | 数据流 |
8 | page | java.lang.object | 当前JSP的实例 |
9 | exception | java.lang.Throwable | 运行时的异常 |
转自博客园:https://www.cnblogs.com/bekeyuan123/p/7071886.html
pageContext.setAttribute("name1","小红1号"); //保存的数据只在一个页面中有效
request.setAttribute("name2","小红2号"); //保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","小红3号"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","小红4号"); //保存的数据只在服务器中有效,从打开服务器到关闭服器
四大域
四个域的作用域范围大小:PageContext (page域) < request < session < servletContext(application域)
一、ServletContext
1、生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
2、作用范围:整个Web应用。
3、常用功能:
(a)在不同Servlet 之间转发
(b)读取资源文件。
二、Request 域
1、生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
2、作用范围:整个请求链(请求转发也存在)。
3、常用功能: 在整个请求链中共享数据。例如在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。
三、Session 域
1、生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存 中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session。
注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。
2、作用范围:一次会话。
3、常用功能:为浏览器创建独一无二的内存空间,在其中保存会话相关的信息。
四、PageContext 域
1、生命周期:当对JSP的请求时开始,当响应结束时销毁。
2、作用范围:整个JSP页面,是四大作用域中最小的一个,即超过这个页面就不能够使用了。(所以使用pageContext对象向其它页面传递参数是不可能的.)
3、常用功能:
(1)获取其它八大隐式对象,可以认为是一个入口对象。
(2)获取其所有域中的数据
(3)跳转到其他资源,其身上提供了forward和include方法,简化重定向和转发的操作。
转自博客园:https://www.cnblogs.com/leirocks/p/9132349.html
Filter(重点)
Filter 使用
Filter:过滤器 ,用来过滤网站的数据;
- 处理中文乱码
- 登录验证….
//1.实现 Filter(javax.servlet) 接口
public class TestFilter implements Filter{
//实现重写方法
}
//2.重写 init()、doFilter()、destroy()方法
//3.doFilter方法中要加入,否则程序会被拦截停止
chain.doFilter(request,response);
在web.xml中配置 Filter
TestFilter
com.kuang.filter.TestFilter
TestFilter
/servlet/*
过滤器常见应用
用户登录之后才能进入主页!用户注销后就不能进入主页了!
-
用户登录之后,向Sesison中放入用户的数据
-
进入主页的时候要判断用户是否已经登录;要求:在过滤器中实现!
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//Constant.USER_SESSION 为字符串常量,自行替换
if (request.getSession().getAttribute(Constant.USER_SESSION)==null){
response.sendRedirect("/error.jsp"); //重定向到错误页面
}
chain.doFilter(request,response);
Junit单元测试
依赖
junit
junit
4.12
使用
@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行!
@Test
public void test(){
System.out.println("Hello");
}
本篇总结转载于B站狂神说Java:https://space.bilibili.com/95256449