1.http

  a.定义:超文本传输协议

  b.作用:web服务器与web浏览器之间通信

  c.步骤:

    ①客户端与web服务器建立连接(IP地址与端口号)

    ②客户端发送http请求(请求资源路径)

    ③服务器接收客户端的http请求,生成http响应回发

    ④服务端关闭连接;客户端解析回发响应

2.Web容器:

  a.常用:Tomcat、Weblogic、jboss

  b.作用:用来管理Servlet

3.Servlet:

  a.定义:在服务端运行的Java程序

  b.作用:在服务端产生动态内容

  c.使用:

    ①创建Servlet类,继承HttpServlet,重写doGet方法

public class MyFirstServlet extends HttpServlet{

    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { PrintWriter out = resp.getWriter(); out.write("<html>");
out.write("<head>");
out.write("</head>");
out.write("<body>");
out.write("<p style='color:red'>this is p</p>");
out.write("</body>");
out.write("</html>"); }
}

    ②配置web.xml文件

<servlet>
<servlet-name>myFirst</servlet-name>
<servlet-class>com.servlet.MyFirstServlet</servlet-class>
</servlet>

    ③Servlet的映射

<servlet-mapping>
<servlet-name>myFirst</servlet-name>
<url-pattern>/myfirst</url-pattern>
</servlet-mapping>

4.Servlet的生命周期

  a.创建与初始化  init()

    ①默认是在Servlet第一次访问时创建和初始化(单例模式)

    ②注:在<servlet>标签中的最后加<load-on-startup>1</load-on-startup>以在服务器启动时创建和初始化,其中的1表示优先级,0为默认,数字越小优先级越大

  b.服务  doGet()与doPost()

    ①doGet()对应表单method属性中的get;doPost()对应表单method属性中的post

    ②注:若重写了service()方法,则不调用doGet()或doPost()

  c.销毁  destroy()

    ①在服务器停止时调用destroy()

  d.初始化参数的设定

    ①设置servlet的初始化参数(在<servlet>标签内书写)

<init-param>
<param-name>email</param-name>
<param-value>test@qq.com</param-value>
<init-param>

      调用

String email = getServletConfig().getInitParameter("email");

    ②设置全局上下文的初始化参数(与<servlet>标签平级)

<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
<context-param>

      调用

String name = getServletConfig(). getServletContext().getInitParameter("name");

5.响应

  a.错误信息处理

    ①sendError()方法

response.sendError(500,"服务器内部出现异常");

    ②配置<error-page>(在<web-app>中书写)

<error-page>
<error-code>404</error-code>
<location>/404Error.html</location>
<error-page>

  b.重定向(跳转)

response.sendRedirect("../MyHtml.html");

    注:这里实际发送了两次请求

6.请求

  a.根据name获取值

String userName = reques.getParameter("userName");    //获取单个元素的value值

String[]  favs = reques.getParameterValues("fav");    //获取多个元素的value值(适用于复选框)

  b.其他请求的方法

request.getMethod()    //获取请求的方法

request.getRequestURI()    //获取请求的方法URI

request.getRequestURL()    //获取请求的URL

request.getServletPath()    //获取servlet的映射路径

request.getContextPath()    //获取servlet中Context的路径

request.getRemoteAddr()    //获取请求的IP地址

  c.通过url地址传参

<a href="login?userName=zhangsan&userType=1">登陆<a>    <!--其中userName和userType都为name的值,zhangsan和1都为value的值-->

  d.解决get方式中乱码问题

userName = new String(userName.getBytes("ISO-8859-1"),"utf-8")

  e.请求头信息:

Enumeration<String> names = request.getHeadNames();

while(names.hasMoreElements()){

String name = (String)names.nextElement();
String value = request.getHeader(name); }

7.Enum(枚举)

  a.作用:规定一定范围的数据取值范围

  b.用法:

//申明
public enum WeeK{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
} //使用
public static void main(String[] args){
test(Week.Sunday);
} public void test(Week w){
}

8.文件上传

  a.注意:

    ①表单的提交方式只能是post

    ②表单必须设置为复合类型表单

<form action="UploadServlet" method="post" ectype="multipart/form-data">
<input type="file" name="photo"/>
</form>

    ③在表单标签中必须要有name属性(<input>中)

  b.用法:

    public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //处理文件上传操作 //在硬盘中去创建一个FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory(); //文件上传处理类
