servlet
- Java web主要用的是sun公司制定的一种用于web服务器的功能的组件—servlet。
- 做Javaweb项目需要创建javaweb工程,和以往创建普通的Java项目不同,这个需要需要创建maven web项目,我自认为创建maven web项目非常重要,其中需要很多细节需要注意,因为我在创建maven web项目时有很多次都要创建好几次才会创建成功。以下是创建maven web项目的步骤
- 选择maven项目 ,选择项目的模板为maven-archetype-webapp.
- 设置项目的名字等信息
- 设置maven的路径
- 项目创建成功之后需要进行修改,找到项目结构,添加java, resources目录
- 新建文件夹,设置文件夹类型
- 删除原来低版本的web.xml文件
- 增加4.0版本的web.xml
- 安装配置tomcat 服务器
- java web项目运行,需要运行在支持java web项目的服务器上,常见的java web服务器:
tomcat
JBoss
Resin
Jetty
- 单击右侧的add configuration , 打开配置窗口
- 选择tomcat
- 选择tomcat的路径
- 修改项目的请求路径
- 项目启动成功之后,访问的url:
- 修改控制台乱码:
servlet的配置
要继承父类HttpServlet,在这里我也出现很多问题,继承父类时有时候会创建不上,经过我自己去网上查阅才知道我的servlet包没有导入进去,我的最终解决方案是File–>Project Structure–>Libraries–>点左边的"+"–>Java–>tomcat–>lib–>servlet-api.jar,导入jar包后问题得以解决。
servlet类
servlet的一般有四个步骤:这四个步骤对于我来说很实用,每次都会按照这个思路进行编写代码
- 设置编码方式
- 获取参数
- 处理数据
- 响应结果
web.xml配置
<servlet>
<!--给servlet命名-->
<servlet-name>login</servlet-name>
<!--servlet的类名-->
<servlet-class>action.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--使用servlet的名字, 通过这个名字,找到servlet对应的类-->
<servlet-name>login</servlet-name>
<!--servlet对应的url地址 , 通过在浏览器中使用这个地址 ① 浏览器地址栏输入这个地址 ② form的action , 表单提交使用 ③ 超链接中使用 -->
<url-pattern>/login</url-pattern>
</servlet-mapping>
servlet的执行方式
- 1.建立连接(ip:port):首先浏览器里面的通信模块先跟服务器的通信模块建立连接
- 2.发送请求(请求数据包):是浏览器发请求给服务器的通信模块
- 3.tomcat解析请求数据包。将请求的参数保存在request对象中,创建一个response对象。
- 4.tomcat容器创建servlet对象
- 5.调用service方法即service(request,response)
- 6.将响应数据打包
- 7.响应结果(响应数据包)
- 8.浏览器,解析响应结果,渲染到网页中
- 9.关闭连接
浏览器的缓存方式
- 服务器端:分为静态内容和动态内容
- 浏览器端:给定一个url地址,如果是静态内容就找缓存,缓存有就不再访问服务器了,目的是为了减少和服务器的交互。如果不希望访问缓存的内容,那么每次访问的时候就给url地址带不同的参数。如果是动态内容,就访问服务器。
jsp
jsp是一种运行在服务器端的页面, 它里面包含html, 嵌入一些java语言, 在服务器(tomcat)上经过解析转换, 输出为html页面。
jsp不需要配置,直接用他的路径和文件名进行访问,jsp的本质还是servlet。
转发和重定向
转发的就是一个请求处理了一部分功能,然后开始另一个请求处理剩下的功能,其本质就是一个请求。转发是共享request,response对象 ,因此可以把需要转发的数据保存在request对象中。浏览器的地址栏地址保存不变。(显示第一个请求的地址)
一下是转发的代码:
// 3. 转发到show.jsp
// **** 转发的目的是把数据传输到jsp页面上,让jsp页面可以使用
req.setAttribute("emp" , emp);
req.setAttribute("emps" , emps);
req.setAttribute("nowtime" , nowTime);
req.setAttribute("age" , age);
req.setAttribute("emp1" , emp1);
req.setAttribute("age1" , age1);
RequestDispatcher requestDispatcher = req.getRequestDispatcher("show.jsp");
requestDispatcher.forward(req,resp);
重定向是一个请求的功能完成了,然后开启另一个请求,做另一个功能。 本质是两个请求。(第一个请求是我们主动发的, 第二个请求是浏览器收到302代码和重定向的url地址, 然后浏览器主动发送的请求。)重定向因为是两个不同的请求,所以是两个不同的request对象,因此不能共享数据。
浏览器地址栏的地址是显示重定向的地址。(显示第二个请求的地址)
resp.sendRedirect("show.jsp"); // 重定向
el表达式
jsp页面上,用于方便的获取到转发到jsp页面上的数据的一种表达式语言。
语法规则: ${变量} , ${对象.属性}
cookie
- cookie:用于保存客户端的状态的计数。 当我们有多次请求的时候,这个多次请求被看做一个整体,这个整体中有些数据需要保存的时候,可以使用cookie,把数据保存在浏览器中。
- cookie的使用方式
- 服务器端代码中,创建cookie对象,在response中添加cookie
- 客户端访问服务器的时候,会将把当前访问路径有关的cookie发送到服务器端
- 服务器端可以在request中获取到cookie数据,然后对这些数据进行使用
- 浏览器可以设置禁用cookie,或者用户可以删除cookie数据,用户可以查看到cookie数据,所以重要数据不能直接保存在cookie中。
- cookie中存储的是string , 并且存储的数据大小也有限。
- cookie 可以设置有效期,过期之后,cookie会被浏览器清除掉。
session
session中保存数据:
getSession(): 规则就是如果有就根据sessionid获取session对象,如果没有就直接创建一个session对象。
getSession(boolean) : true, 同getSession()功能, false , 如果找不到session对象,就返回null.
// **** 登录成功的位置
HttpSession session = req.getSession(); // 获取session对象
session.setAttribute("loginname" , name); // 把数据保存在session对 象中
session中获取数据
// 获取session中的数据: 返回值是Object
Object loginname = session.getAttribute("loginname");
session中删除数据
// 删除session中的数据:
session.removeAttribute("loginname");
session默认在会话期间有效
**发请求(和服务器开始会话):**服务器会创建一个session对象,然后浏览器中保存这个session对象的sessionid(cookie:jsession)
**会话期间:**session中的数据,所有请求都可以共享;request对象是每一次请求,都是一个单独的新的对象,所以request不能共享数据。可以通过request对象的转发,来实现request中的数据共享。(servlet转发到对应的jsp)
**关闭浏览器:**关闭浏览器的时候cookie保存的session就消失了,session对象就无效了,会话结束。
**session会话超时:**可以设置session的有效期,如果没有设置session的有效期,默认的有效期是30分钟。
// 设置session的有效期
// setMaxInactiveInterval(秒)
session.setMaxInactiveInterval(60);
设置session无效:一般在退出系统的时候,需要清空session中保存的数据,使用invalidate方法,让session失效。
// 设置session无效
session.invalidate();
cookie和session的区别
cookie:客户端状态管理的jis
session:服务器端状态管理技术
过滤器(Filter)
过滤器类型:过滤器是sun提供一个组件, 需要依赖于tomcat容器运行。
**过滤器的执行过程:**访问请求的时候,先根据过滤器的配置,符号过滤器路径的请求,则先进入到过滤器中执行,执行结束之后,再根据情况,看是否需要进入到ervle中。
学习总结
在本阶段的学习中,可以由一下一句话概括"一讲就懂,一点就通,一做就废",其实由刚开始学习Java的焦虑和不解已经在慢慢的试着去解决和适应了,以前遇到不会的问题不知道如何下手解决,慢慢的跟着老师的步伐就已经开始学会"找错"了,在课堂上和平时如果遇到由bug我会先试着调试自己解决,实在不会的我会再问老师和同学,在这一点上我感觉刚开始学习有点进步。还有就是最先开始接触Java代码时我心里有点抵触,在后面老师和同学的帮助下我已经调整了心态,也渐渐的爱上了敲代码,特别是在解决错误成功的喜悦。