0

点赞

0

回复

1919

浏览

如何配置web.xml文件?

Servlet本身只是 HttpServlet 抽象类的子类,通过重写 doGet() , doPost() 等方法来确定它响应HTTP请求的处理逻辑。在Servlet 3.0版本以后,在Servlet类上表明 @WebServlet 注解可以定义它处理的URL模式——Servlet容器在加载Servlet时会扫描到注解中的信息,并将URL模式与该Servlet的映射关系记录下来,在接收HTTP请求以后根据这张映射关系表进行请求分发处理。这样做的好处是: 单一职责——明确Servlet本身的职责,而将URL的映射关系交给容器管理 复用——Servlet本身和URL映射关系解耦,它可以被引入任意Web应用中匹配不同的URL模式(注解不会影响Servlet本身的功能) WEB.XML文件 在Servlet 3.0之前,Servlet和URL的映射关系必须在 WEB INF/web.xml 文件中定义: ...

java-webdeployservlet

0

点赞

0

回复

1008

浏览

JSP/Servlet的页面重定向

页面重定向 在用户登录并通过服务器验证以后,JSP会渲染一段HTML内容返回给浏览器,提示已经登录成功。但这样做存在一些问题: 用户体验不佳,用户成功登录后肯定需要去其他页面。如果登录成功在系统的任何一个页面都应该在导航栏中看到用户信息,如果进入一个提示信息页面,还需要一次点击才能到达目标页面。 在登录成功页面刷新,此时浏览器会提示是否重新提交数据,因为这是一个POST请求,如果点击了确定意味着将之前的数据再次提交一遍,这不是我们所希望的。 上述问题对于任意表单提交都是存在的,包括文章创建表单。 POST/REDIRECT/GET模式 上一节中表单提交的用户体验非常不友好,为了解决这个问题,一种叫做 Post/Redirect/GET https://en.wikipedia.org/wiki/Post/Redirect/Get 的模式被提出并广泛应用在Web程序开发中。和传统的表单提交方法不同,这种模式在POST请求完成后,会重定向(HTTP状态码302)到另外一个页面。这样相当于浏览器重新加载了一个页面(使用GET请求),此时用户无论如何刷新浏览器,都是刷新当前GET请求对应的页面而不再是重复提交一次表单。下面是一个用户提交订单到服务器的过程描述: SERVLET重定向 页面重定向相当于返回HTTP状态吗302以及一个重定向地址到浏览器,在Servlet中可以使用 HttpServletResponse sendRedirect() 方法来完成。例如在登录成功后,可以跳转到该用户的博客首页: @WebServlet("/account/login")...

java-webservlethttpform

0

点赞

0

回复

1345

浏览

Filter——拦截请求保护页面安全

在处理创建文章表单的Servlet中,创建了一个 Post 对象,它的成员变量 User 被设置为当前Session中的 user 属性。从业务逻辑的角度来说,那么在创建文章时必须保证当前用户已经登录,对于没有登录的用户,不应该让它看到创建文章的表单页面。 为了实现这样的需求,我们可以直接在Servlet中编写类似逻辑: User user = (User) req.getSession().getAttribute("user");...

java-webfilterservlet

3

点赞

2

回复

1353

浏览

管理用户状态——Cookie与Session

利用COOKIE跟踪用户状态 博客系统由多个功能(页面)组成: 1. 首页——包含博客功能简介、用户列表 2. 用户博客列表——包含某一用户的文章列表 3. 文章详细页面——包含某一篇文章的标题、详细内容、创建时间等信息 4. 创建文章页面——包含文章标题、内容的表单 在创建文章时,除了标题和内容,还需要知道是谁创建的这篇文章,当然我们不能够在表单中添加一个输入框让用户输入自己是谁——因为用户的身份很有可能被伪造。一个办法是在每一个页面被访问之前,我们要求用户输入在网站注册时输入的用户名/密码进行验证,如果验证通过才可以访问对应的页面。 HTTP基本认证 https://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%81 正好可以完成这样的功能,可是这样实在是太麻烦了,没访问一个页面都需要用户进行输入。 我们知道HTTP协议本身是无状态的,也就是说任何完全一致的请求都将会得到完全相同的返回。但是我们可以认为的在HTTP请求中定义状态。 Cookie http://zh.wikipedia.org/wiki/Cookie 是由客户端保存的小型文本文件,其内容为一系列的键值对,在浏览器访问同一个域名的不同页面时,会在HTTP请求中附上Cookie。 Cookie可以保存在内存中(关闭浏览器即消失),也可以保存在硬盘中(到达过期时间后消失)。另外,Cookie也是一个比较古老的东西,与JavaScript同样由网景公司发明,现已被标准化为RFC2109。 我们正是通过Cookie的这些特性来实现用户状态的保存的,每当用户访问一个网站时,服务器程序会分配给它一个唯一的id,这个id就是设置在Cookie中的,以打开浏览器第一次访问 http://tianmaying.com http://tianmaying.com 为例,因为是打开浏览器后第一次访问,所以请求头中不会有任何网站相关的Cookie存在,这时服务器会随机分配的一个字符串作为用户的id并放在Cookie中: Set Cookie:JSESSIONID=9074327855952DA4A296B67685523812; Path=/; HttpOnly...

sessionjava-webcookie

0

点赞

0

回复

888

浏览

Web表单处理实例:博客注册用户

