华清远见——javaWeb阶段总结
javaWeb:使用Java技术解决相关web互联网领域的技术总和。
总结
学习javaweb之前,首先要了解该如何创建maven项目,依赖的导入以及servlet的运用。
javaweb主要是分成了util层、entiey层、dao层、sevice层、action层以及前端界面:
util层主要是连接数据库,使得dao层能够对数据库内的数据进行操作
entity层主要是实体类
dao层主要是负责对数据向数据库增删改查的操作
service层主要是负责对数据的处理。如果没有数据处理任务的话,此层只做单纯的数据传递作用。
action层主要是负责在前端页面和后端之间传输数据的,以及进行页面的跳转,前端的数据通常是传入service层
前端界面主要就是通过jsp、html、css、json等展示数据的变换
servlet的配置
servlet
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
PrintWriter writer = resp.getWriter();
writer.println("hello servlet");
}
}
web.xml
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>action.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
获取路径getContextPath()
request.getContextPath(),得到工程名
request.getServletPath(),返回当前页面所在目录下全名称
request.getRequestURL(),返回浏览器地址栏地址
request.getRequestURI() ,返回包含工程名的当前页面全路径
举例:
以访问的路径为:http://localhost:8080/web01_war/hello,工程名为web01_war为例
System.out.println(req.getContextPath()); // "/web01_war"
System.out.println(req.getServletPath()); // "/hello"
System.out.println(req.getRequestURL()); // http://localhost:8080/web01_war/hello
System.out.println(req.getRequestURI()); // /web01_war/hello
request对象
对象方法
request.getMethod()获取请求方式,一般有get和post
request.getRequestURI();获取请求地址
request.getHeader(“user-agent”);获取请求浏览器信息
request.getHeader(“referer”);获取请求来源,防止盗链
request.getParameter(name)-根据name获得值
乱码问题
resp.setContentType("text/html;charset=UTF-8"); // 解决中文在浏览器中显示的乱码
req.setCharacterEncoding("UTF-8");
JSP
jsp写Java代码:<%java代码%>
jsp方法
<%!
public void show(){
for (int i = 0; i < 10;i++){
System.out.println(i);
}
}
%>
jsp输出语句
<%
out.print("hahahah");
out.write("--------");
%>
jsp循环
<%
for (int i = 0;i < 20;i++){
if (i % 2 == 0){%>
<div class="dan">kk</div>
<%}else {%>
<div class="shuang">yy</div>
<%}
}
%>
jsp导包
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
转发&重定向
转发
转发的就是一个请求处理了一部分功能,然后开始另一个请求处理剩下的功能.其本质就是一个请求
转发是共享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);
jsp页面获取数据
<% ArrayList<Emp> emps = (ArrayList<Emp>) request.getAttribute("emps");%>
重定向
重定向是一个请求的功能完成了,然后开启另一个请求,做另一个功能。 本质是两个请求。
重定向因为是两个不同的请求,所以是两个不同的request对象,因此不能共享数据。
浏览器地址栏的地址是显示重定向的地址。
resp.sendRedirect("show.jsp"); // 重定向
el表达式
- EL表达式全称:Expression Language,即表达式语言
- EL表达式作用:代替JSP页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)
- EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key
<h1>emp:${emp}</h1>
<h1>emp信息:${emp.eNo},${emp.eName}</h1>
<h1>emp1:${emp1}</h1>
<h1>emps:${emps}</h1>
<h1>age:${age}</h1>
<h1>age1:${age1}</h1>
<h1>nowTime:${nowTime}</h1>
jstl标签库
向maven项目中导入标签库
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
标签库的使用
使用前需要先引用导入的标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用方式
<h1>alice:
<c:if test="${age1 >= 18}">
成年人
</c:if>
<c:if test="${age1 < 18}">
未成年人
</c:if>
</h1>
<h1>
alice:
<c:choose>
<c:when test="${age1<6}">
儿童
</c:when>
<c:when test="${age1<18}">
青少年
</c:when>
<c:when test="${age1<36}">
青年
</c:when>
<c:otherwise>
青壮年
</c:otherwise>
</c:choose>
</h1>
<table>
<tr>
<th>员工编号</th><th>员工姓名</th><th>入职日期</th>
</tr>
<c:if test="${empty emps}">
<tr>
<td colspan="3">当前没有员工</td>
</tr>
</c:if>
<c:forEach items="${emps}" var="e">
<tr>
<td>${e.eNo}</td>
<td>${e.eName}</td>
<td>${e.eHireDate}</td>
</tr>
</c:forEach>
</table>
cookie
// 获取cookies
Cookie[] cookies = req.getCookies();
//新建cookies
Cookie cookie = new Cookie("mycard","1");
// 修改cookie中的数据
cookie.setValue("数据");
// *** 设置cookie的有效期 ,过期了cookie就不能使用了。如果没有设置有效期,那么有效期默认是session期间有效。
// *** session期间: 指你在浏览器中第一次访问某个服务器,到你把浏览器关闭的时 候,这之间这被称为session期间(session-会话)
// *** setMaxAge(单位秒)
cookie.setMaxAge(30);
// 添加cookie , 浏览器会保存这个cookie数据
resp.addCookie(cookie);
session
session的使用
// *** 登录成功的位置
HttpSession session = req.getSession(); // 获取session对象
session.setAttribute("loginname",name); //把数据保存在session对象中
//设置session的有效期
session.setMaxInactiveInterval(60);
//获取session中的数据,返回值是Object
Object loginname = session.getAttribute("loginname");
System.out.println(loginname+"-----");
//删除session中的数据
session.removeAttribute("loginname");
//设置session无效
session.invalidate();