web-01
<--做笔记使用,不做参考-->
1、Servlet是用于开发web项目的技术。是一个接口,自定义的类继承HttpServlet类之后变成一个servlet。Servlet可以对web浏览器或者其他HTTP客户端程序发出的请求进行处理。
每次写完一个Servlet类之后都要在web.xml中注册一个servlet才能使用。<Servlet></Servlet> <ServletMapping></ServletMapping>
2、Servlet客户端请求的步骤及处理流程
(1)首先用户通过单击一个url链接来向Servlet发起请求。
(2)Web服务器接收到请求之后,会把该请求交给相应的容器进行处理,此时容器会创建两个对象:HttpServletResponse和HttpServletRequest。
(3)容器根据请求的url信息找到对应的Servlet,然后针对该请求创建一个单独的线程,同时把第2)步中创建的两个对象以参数的形式传递到新创建的线程中。
(4)容器调用Servlet的service()方法来完成对用户请求的响应,service()方法会调用doPost()或者doGet()方法完成具体的响应任务,同时把生成的动态页面返回给容器。
(5)容器把响应信息组装成HTTP格式返回给客户端,此时,线程运行结束,同时删除2)步创建的两个对象。
原文链接:https://blog.csdn.net/Dangsir666/article/details/90340896
3、请求和相应的方法
request方法列举:
request.getCharacterEncoding() // 获取字符编码
request.getContentLength()// 返回请求体内容的长度
request.getContentType() // 获取内容类型
request.getContextPath() // 获取上下文路径,就是"/"+工程名
request.getMethod() // 获取请求方式获取请求方式(GET与POST为主,也会有PUT、DELETE、INPUT)
request.getRequestedSessionId() // 获取sessionId
request.getRequestURI() // 获取"/"+工程名+请求路径
request.getRequestURL() // 获取完整的请求地址,不带queryString
request.getServletPath() // 获取请求路径
request.isSecure() // 获取此请求是否使用安全协议(比如https)
response方法列举:
setContentType() 告知浏览器数据类型
setCharacterEncoding() 设置Response的编码方式
setHeader() 设置消息头
setIntHeader() 通知浏览器在给定的时间后刷新,时间以秒为单位
setDateHeader() 处理页面缓存,防止JSP或者Servlet中的输出被浏览器保存在缓冲区中。 java中一般设置为response.setDateHeader("Expires", 0) 与jsp中response.setDateHeader("Expires", -1)效果一致
setStatus() 设置相应状态码
sendError() 返回服务器的预设错误网页并显示错误信息。response.sendError(404)返回的Content-Type:text/html
sendRedirect() 重定向页面
getOutputStream() 获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
getWriter() 获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
addCookie() 添加Cookie encodeURL() 对给定的url进行编码,以用于sendRedirect方法; 如果不需要编码,则直接返回(未经修改的)url。
encodeRedirectURL() 都对url附加上jsessionid参数进行了处理,如果需要,则在url的 path后面附加上;jsessionid=xxx;如果不需要则直接返回传入的url。
原文链接:https://blog.csdn.net/weixin_39352976/article/details/79402989
4、9大内置对象
pageContext 存东西
request 存东西
response
session 存东西
application 存东西
config
out
page
exception
获取web开发的常用对象
pageContext.setAttribute("name","licunzhi");保存的数据只能在一个页面中有效
request.setAttribute("name","licunzhi");保存的数据旨在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name","licunzhi");保存的数据只会在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name","licunzhi");保存的数据只在服务器中有效,从打开服务器到关闭服务器
应用场景:
request:客户端向服务器端发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用的,比如:购物车
application:客户端向服务器端发送请求,产生的数据,一个用户用完了,其他用户可能还要用,比如:聊天数据
5、EL表达式 ${}
需要导包,jstl,standard
获取数据
执行运算
6、浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换成为一个Java类
JSP本质上就是一个servlet
在jsp页面中只要是Java代码就会原封不动的输出
如果时html代码就会被转为out.write("<html>\r\n");这样的格式输出到前端
7、jsp表达式
<%--JSP表达式作用:用来将程序的输出,输出到客户端--%>
<%=变量或者表达式%>
例如<%=new Date()%>
JSP脚本片段:
<%
int i =0;
%>
<hr>
<%
for (int j = 0; j <3 ; j++) {
out.write("1---0");
}
out.write(i);
%>
JSP声明会被编译到JSP生成的Java类中,其他的就会被生成到_jspService方法中
在JSP中嵌入Java代码即可
<%%>
<%=%>
<%!%>
<%--注释--%>
JSP指令
<%@page args...%> //指定页面类型,例如404 500 <%@ page errorPage="error/500.jsp" %>
拼接网页,网页很多都是共用头部和底部,所以每次只需要写中间的主体内容就好了
<%@include file="common/header.jsp"%>
网页主体
<%@include file="common/footer.jsp"%>
JSP<标签>来拼接网页
<%jsp:include page="/common/header.jsp"%>
网页主体
<%jsp:include page="/common/footer.jsp"%>
拼接网页的时候 Java代码要注意变量不要重复,因为他们拼接之后就相当于是同一个程序中的代码
8、JSP标签 JSTL标签 EL表达式
JSP标签
<jsp:forward page="**.jsp">转发
<jsp:param name="" value="">参数 键值对
9、Javabean
实体类:Javabean有特定的写法:必须要有一个无参构造 属性必须私有化 必须有对应的get/set方法
实体类一般用于对应数据库中的字段
ORM:对象关系映射:表---->类 字段---->属性 行记录---->对象
private int id;
private String name;
private int age;
private String address;
public person(){
}
public person(int id,String name,int age,String address){
this.id=id;
this.name=name;
this.age=age;
this.address=address;
}
10、MVC三层架构
MVC---->modle view controller 模型 视图 控制器
现在的MVC架构:
Model 业务处理:业务逻辑(Service)
数据持久层:CRUD(Dao)
View:展示数据
提供链接发起servlet请求(a,form,img...等等设置a标签跳转)
Controller(当前的学习阶段Controller就是servlet)
接收用户的请求:request可以从请求中拿到 请求参数,session信息...等等
交给业务层处理对应的代码
控制视图的跳转
最简单的例子就是登录,登录成功则为下图中的操作反向处理一次
11、过滤器filter
//web.xml中的代码
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>se</servlet-name> <servlet-class>space.urbeautiful.Filter.testFilter</servlet-class> </servlet> <servlet-mapping> <servlet-name>se</servlet-name> <url-pattern>/servlet/a</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>se</servlet-name> <url-pattern>/a</url-pattern> </servlet-mapping> <filter> <filter-name>filter</filter-name> <filter-class>space.urbeautiful.Filter.filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name>
//只要是/servlet的任何请求都会经过这个过滤器 <url-pattern>/servlet/*</url-pattern> </filter-mapping> </web-app>
//Filter中的代码
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html"); filterChain.doFilter(servletRequest,servletResponse); }
//Servlet中的代码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("你好 未来"); }
将设置字符集解决乱码问题放在过滤器中过滤,请求的时候会过滤一次,响应回去的时候也要过滤一次
tomcat启动的时候,filter自动初始化,在tomcat关闭的时候自动销毁过滤器
/servlet/* 即将servlet下面的所有都过滤,不建议直接/* 每个包有每个包的作用,要有分别的过滤器
12、监听器(awt中用的较多 各种监听器) 暂时不学
13、下一期过滤器及其他