JavaEE开发-第七节 JavaEE补充(Servlet、JSP补充)
Servlet补充
-
有init、destroy生命周期方法
@Override public void init() throws ServletException { super.init(); //servlet第一次创建的时候调用 //servlet对象是第一次发请求的时候创建,以后再不会创建 } @Override public void destroy() { super.destroy(); }
- 可以通过注解、XML方式使用
-
注解
@WebServlet("/contact/*")
-
xml(web.xml中)
<servlet> <servlet-name>ContactServlet</servlet-name> <servlet-class>com.zh.xr.servlet.ContactServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ContactServlet</servlet-name> <url-pattern>/contact/*</url-pattern> </servlet-mapping>
-
- 可以使用loadOnStartup属性设置Servlet的创建时机
- 负数
- 首次访问Servlet时,才创建Servlet
- 默认值是:-1
- 非负数
- 项目部署到Web容器中时就会创建Servlet
- 数值越小,越先创建
-
举例:
//注解 @WebServlet(value = "/contact/*",loadOnStartup = 1) //也可以用xml
- 负数
ServletContext
- 一个ServletContext对象就代表一个Web应用,相当于iOS的UIApplication对象,可以用来与Web容器(Tomcat)通信
- 获取ServletContext
- request.getServletContext()
- servlet.getServletContext()
- 常用方法
- getMIMEType
- setAttribute\getAttribute\removeAttr
- 用来共享数据
- request也有相同的方法,但是共享范围只能在同一个请求的servlet转发之间共享
- ServletContext可以在整个应用程序中共享
- session只能在一个客户端发送不同请求时数据共享,ServletContext可以在n个客户端发送的数据之间共享
- 数据共享范围:request<session<ServletContext
- getRealPath
//获取文件类型 request.getServletContext().getMimeType("文件的路径") //这只一个图片的路径 ServletContext ctx = request.getServletContext(); String filename = UUID.randomUUID() + "." + FilenameUtils.getExtension(item.getName()); String image = BASE_DIR + "/" + IMG_DIR + "/" + filename; String filepath = ctx.getRealPath(image);
JSP的9大内置对象
- jsp的本质就是servlet
- 也就是说servlet中有的对象,jsp中也有
-
如下表
名字 类型 作用 request HttpServletRequest response HttpServletResponse session HttpSession application ServletContext 就是ServletContext page Servlet 等价于this,代表当前的servlet对象 pageContext PageContext 在当前页面内共享数据,jsp特有对象,可以用setAttribute\getAttribute\removeAttr设置临时存储数据,但是仅限于当前的jsp共享 out JspWriter 输出内容到页面,response.getWriter().write()= out.write() config ServletConfig exception Throwable
- 4个域对象:pageContext、request、session、application
- 共享范围从左至右,逐渐增大
利用EL表达式从JSP域对象中获取数据
-
下表
EL表达式 对应的JSP域对象 pageScope pageContext requestScope request sessionScope session applicationScope application
-
也就是说这些对象只能在el表达式中使用
<input type="text" value="${ user.name <%-- pageScope.name--%> <%-- requestScope.name--%> <%-- sessionScope.name--%> <%-- applicationScope.name--%> }">
- 如果写了
user.name
,就相当于没有指定到那个域去获取,那么EL表达式会做如下操作- 先通过
pageScope.user.name
获取值,如果获取不到 - 通过
requestScope.user.name
获取值,如果获取不到 - 通过
sessionScope.user.name
获取值,如果获取不到 - 通过
applicationScope.user.name
获取值
- 先通过
- 如果写了
-
还有一个对象param
- 如果客户端访问的jsp有参数如何获取?比如:
http://localhost:8080/xr/page/test.jsp?name=zh
-
在jsp中,如果在java代码中
<% request.getParameter("name"); %>
-
在EL表达式中用param获取
<%--EL表达式中使用param获取--%> <input value="${param.name}"> <%--错误--%> <input value="${requestScope.getParameter("name")}">
- 如果客户端访问的jsp有参数如何获取?比如:
JavaEE总结
- 也是javaweb项目,用于实现web端->服务端的网络请求的后台应用程序
- 如何用Idea新建一个javaweb项目
- 代码技术实现:
- 依赖Tomcat的技术:
- servlet实现客户端网络请求监听与响应
- JSP(特殊的servlet)展示web端页面
- Filter过滤客户端的网络请求
- Listener监听整Tomcat的部署与销毁
- 依赖于JavaSE(JDK)的JDBC框架来连接、执行sql语句、驱动数据库,常用的第三方框架为Spring JDBC
- 依赖Tomcat的技术:
- 可以说JavaEE学习的就是Tomcat
- 后序为什么会出现SSM框架?
- MyBatis:是对持久层(DAO层)的框架,对JDBC的封装,简化代码
- Spring:
- SpringMVC: