1.servlet类继承HttpServlet
重写service
service含有HttpServletRequest和HttpServletResponse两个类所创建的对象request和response
request:请求对象
response:响应对象
1.1 servlet编码方式设置
resp.setContentType("text/html;charset=UTF-8");//解决中文在游览器中显示的乱码
req.setCharacterEncoding("UTF-8");//解决接收前端提交的参数包含中文的时候出现的乱码
1.2 获取前端传入的参数
String eHireDate=req.getParameter("eHireDate");
1.3 如果前端传入的参数要进行数据转换,要进行判空
Date date=new Date();
if (eHireDate!=null){
date=new SimpleDateFormat("yyyy-MM-dd").parse(eHireDate);
}
1.4 web.xml文件的配置
<servlet>
<!--给servlet命名-->
<servlet-name>curd</servlet-name>
<!--servlet的类名-->
<servlet-class>servlet.EmpCurdServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--使用servlet的名字, 通过这个名字,找到servlet对应的类-->
<servlet-name>curd</servlet-name>
<!--servlet对应的url地址 , 通过在浏览器中使用这个地址
① 浏览器地址栏输入这个地址
② form的action , 表单提交使用
③ 超链接中使用
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
小结:
接收前端提交的数据
http://localhost:8080/webapp/servlet-url?key=value&k1=v1&k2=v2......
request对象getParameter(key) , 获取请求参数
getParameter 方法的返回值是String类型,使用的时候需要注意数据类型的转换
如果前端没有提交该参数, getParameter 返回值是null
如果前端提交的中文出现乱码, 设置编码为utf-8: request.setCharacterEncoding("utf-8")
响应结果
通过response对象的getWriter() 方法,得到输出流
通过输出流,输出字符串内容,作为响应结果
设置响应结果的类型 和字符编码: resp.setContentType("text/html;charset=UTF-8");
text/html , 这个是浏览器能解析的html格式
application/json , 这个是浏览器能解析的json格式 (后期在ajax中使用)
浏览器对不能解析的格式,就提示你下载(test/html , 就是浏览器不能解析的格式,就 提示下载。)
1.5 servlet 的映射方式
tomcat 优先查找servlet ,如果没有符合的servlet ,那么就找静态资源,如果也没有静态资源被找到, 就404
url匹配:
/具体名称:: 精确地址 ,没有扩展名, 以/开始。
/具体名称.扩展名:精确地址, 有扩展名, 以 / 开始
*.扩展名:通配符 + 扩展名, 所有以.do结尾的请求,都会被拦截, 不能以/开始。
/:拦截所有请求, 但不拦截jsp
/*:拦截所有请求
1.6在jsp中使用Java语句
<%
// ---- 登陆成功的用户,才可以访问这个jsp页面
Object val = session.getAttribute("val");
if(val == null||(boolean) val==false){
response.sendRedirect(request.getContextPath() + "/login.jsp");
}
%>
在jsp中使用循环
<%
Object emps = request.getAttribute("emps");
if (emps != null) {
if (emps instanceof List) {
List<Emp> list = (List<Emp>) emps;
for (int i = 0; i < list.size(); i++) {
Emp e = list.get(i);
%>
<tr>
<td><%=e.geteName()%></td>
<td><%=e.geteJob()%></td>
<td><%=e.geteManager()%></td>
<td><%=e.geteHireDate()%></td>
<td><%=e.geteSalary()%></td>
<td><%=e.getDeptNo()%></td>
<td><a href="<%=request.getContextPath()%>/toUpdate.do?eno=<%=e.getEno()%>">修改</a> <a href="<%=request.getContextPath()%>/delete.do?eno=<%=e.getEno()%>">删除</a></td>
</tr>
<%
}
}
}
%>
1.7 jsp中el表达式的使用
el表达式是jsp页面上,用于方便的获取到转发到jsp页面上的数据的一种表达式语言。
语法规则: ${变量} , ${对象.属性}
实例:
<h1>age:${age}</h1>
1.8 转发与重定向
转发实例:
req.setAttribute("emp",emp);
RequestDispatcher rd=req.getRequestDispatcher("emp/updateEmp.jsp");
rd.forward(req,resp);
1.第一步设置转发的属性值
2.第二步设置转到到哪个页面
3.第三步进行转发
转发原理:
转发的就是一个请求处理了一部分功能,然后开始另一个请求处理剩下的功能. 其本质就是一个请 求 转发是共享request, response对象 ,因此可以把需要转发的数据保存在request对象中。 浏览器的地址栏地址保存不变。(显示第一个请求的地址)
重定向实例:
resp.sendRedirect(req.getContextPath()+"/toLogin.do");
将页面重定向到指定的页面中
重定向原理:重定向是一个请求的功能完成了,然后开启另一个请求,做另一个功能。 本质是两个请求。(第一 个请求是我们主动发的, 第二个请求是浏览器收到302代码和重定向的url地址, 然后浏览器主动 发送的请求。) 重定向因为是两个不同的请求,所以是两个不同的request对象,因此不能共享数据。 浏览器地址栏的地址是显示重定向的地址。(显示第二个请求的地址)
1.9 jstl标签
1.导入jar包:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.导入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--taglib指令
prefix="c" , prefix 前缀 , 表示在使用的标签的前面都要加上c: ,解决命名冲突
--%>
3.标签的使用:
<c:choose>
<c:when test="${age1<6}">
儿童
</c:when>
<c:when test="${age1<18}">
青少年
</c:when>
<c:when test="${age < 36}">
青年
</c:when>
<c:otherwise>
青壮年
</c:otherwise>
</c:choose>
2..cookie的使用
cookie和session的使用
区别:
cookie : 客户端状态管理的技术
session:服务器端状态管理技术
1.cookie
1.1 定义cookie
Cookie cookie = new Cookie("mycard" , "1");
1.2. 设置cookie的属性
c.setValue(count +"");
c.setMaxAge(30);
1.3 添加cookie
resp.addCookie(cookie);
1.4 获取cookie
Cookie[] cookies = req.getCookies();
2.session
2.1.session中保存数据的原理
getSession(): 规则就是如果有就根据sessionid获取session对象,如果没有就直接创建一个 session对象。
getSession()的使用:getSession(boolean) : true, 同getSession()功能, false , 如果找不到session对象,就返回null.
2.2 使用步骤:
1.获取session对象
HttpSession session = req.getSession();
2.设置session属性值(把数据保存在session对 象中):
session.setAttribute("loginname" , name);
3.session中获取数据
Object loginname = session.getAttribute("loginname");
4.session中删除数据
session.removeAttribute("loginname");
6.设置session无效
session.invalidate();
使用情况:一般在退出系统的时候,需要清空session中保存的数据, 使用invalidate方法,让session失 效。
7.session的生命周期:session默认在会话期间有效
8.session会话超时,可以设置session的有效期
session.setMaxInactiveInterval(60);
学习心得:
在JavaWeb的学习期间,我因为粗心遇到了许许多多的问题,但是都被我发现或者问老师解决了,没有及时的复习,我也渐渐的忘掉了一些概念,导致我只知道怎么使用,却有点不明白原因了,我觉得我因该及时复习,去巩固所学到的知识,在JavaWeb我认为有四个学习要点,servlet的使用,cookie和session的使用,以及JavaWeb的作用域,pageContext :只在当前页面有效 request : 请求期间有效 session: 会话期间有效 application : 程序运行期间有效。