JavaWeb学习
JavaWeb
1、基本概念
web开发:
- web,网页
- 静态web:html,css,数据不会变化
- 动态web
web应用程序
- html,css,js
- jsp,servlet
- java程序
- jar包
- 配置文件properties
静态web
- *.html , 都是网页后缀,如果一直存在,就可以直接读取
- 静态weib缺点
- 无法动态更新,所用用户都是同一个页面
动态web
- 动态更新,所有用户看到的都不是同一个页面
- 可以与数据库交互
2、web服务器
asp,jsp,php
服务器是一种被动操作,用来处理用户一些请求和响应信息
3、Tomcat
4、Maven
用来方便导入jar包的 约定大于配置
5、Servlet
5.1、简介
- Servlet是sun公司开发动态web的一门技术
- sun在这些API中提供的一个接口叫做:Servlet,如果你想开发一个Servlet程序,需完成:
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到web服务器中
把实现了Servlet接口的Java程序叫做,Servlet
5.2、 ServletContext
web容器在启动的时候,会为每个web程序都创建一个对应的ServletContext对象,代表了当前的web应用
1、共享数据
在这个Servlet中保存的数据,可以在另一个Servlet中拿到
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username="qin";
context.setAttribute("username",username);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username= (String) context.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字"+username);
}
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.rtt.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.rtt.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>
2、获取初始化参数
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/nybatis</param-value>
</context-param>
<servlet>
<servlet-name>gp</servlet-name>
<servlet-class>com.rtt.servlet.ServletDemo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>gp</servlet-name>
<url-pattern>/gp</url-pattern>
</servlet-mapping>
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String url= context.getInitParameter("url");
resp.getWriter().print(url);
3、请求转发
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
System.out.println("进入ServletDemo04");
context.getRequestDispatcher("/gp").forward(req,resp);
}
4、读取资源文件
Properties
- 在java目录下新建properties
- 在resources目录下新建properties
发现:都被打包到同一个路径下:class ,俗称classpath
思路:需要一个文件流
5.3、HttpServletResponse
web服务器接收到客户端http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse。
- 如果要获取客户端请求过来的参数:找HttpServletRequest
- 如果要给客户端响应一些信息:找HttpServletResponse
下载文件
- 获取下载路径
- 下载的文件名
- 设置想办法让浏览器能够支持下载我们需要的东西
- 获取下载文件的输入流
- 创建缓冲区
- 获取outputstream对象
- 将fileoutputstream流写入到buffer缓冲区
- 使用outputstream将缓冲区中的数据输出到客户端
验证码实现
重定向
B一个web资源收到客户端A请求后,B会通知客户端去访问另一个web资源,这个过程叫重定向
与转发的区别:
都会实现跳转,请求转发时url不会变化,重定向时url地址栏会发生变化
5.4、HttpServletRequest
获取前端传递参数,并转发
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbies = req.getParameterValues("hobby");
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbies));
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}
6、Cookie、Session
6.1、会话
用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话
6.2、保存会话两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户信息和数据保存在session中
常见场景:网站登录之后,下次不用登陆了,第二次访问直接进入
6.3、Cookie
-
从请求中拿到Cookie信息
-
服务器响应给客户端cookie
Cookie[] cookies = req.getCookies();//获得cookie cookie.getValue();//获得cookie的key Cookie cookie = cookies[i];//获得cookie的value Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//新建一个cookie cookie.setsetMaxAge(24*60*60);//设置有效期 resp.addCookie(cookie);//响应给客户端一个cookiecookie:一般会保存在本地用户目录下
6.4、Session
什么是Session:
- 服务器会给每一个用户(浏览器)创建一个Session对象
- 一个Session独占一个浏览器,只要浏览器没关闭,Session就存在
- 用户登录之后,整个网站都能访问
Session和Cookie区别:
- cookie是把用户的数据写给用户的浏览器,浏览器保存
- Session是把用户的数据写到用户独占的Session中,服务端保存,保存重要信息,减少服务器资源浪费
- Session对象由服务器创建
使用场景:
- 保存一个登录用户的信息
- 购物车信息
- 在整个网站中经常会使用的数据,将它保存在Session中
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("GBK");
resp.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=itf-8");
HttpSession session = req.getSession();//得到Session
session.setAttribute("name",new Person("饶天天",1));//存
String sessionId = session.getId();
if(session.isNew()){
resp.getWriter().write("session创建成功"+sessionId);
}else{
resp.getWriter().write("session已存在"+sessionId);
}
}
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();//手动
HttpSession session = req.getSession();//得到Session
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
7、JSP
7.1、什么是JSP
java server Pages:Java服务端页面,和Servlet一样,用于动态技术
最大的特点:
- 写JSP就像在写HTML
- 区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入Java代码,为用户提供动态数据
7.2、JSP原理
- 代码层面没有任何问题
- 服务器内部工作
- Tomcat中有一个work目录
- idea中使用Tomcat的会在idea的Tomcat中生产一个work目录
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会转换为java类
7.3、JSP基础语法
jsp表达式
<%--
<%=变量或者表达式%>
--%>
<%=new java.util.Date()%>
8、JavaBean
实体类javabean有特定的写法
- 必须要有无参构造
- 属性必须私有化
- 必须有对应的get/set方法
一般用来和数据库的字段做映射
9、MVC三层架构
什么是MVC:model,view,controller,模型,视图,控制器
Model:
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD(dao)
View:
- 展示数据
- 提供链接发起Servlet请求(a,form,img...)
Controller:
- 接收用户请求:request:请求参数
- 交给业务层处理对应代码
- 控制视图跳转
10、Filter
过滤器,用来过滤网站数据
- 处理中文乱码
- 登录验证...
开发步骤:
-
导包
-
编写过滤器
-
导包不要错 javaServlet
-
public class CharacterEncodingFilter implements Filter { //初始化 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CharacterEncodingFilter初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html;charset=utf-8"); System.out.println("执行前"); filterChain.doFilter(servletRequest,servletResponse); System.out.println("执行后"); } //销毁 @Override public void destroy() { System.out.println("CharacterEncodingFilter销毁"); } } -
在web.xml中配置filter
<servlet> <servlet-name>showservlet</servlet-name> <servlet-class>com.rtt.servlet.ShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>showservlet</servlet-name> <url-pattern>/servlet/show</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>showservlet</servlet-name> <url-pattern>/show</url-pattern> </servlet-mapping> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.rtt.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
-
11、监听器
实现一个监听器接口
12、过滤器、监听器常见应用
用户登录之后才能进入主页,用户注销就不能进入主页
13、JDBC
java连接数据库
步骤
- 加载驱动
- 连接数据库,代表数据库
- 向数据库发送SQL对象statement:CRUD
- 编写SQL(根据业务,不同的SQL)
- 执行SQL
- 关闭连接

浙公网安备 33010602011771号