Servlet和JSP

导入外来项目

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生命周期:

  1. 创建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已经定义好得对象,不需要在定义,直接使用

名称类型
pageObject当前JSP的实例对象
pageContextPageContext当前页面容器
*requestContextHttpServletContext获取内容
*sessionContextHttpContext会话内容
applicationServletContext应用程序内容
exceptionException只有错误页面有
configServletConfig用来获取配置信息
outJspWriter输出流,JSP中的HTML内容通过out输出到页面
responseHttpServletResponse响应

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框架都用到了监听。

我们学习监听主要是学习客户链接和断开的监听。可以作为统计在线人数的依据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值