ServletFileUpload fileUpload = new ServletFileUpload(factory); //设置上传文件的大小,以字节为单位
fileUpload.setFileSizeMax(2*1024*1024); try {
List<FileItem> items = fileUpload.parseRequest(request); for(FileItem item : items){ if(!item.isFormField()){
upload(item);
}else{
// item.getString();
} } } catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} private void upload(FileItem item){ //将虚拟路径转换为物理路径
// System.out.println(getServletContext().getRealPath("image"));
String path = getServletContext().getRealPath("img"); File file = new File(path+"/"+new Date().getTime()+item.getName()); try {
item.write(file); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

9.文件下载

        String fileName = request.getParameter("file");

        response.setHeader("Content-Disposition", "attachment; filename=" +fileName );

        String path = getServletContext().getRealPath("img");

        File file = new File(path + "\\"+fileName);

        FileInputStream inputStream = new FileInputStream(file);

         ServletOutputStream  out = response.getOutputStream();

         byte[] bytes = new byte[1024];
int b = 0;
while(( b = inputStream.read(bytes))!=-1 ){
out.write(bytes,0,b);
out.flush();
}
out.close();

10.转发

  a.语法:

request.getRequestDispatcher("login.html").forward(request,response);

  b.与重定向的区别

    ①转发:整个过程只发送了一次请求;重定向:发送了2次请求

    ②转发:地址栏不会发生变化;重定向:地址栏会发生变化

  c.转发中的request属性

request.setAttribute("msg","hello");    //属性值为Object类型的

String msg = (String) request.getAttribute("msg");

Java 之 Web前端(一)的更多相关文章

  1. 如何自学编程,零基础适合学习Java或者Web前端吗,非科班的能学java吗?

    很多人都会选择自学Java或者前端,相信有在校的大学生,有正在上班想转行的,也有已经在自学的.下面通过几个问题我来给大家分析学习编程的难易程度. 编程是什么? 通俗的理解,编程就是编写程序,哪什么是程 ...

  2. 从java到web前端再到php,一路走来的小总结

    java的学习: 初学者对Java的学习,上来的感觉都是比较难,感觉java的东西很多,如此多的类和接口.有时还弄不懂为啥实例化出一个int空数组为什么数组中默认都是0,实例化一个空字符串数组时(St ...

  3. Java与Web前端发展前景及薪资对比

    Web前端和Java谁的薪资待遇高?关于这个问题,是很多网友都感兴趣的,在各大论坛贴吧上也看到了不少类似的问题. 现在的互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是关于学习什么技 ...

  4. Java 之 Web前端(三)

    1.JSP a.全称:Java Server Page b.运行:翻译.编译.类装载.类实例化.(初始化.服务.销毁 (这三点为Servlet的生命周期)) 2.JSP的基本组成 a.HTML模板 注 ...

  5. Java 之 Web前端(四)

    1.EL表达式 a.语法: <%pageContext.setAttribute("page","page") %> ${page} b.适用:pa ...

  6. Java 之 Web前端(二)

    1.Cookie (客户端所拥有) a.含义:服务器给浏览器的甜点 b.语法: //创建Cookie Cookie cookie = new Cookie("name", &quo ...

  7. 零基础如何学习Java和web前端

    今天说一下零基础到底能不能学习Java,为什么有的人说学不了呢,那么接下来我为大家揭晓,零基础到底适合不适合学习Java. 零基础学习Java的途径第一个就是看视频,然后就是看书,或者在线下报个培训班 ...

  8. Java 之 Web前端(六)

    1.AJAX a.定义:异步的 JS 和 XML b.作用:不重新加载页面的情况下,与服务器的数据进行交互,改变网页的部分内容 c.语法: <html> <head> < ...

  9. Java 之 Web前端(五)

    1.过滤器 a.定义:是一个中间组件,用于拦截源数据和目的数据之间的消息,并过滤二者之间传递的数据 b.步骤: ①建class继承Filter实现抽象方法 public class EncodingF ...

随机推荐

  1. mysql 安装问题二:mysqld: Can't create directory 'E:\Software\mysql-5.7.24-winx64\data\' (Errcode: 2 - No such file or directory)

    原因:my.ini文件中的basedir(设置mysql的安装目录).datadir(设置mysql数据库的数据的存放目录)与MySQL解压后的路径不一致 解决办法: 将basedir=E:\Soft ...

  2. 直径上的乱搞 bzoj1999求树直径上的结点+单调队列,bzoj1912负权树求直径+求直径边

    直径上的乱搞一般要求出这条直径上的点集或者边集 bzoj1999:对直径上的点集进行操作 /* 给出一颗树,在树的直径上截取长度不超过s的路径 定义点u到s的距离为u到s的最短路径长度 定义s的偏心距 ...

  3. php 重要函数归集

    1.json_encode 与 json_decode json_encode 把数组转化成字符串 json_encode(array) json_decode 把目标字符串转成数组json_deco ...

  4. 重建控制文件报错 ORA-01503 ORA-01192

    1. 错误信息 ORA-: CREATE CONTROLFILE failed ORA-: must have at least one enabled thread 2. 重建脚本 CREATE C ...

  5. 论文阅读笔记二十:LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation(CVPR2017)

    源文网址:https://arxiv.org/abs/1707.03718 tensorflow代码:https://github.com/luofan18/linknet-tensorflow 基于 ...

  6. 论文阅读笔记八:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (IEEE2017)

    原文链接:https://arxiv.org/pdf/1511.00561.pdf github(tensorflow):https://github.com/aizawan/segnet 基于Seg ...

  7. ActiveSync 学习记录

    协议就是一种规范.它是高效团队协作的依据.有的人可能不爱看团队规范之类的文档,一方面是个人意识问题,另外也和文档的组织.协作的效果相关. 写好文档: 看好文档. 1. 处理XML转码 抓包后,发现邮件 ...

  8. 没有系列化导致错误:java.io.NotSerializableException: com.bjpowernode.bean.Team

    java.io.NotSerializableException: com.bjpowernode.bean.Team Cause: java.io.NotSerializableException: ...

  9. base | AtomicIntegerT类

    1. 原子自增操作 type __sync_fetch_and_add (type *ptr, type value) 2. 原子比较和交换(设置)操作 type __sync_val_compare ...

  10. [转] 谈谈JS中的函数节流

    函数节流的目的 从字面上就可以理解,函数节流就是用来节流函数从而一定程度上优化性能的.例如,DOM 操作比起非DOM 交互需要更多的内存和CPU 时间.连续尝试进行过多的DOM 相关操作可能会导致浏览 ...