我们已经了解了Web表单处理的关键概念,接下来我们就以博客注册用户表单为例来回顾应用我们之前学过的知识。 存储用户信息 到目前为止,我们尚未学习任何数据存储的知识,在本节中我们将用户注册的信息存放在内存中(即Java程序中的某个变量)。首先看看用户注册表单需要填写的信息: 在博客系统中,用户信息包括: 用户名——用户的唯一标识符,每一个用户的用户名必须不同 密码——用户登录的密码凭证 电子邮箱 用户博客的标题 用户博客的描述、简介 用户头像URL 根据此可以设计 User 类来表示用户对象: public class User {...

formjava-webJSP

0

点赞

0

回复

856

浏览

JSP指令与动作

概述 JSP指令 在JSP中,指令(directive)控制JSP编译器生成Servlet的行为,它能够设置JSP页面相关的属性以及控制生成HTML内容。之前我们已经接触过不少指令,例如: charset=utf 8" pageEncoding="utf 8"% ...

JSPjava-web

新建主题 记录代码

学员动态

  • t**y在课程中提出了问题:老师,已经add,为...
  • H**g向课程作业中提交了代码
  • z**e向课程作业中提交了代码
  • _**s向课程作业中提交了代码
  • 三**年添加了笔记:给BlogRepos...
  • I**y向课程作业中提交了代码
  • 天**君回复了7**4在课程中的问题:欢迎来到天码营学习,...
  • c**8在课程作业中回复了老师:全部回答了!太感谢...
  • _**s向课程作业中提交了代码
  • I**y向课程作业中提交了代码
  • 天**君回复了p**0在课程中的问题:欢迎来到天码营学习,...
  • 三**年添加了笔记:为了支持分页,我们需...
  • L**1完成了课程的作业
  • I**g向课程作业中提交了代码
  • I**y向课程作业中提交了代码
  • 手**掌在课程中提出了问题:void start...
  • w**3评论了I**g在课程中的作业:public sta...
  • j**a添加了笔记:使用记事本编写Jav...
  • I**y向课程作业中提交了代码
  • 三**年添加了笔记:上面这种方法解决了B...
  • 三**年添加了笔记:我们创建一个分页的类...
  • w**3评论了L**9在课程中的作业:那是我给的解题思路里...
  • 三**年添加了笔记:首先在UserRep...
  • I**y向课程作业中提交了代码
  • H**g向课程作业中提交了代码
  • I**y在课程中提出了问题:老师,这里不是很理解...
  • w**3评论了L**9在课程中的作业:不要直接去获取nam...
  • L**9向课程作业中提交了代码
  • h**6在课程作业中回复了老师:这样能成吗...
  • H**g向课程作业中提交了代码
  • _**s向课程作业中提交了代码
  • 浮**梦在课程作业中回复了老师:不是很懂这道题,可不...
  • L**9在课程作业中回复了老师:老师,题目提醒中这句...
  • 白**2在课程中提出了问题:for(T elem...
  • w**3回复了白**2在课程中的问题:这叫做for-eac...
  • I**y向课程作业中提交了代码
  • _**s向课程作业中提交了代码
  • j**a添加了笔记:包(Package)...
  • 天**君评论了h**6在课程中的作业:这是其他同学的作业,...
  • 天**君回复了F**k在课程中的问题:欢迎来到天码营学习,...
  • c**8向课程作业中提交了代码
  • H**g向课程作业中提交了代码
  • j**a添加了笔记:占用内存空间小的类型...
  • H**g向课程作业中提交了代码
  • c**8在课程作业中回复了老师:老师您好,有5个小问...
  • L**9在课程作业中回复了老师:谢谢老师,我试...
  • j**a添加了笔记:使用记事本编写Jav...
  • w**7向课程作业中提交了代码
  • I**y向课程作业中提交了代码
  • 天**君回复了c**8在课程中的问题:欢迎来到天码营学习,...
  • I**y向课程作业中提交了代码
  • j**a添加了笔记:不仅仅是使用Java...
  • j**a添加了笔记:包(Package)...
  • I**y向课程作业中提交了代码
  • w**3回复了t**y在课程中的问题:https://ww...
  • w**3回复了手**掌在课程中的问题:void 是返回类型...
  • 手**掌在课程中提出了问题:但是我装8的时候提示...
  • z**e向课程作业中提交了代码
  • 三**年添加了笔记:为了支持方便的分页功...
  • L**1向课程作业中提交了代码
  • c**8在课程中提出了问题:老师啊,这章讲的也太...
  • F**k在课程中提出了问题:我按照课程指导安装了...
  • 天**君回复了i**r在课程中的问题:欢迎来到天码营学习,...
  • h**i向课程作业中提交了代码
  • 天**君评论了c**8在课程中的作业:1、Optional...
  • 天**君回复了唐**学在课程中的问题:欢迎来到天码营学习,...
  • I**y向课程作业中提交了代码
  • w**3回复了手**掌在课程中的问题:安装java8重新配...
  • c**8在课程作业中回复了老师:老师还有一个问题! ...
  • L**9在课程作业中回复了老师:老师,请问我写的这个...
  • w**7完成了课程的作业
  • I**y在课程中提出了问题:老师,这样的赋值到底...
  • j**a添加了笔记
  • w**7在课程作业中回复了老师:页面显示是正常的啊,...
  • _**s向课程作业中提交了代码
  • c**x创建了代码片段:哪里能开发票办证小姐...
  • c**x创建了代码片段:ASDLKJASL打...
  • I**y向课程作业中提交了代码
  • c**8评论了h**6在课程中的作业:我也是学生,不是老师...
  • 三**年完成了课程的作业
  • j**a添加了笔记:保存代码: 快捷键C...
  • j**a添加了笔记:数学运算中存在自动类...
  • 三**年完成了课程的作业
  • I**g在课程作业中回复了老师:请问方法哪里写错了?...
  • I**g向课程作业中提交了代码
  • 三**年完成了课程的作业
  • L**9在课程作业中回复了老师:老师,请问为什么我写...
反馈意见