导入外来项目
maven的版本要一致
resource 需要进行标记 标记成资源目录
Maven 进行clean 在进行生成
将Maven项目转换成Web项目
Servlet
Servlet 是什么?
就是在web服务器上运行的Java程序
JSP
Java Server Pages
运行在服务器上的页面
支持Servelet 和JSP 需要引入Pom
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
get-doGet
新建Servlet 测试请求Servlet
增加一个servlet包
(mvc: M模块:bean+service+dao,
V模块:看得见的页面JSP,
C模块:servlet控制层)
V负责收集页面上用户输入的数据,和展示程序处理完的结果。
C负责接收页面的请求及页面的数据,调用M层处理,并把结果反馈给V
M负责被C调用,具体处理业务数据。
地址栏上输入地址访问,发起的请求是GET请求,对应的是Servlet中的doGet方法
post+doPost
Post请求无法通过地址栏发出,只能是表单的post方式请求。
post方式对应的是Servlet中的doPost方法,doGet和doPost放在处理业务上是一样的,所以一般致谢一个方法,另一个方法调用。
IDEA下 Tomcat的配置 提高性能
重新部署 java有些东西已经生效 速度比 重启服务器要快一些
更新资源和类 html改了类以后 不需要重启服务器
IllegalArgumentException
路径不对异常,页面上会出现404问题
private Logger logger = LogManager.getLogger(this.getClass());
Tomcat
端口占用的情况
情况一:
IDEA 闪退过 IDEA 把Tomacat 启动后 又闪退,此时进程里不显示,但端口一直占用
此时我们需要使用 -ano|find “80“ 查找到端口号 并关闭端口
情况二:
可能是手动启动了Tomcat 没有关闭shutup.bat 需要找到bin下的shutdown.bat
webapps
下的Root根目录 是默认启动后打开的路径,我们可以将自己的项目移入,默认打开了我们的项目
conf
/server.xml
修改8080 改成80 则直接使用locahost可以访问
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
PostMan
可以用来测试 get请求 和Post请求
参数前往后
参数后往前
Servlet初始化
什么时候初始化?初始化参数?
Servlet初始化的时机:
两个时机:第一次访问时初始化。(通过地址栏或者表单)
第二个Tomcat启动时初始化。
Servlet是单例的。初始化Servlet后存放在Tomcat(服务器中)
服务器启动初始化的优点:可以节省用户的访问时间,不懂等地啊Servlet初始化时间。可以在初始化时传递一些参数。
Servlet生命周期:
- 创建Servlet对象;2.执行init方法;3.业务方法servic;4.destory销毁(服务器停止前会自动执行);
init初始化时,根据实际业务可能要做比如:文件系统或数据库系统的初始化
destroy销毁时,根据init做相应的资源回收或一些释放性的工作,还原性的工作。
注解配置 load-on-startup="0/整数"
零和正数时 数字越小 越早创建
负数时,浏览器调用才会进行servle 初始化
转发重定向
转发:地址栏不变
重定向:地址栏变化
1.StoreServlet?method=sale&number=1这时向服务器请求的地址
2.StoreServlet处理完成后,相应给浏览器,地址栏依然是上面的。
3.StoreServlet转发到success.jsp后,浏览器显示的是success.jsp里面的内容,地址栏依然是上面的,没有变化,这就是转发。转发过程中request始终是有效的,可以传递数据。无论转发多少次,都算做一次请求。始终是同一个request 不会丢失数据。 转发是一次请求 同一个request
一次请求对应一个request,多个请求,对应多个request。
当地址栏随着页面内容变化时是重定向。重定向是第一个请求到服务器后,Servlet向浏览器发起一个重定向的响应,浏览器收到响应后自动在发起一次请求,这里共有两次请求,两次的地址是不一样的。既然是两次请求,就是两个request,Servlet要想向页面传递数据用request行不通。
登录成功后重定向到主页面
如果是转发的化,地址栏没有变化,客户就会在浏览器上刷新,会发起多次相同的请求,给服务器带来压力。
三大容器
request,session,application作用范围?
一次请求,一个会话,一个应用程序 范围依次变大
request 前后台传值
session 登录的校验 登录后重定向到主页面 一个会话的作用域,更换浏览器后 则失效
application 给应用程序配置一个参数 并读出来
9.jsp
注释,Java代码块,Java表达式,EL表达式
JSP
JSP 式Java代码+HTML的结合体,理论上可以完成所有的操作,这种做法是JSP开发模式一。(缺点:Java代码和HTML代码混合,较乱,也不能大规模的模块复用)
JSP之前程序员用Servlet完成开发,Servlet特点是写Java代码,它也可以写HTML代码,如果不用JSP,纯用Servlet将是非常困难的。
MVC模式,最终。
JSP最终会生成一个Java文件,并自动编译成一个类文件。
xxx.jsp ->xxx_jsp.java->xxx_Servlet.class在Tomcat的work目录下
用户目录下/Idea版本下/systeam/tomcat下,项目发布位置
注释,Java代码块,Java表达式,EL表达式
EL:表达式语言,是一个标签(HTML+Java代码)
((College)request.getAttribute(“college”)).getName()
${college.name}代替上面的代码
如果request中没有college,则取到的是空的,就要取session中取,如果session也是空的,则取application中取,这些都是要判断的
但是EL表达式会自动从request中取,如果没有则自动取session中,同理取application中,这是EL的优点。
使用EL首先在JSP中导入它的标签。
JSP的指令标签:page,taglib,include,也叫静态指令标签。
page中可以指定编码方式(解决页面乱码问题。 text/html;charset=“utf-8”),可以指定错误页面
EL范围写法
指定范围,好处是提高EL查找的效率,从指定的容器中获取数据,而不是每次从最小的找起。page->request->session->application
pageScore
三大指令
page taglib include
include(静态包含):一个JSP包含另一个JSP,最终合二为一,它们的代码是合在一起的,一个JSP中定义过的变量,在另一个JSP中是无法重复定义的,当被包含的JSP的代码有变动,包含JSP也会有变动
动态包含:也叫JSP动作标签(有多个动作标签)
一个JSP的页面包含另一个JSP的页面 (相当于画中画,只是简单把一个页面的画面包含在另一个页面的画布中),两个JSP 互不影响。
静态包含和动态包含的区别
错误页面error
500 一般是服务器问题 可能是空指针报错
自定义一个错误页面,来专门处理500错误,这个页面被那个JSP引用,那个JSP中发生错误后就会显示这个错误页面。
这个错误页面中的page指令中要明确指定当前JSP是用来处理错误的页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
错误页面中有一个叫exception,可以通过它来获取异常信息。
普通页面是没有这个对象的。当定义一个JSP,并且指定了isErrorPage=true时,这个JSP中才会有exception对象。
通过web.xml配置公告的错误页面,主要是通过HTTP协议的状态码来处理的,优点是不用每个JSP设置错误页面。注意:开发时把该配置屏蔽,因为掩盖了解决问题的错误信息,在发布产品时必须打开。
九大内置对象
JSP已经定义好得对象,不需要在定义,直接使用
名称 | 类型 | |
---|---|---|
page | Object | 当前JSP的实例对象 |
pageContext | PageContext | 当前页面容器 |
*requestContext | HttpServletContext | 获取内容 |
*sessionContext | HttpContext | 会话内容 |
application | ServletContext | 应用程序内容 |
exception | Exception | 只有错误页面有 |
config | ServletConfig | 用来获取配置信息 |
out | JspWriter | 输出流,JSP中的HTML内容通过out输出到页面 |
response | HttpServletResponse | 响应 |
C标签
Layui,Easyui,Bootstram用了前端框架就用了AJAX,AJAX配合框架完成所有的页面的功能。
在框架之前纯JSP用的都是C标签。
过滤器
过滤器,过滤请求,它的应用场景有许多,原理只有一个,当请求经过过滤器时,对请求做各种处理(根据业务需求)
两大场景:1.对编码的过滤,防止乱码。
2.对登录和权限的过滤。当请求过来时,发现没有登录,则重定向到登 录页面,或者发现请求的权限不是当前用户的权限,则提示无法访问。
如果没有编码过滤器,则需要在每个Servlet的get或post方法中写编码的处理。
过滤器是实现Filter的接口。在接口中可以允许被过滤的请求通过,或拒绝。
//注解方式配置过滤器
@WebFilter(filterName = "Filter1Coding" , urlPatterns = "/*"
, initParams = {@WebInitParam(name="coder",value = "utf-8")}
定义一个过滤器,名称是Filter1Coding,过滤的范围为是所有的请求,配置一个参数coder
登录过滤器:
LogingServlet 处理登录,登录成功后给session放一个当前用户对象,session是会话对象,浏览器链接到服务器后,在服务器上开辟的一个内存空间,这个空间通过session对象来访问。没有登录成功前,session中没有用户对象,登录成功后,给session中放入昂前用户对象,后面每次请求都会先判断session中有没有用户,没有则去登录。
eg:编码过滤器
监听器
监听项目启动,监听客户链接,监听容器中数据的变化。
Strus框架 SpringMVC框架都用到了监听。
我们学习监听主要是学习客户链接和断开的监听。可以作为统计在线人数的依据。