Servlet简要总结
Servlet简要总结
很久没有更新文章了,今天小编简单总结一下servlet的部分的内容
创建一个web项目的简要步骤:
添加tomcat
创建类继承 HttpServlet 重写dopost() doget()方法
配置web.xml
<servlet>
<servlet-name>servletName</servlet-name>
<servlet-class>对应的类</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletName</servlet-name>
<url-pattern>请求路径</url-pattern>
</servlet-mapping>
两个的servletName要相同, 请求时:url-pattern>>servlet-name(servlet-mapping)
>>servlet-name(servlet)>>servlet-class
Servlet
接口:Servlet ServletConfig Serializable
抽象类:GenericServlet
实现类:HttpServlet
String getServletName() 获取servlet名字 包名.类名
ServletContext getServletContext()获取web项目的容器 servletContext 整个工程只有一个,
在web服务启动时,对象就已经生产 服务关闭时,才会丢失
ServletContext 不能手动创建,也不能以任何方式创建
缺点:生命周期太长 每一添加到application 都会添加内存 导致web的服务负担会变大
setAttribute(key,value); Attribute() 内核是Map
getAttribute(key); //获取
String getInitParameter(String var); //获取初始化参数 方便后期修改动态可变的值,比如数据库的链接参数
<init-param>
<param-anme>name</param-name>
<param-value>value</param-value>
</init-param>
可以使用多个
局部初始化 全局初始化
<context-param>
<context-name></context-name>
<context-value></context-value>
</context-param>
全局时使用 getServletContext().getInitParameter(String key)
每个servlet 相互独立
Enumeration<String> getInitParameterNames().//获取所有的初始换参数
Enumeration 只有两个方法
enumeration.hasMoreElements();
enumeration.nextElement();
注解方式: 使用注解 @webServlet( name="name",urlPatterns="/XXX"); 配置在ideal的web方便管理
Servlet的声明周期:
init(ServletConfig)只会执行一次
Service(ServletRequest ,ServletResponse) 用户进来第一个请求的方法,数据的入口
void destroy()
关闭服务时执行destory();
httpServelet中两个service的区别
service(ServletRequest,ServletResponse) //将servlet转为httpServlet 调用service(HttpServletRequest,HttpServletResponse) 此方法判断,调用doget或dopost方法
response
response.setContextType("text/html;charset=utf-8"); 返回的页面格式 页面语言编码
response.sendError([状态编码],[错误信息]); 自定义错误
response.sendError([状态编码]); 自定义错误 只有编码
response.sendRedirect("[路径]") 转向 重定向 跳转
可以跳转本工程路径,也可以到外部工程路径
不能带走request和response 对象
不能访问/WEB-INF目录
会改变用户浏览器的路径(而转发不会改变)
转向是有response发起的( 转发是由request发起的)
企业开发中 一个请求只能对应一个响应对象
实际企业开发中不能在书写逻辑代码 语法上支持接续编写代码(除了转发和转向)
Request
request.getParameterMap(); //获取所有的
request.getParameterValues(); //获取同一个name的值
request.getParameterNames()// Enumeration
request.getSession()//
request.getCharaterEncoding()//获取请求编码 在系统默认语言编码是iso-8859-1
在默认系统中传递中文会出现乱码
实际开发中,前后端都写为utf-8避免乱码(或相同)
request.removeAttribute()
request.getRequstDispatcher("[转发路径]").forword(request,response)// 转发(发报机)
在请求的时候,默认不会显示转发的路径 路径问题:
转发,带走当前当前的响应和请求对象 当两个对象的生命周期延续
企业中,转发使用在转发页面,很少转发到后端servlet
servlet访问与文件夹无关
只能跳转自身工程内容
/ 项目文件下 没有的时候是相对路径访问
转发可以访问 WEB-INF下的文件 (只能使用代码 转发实现)
Sessoin
request.getSession(); session是http协议决定的
HttpSession session=request.getSession();
session.setAttribute(key,value);
session.removeAttribute(key) ; 移除值
session.getAttribute(key); 返回的的是object //用户无法伪造 安全
session.getCreationTime() 获取创建时间 long
Timstamp(session.getCreationTime()) ;
session.isNew() session是否为第一次创建
session.getId();String 每个用户的id都是唯一的
session.getMaxIntactiveIneterval() 返回int 获取session的最大生命时间 默认30分钟
session.setMaxIntactiveIneterval(int) 设置值 在时间内没有进行任何操作session就会丢失
seesion 打开项目的任意页面是,session创建 关闭浏览器时session丢失 服务器关闭的时候也会丢失 session超过最大生命时间
如果页面内容没有动态数据或链接 浏览器会缓存
session会占据内存资源
过滤器
@WebFilter(filterName = "MyFilter",urlPattern="/*")//注解 *通配符
public class MyFilter implements Filter {
尽量使用*结束.指定路径的所有内容都被拦截
Filter跟随web服务启动,web服务关闭而结束
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
servletRequest.getRequestURI()//获取请求相对路径
chain.doFilter(req, resp);//放行方法 放行的不会再进入filter
}
public void init(FilterConfig config) throws ServletException {
//执行一次
}
}
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.xsshuai.filter.MyFilterContext</filter-class>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
使用过多效率低下
在init里获取需要过滤的文件 添加到集合
@WebListener()
public class Listener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener {
public Listener() {
}
web启动时自动启动
public void contextInitialized(ServletContextEvent sce) { }
public void contextDestroyed(ServletContextEvent sce) { }
public void sessionCreated(HttpSessionEvent se) { }
public void sessionDestroyed(HttpSessionEvent se) { }
public void attributeAdded(HttpSessionBindingEvent sbe) { }
public void attributeRemoved(HttpSessionBindingEvent sbe) { }
public void attributeReplaced(HttpSessionBindingEvent sbe) { }
}
Listener的web.xml配置
<listener>
<listener-class>package.className</listener-class>
</listener>
以上是个人部分笔记,大神请忽略,如有错误请评论,我在word上写的上传到头条,如有排版乱的情况,还请见谅
发表评论 取消回复