精华内容
参与话题
问答
  • JAVA WEB开发实战

    千人学习 2018-06-07 09:45:31
    走进JSP、掌握JSP语法、JSP内置对象、Servlet技术、综合实验(一)——JSP使用Model2实现登录模块、EL表达式语言、JSTL核心标签库、综合实验(...)——Ajax实现用户注册模块——可以轻松领会Java Web程序开发的精髓...
  • 轻松搞定Java Web面试视频教程

    千人学习 2017-07-18 10:55:33
    轻松搞定Java Web面试视频培训教程主要是帮助正在找工作的毕业生或者想找更好工作的社会人员而设计的一系列课程。本人根据自己在阿里,爱奇艺,饿了么,携程,2345,小米,招商银行等等大公司的面试经验而总结出这样...
  • 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。...

    一、Spring Boot简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。SpringMVC是非常伟大的框架,开源,发展迅速。优秀的设计必然会划分、解耦。所以,spring有很多子项目,比如core、context、bean、mvc等。这对知根底的人来说很简单明了,然而springmvc就是为了傻瓜式的操作而发明的。对于初学springmvc的人来说,想要入手就开发需要拷贝一连串的dependency而不知道这个是干嘛,不知道是不是少了依赖。像我刚接触springmvc的时候到处百度教程而发现各有不同,于是复制了一个又一个代码却不能自己设置,根本原因是不了解各个依赖的包。

    Spring-Boot 正是为了解决繁复的代码配置而产生的。Spring-Boot 也是基于java-base 开发的代码,及不用xml文件配置,所有代码都由java来完成。还可以加入Groovy的动态语言执行。

    本文是一个Spring Boot入门级的helloworld程序。

     

    二、准备工作

    • Java JDK1.7(安装过程省略)
    • maven:apache-maven-3.3.9(安装过程省略)
    • eclipse(安装过程省略)
    • spring-boot-1.5.1

    三、用Spring Boot新建web项目

    新建一个maven工程(注意,不要勾选create from archytype,虽然它会帮你创建骨架,但是会从外网下载一些东西,很慢,导致会卡在那,下载东西的时间,还不如手工创建一下目录,分分钟搞定)。

    然后输入相应的groupId,artifactId。

    项目创建过程就省略了。项目建好后,目录结构是这样的:

    打开pom.xml文件,添加<parent></parent>节点:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>myproject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.0.RELEASE</version>
        </parent>
        <!-- Additional lines to be added here... -->
    </project>

    上面没有添加任何依赖,但仍然可以build。使用命令行:mvn package 对项目进行打包。

    注意,是当前项目路径E:\workspace-springBoot\zsqSpringBoot>下执行命令。当然,你也可以使用IDE,不过使用文本编辑器会让我们对它更理解。

    现在需要添加依赖 -- 其实就是把依赖的jar添加到buildpath。由于我们已经继承了 spring-boot-starter-parent ,而 spring-boot-starter-parent 又提供了 dependency-management ,所以我们可以忽略被选中依赖的版本。

    在添加依赖之前,我们先看一下现在已有什么:mvn dependency:tree。该命令会打印一个当前项目的依赖树。

    结果表明,当前没有任何依赖。 如下:

    OK,现在我们添加spring-web项目依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    现在再次查看一下依赖树。


     

    可以看出,spring-boot-starter-web  包含了很多内容,spring-webmvc、spring-web、jackson、validation、tomcat、starter。

     

    好,接下来修改pom.xml,我直接贴上我的pom.xml完整配置信息:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.zsq.msb</groupId>
    	<artifactId>zsqSpringBoot</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    
    	<!-- Maven POM文件继承 spring-boot-starter-parent -->
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.4.0.RELEASE</version>
    	</parent>
    
    	<!-- 为一个web应用程序添加典型的依赖关系, Starter POMs依赖 -->
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    	</dependencies>
    
    	<!-- Spring Boot也提供了一个可选的 Maven Plugin来创建可执行的jars -->
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>


    可以看出,继承了spring-boot-starter-parent,依赖了junit,spring-boot-starter-web,spring-boot-maven-plugin。以前我们在spring的配置,spring-boot都会按照默认配置,帮我们弄好。(你可以像使用标准的Java库文件一样使用Spring Boot。简单的将需要的 spring-boot-*.jar 添加到classpath即可。)

    Spring Boot不要求任何特殊的工具集成,所以可以使用任何IDE,甚至文本编辑器。只是,仍然建议使用build工具:Maven 或 Gradle。

    Spring Boot依赖使用 org.springframework.boot groupId 。通常,让你的Maven POM文件继承 spring-boot-starter-parent,并声明一个或多个 Starter POMs依赖即可。Spring Boot也提供了一个可选的 Maven Plugin来创建可执行的jars。

    需要注意的是, spring-boot-starter-parent 是一个非常好的方法,但并不适用于所有情况。有时你需要继承其他的POM,或者你不喜欢默认的设置,可以使用另外的方式。
    完成后下载了相关的额jar包,如下图:

     

     

     

     

    现在就可以开始写代码了。 由于Maven默认编译路径为 src/main/java 下面的源码,所以,默认设置下,需要创建这些文件夹。然后,编写文件 src/main/java/Example.java:

    package com.zsq.msb.dexam;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @Controller
    @EnableAutoConfiguration
    public class Example {
    	
    	 @RequestMapping(value ="/home", method = RequestMethod.GET)
    	 @ResponseBody
    	public String home(){
    		return "你好,Spring Boot";
    	}
    	
    	public static void main(String[] args){
    		SpringApplication.run(Example.class, args);
    		
    	}
    	
    
    }
    

    这里我们只需要关心 @EnableAutoConfiguration 即可。这个注解是让Spring Boot猜测 你想怎么配置Spring,但实际上,它是根据你添加到classpath中的依赖来判断的。

    注意,自动配置 可以配合 Starter POMs 一起工作,但二者不是捆绑到一起的。你仍然可以将Starter POMs中的依赖单独拣出使用,Spring Boot还是会自动配置。

    现在可以右键运行main方法,效果如下:

    当你看到这样的运行后的效果,说明配置是成功的,这样也就相当于项目已经启动了。(当然,由于我们使用了 spring-boot-starter-parent POM,所以可以使用 mvn spring-boot:run来启动项目(根路径)。)

    注意:在启动之前,先使用Maven来install(打包),你可以在/target目录下看到zsqSpringBoot-0.0.1-SNAPSHOT.jar,大约10 Mb左右。可以通过 jar tvf target/zsqSpringBoot-0.0.1-SNAPSHOT.jar来查看其中的内容。此外,在/target目录下,还可以看到 zsqSpringBoot-0.0.1-SNAPSHOT.jar.original,这是Maven打包出来的。也可以使用命令来启动项目,在项目文件下执行命令如:java -jar target/zsqSpringBoot-0.0.1-SNAPSHOT.jar。

    使用命令启动项目效果如下:

    执行 ctrl+c,退出。

    另外,查看日志可以发现默认使用的是tomcat,端口绑定在8080:

    现在让我们来访问:http://localhost:8080/home。如下图:

    就可以看到我们代码中输出的字样:“你好,Spring Boot”了。

    回首这个过程,是不是相比于以前快速了许多呢!!

    源码下载地址:http://download.csdn.net/detail/zsq520520/9753537

    展开全文
  • Java web

    千次阅读 多人点赞 2014-10-08 14:00:45
    Java web Java web Java web Java web Java web Java web Java web Java webJ ava web
    Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java
     web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java
     web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java
     web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java
     webJava web Java web Java web Java web Java web Java web Java web Java web Java webJava web Java web Java web Java web Java web Java web Java web Java web Java web
    
    展开全文
  • Java Web之过滤器(Filter)

    万次阅读 多人点赞 2018-07-31 16:58:40
    过滤器实际上就是对web资源进行拦截,做一些处理后再交给servlet。 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 大概流程图如下 应用场景 自动登录 统一设置编码格式 访问权限...

    过滤器(Filter)


    过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
    通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理

    大概流程图如下

    这里写图片描述

    应用场景
    自动登录
    统一设置编码格式
    访问权限控制
    敏感字符过滤等


    创建Filter

    在Servlet中我们一般都会对request和response中的字符集编码进行配置,如果Servlet过多字符集编码发生变化时修改起码会很麻烦,这些通用的字符集编码配置等工作我们可以放到Filter中来实现。
    下面我们来创建一个处理字符集编码的Filter。

    右键包名—>new ---->Filter

    这里写图片描述

    输入过滤器名称,跟创建Servlet一样,这里我们直接使用 @WebFilter 注解,不再去web,xml中进行配置了。

    这里写图片描述

    创建完成后默认代码,可以看到,CharsetFilter实现了Filter接口,实现了3个方法。3个方法的作用已经在注释中写清楚了。

    package filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter(filterName = "CharsetFilter")
    public class CharsetFilter implements Filter {
        public void destroy() {
            /*销毁时调用*/
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            /*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
           
            chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
        }
    
        public void init(FilterConfig config) throws ServletException {
    
            /*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
    
        }
    
    }
    
    

    配置Filter

    可配置的属性有这些

    这里写图片描述

    常用配置项
    urlPatterns
    配置要拦截的资源

    1. 以指定资源匹配。例如"/index.jsp"
    2. 以目录匹配。例如"/servlet/*"
    3. 以后缀名匹配,例如"*.jsp"
    4. 通配符,拦截所有web资源。"/*"

    **initParams **
    配置初始化参数,跟Servlet配置一样

    例如

    initParams = {
            @WebInitParam(name = "key",value = "value")
    }
    

    dispatcherTypes **
    配置拦截的类型,可配置多个。默认为
    DispatcherType.REQUEST**
    例如

    dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}
    

    其中DispatcherType是个枚举类型,有下面几个值

    	FORWARD,//转发的
        INCLUDE,//包含在页面的
        REQUEST,//请求的
        ASYNC,//异步的
        ERROR;//出错的
    

    下面我们来对CharsetFilter 代码进行一下修改

    package filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.annotation.WebInitParam;
    import java.io.IOException;
    
    @WebFilter(filterName = "CharsetFilter",
            urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/
            initParams = {
                    @WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/
            })
    public class CharsetFilter implements Filter {
        private String filterName;
        private String charset;
    
        public void destroy() {
            /*销毁时调用*/
    
            System.out.println(filterName + "销毁");
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            /*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
    		System.out.println(filterName + "doFilter()");
            req.setCharacterEncoding(charset);
            resp.setCharacterEncoding(charset);
            chain.doFilter(req, resp);
        }
    
        public void init(FilterConfig config) throws ServletException {
    
            /*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
    
            filterName = config.getFilterName();
            charset = config.getInitParameter("charset");
    
            System.out.println("过滤器名称:" + filterName);
            System.out.println("字符集编码:" + charset);
    
        }
    
    }
    
    

    这样一个简单的字符集编码处理的过滤器就完成了
    我们看看执行打印的结果
    这里写图片描述

    需要注意的是
    过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.
    当Filter被移除或服务器正常关闭时,会执行destroy方法


    多个Filter的执行顺序

    在我们的请求到达Servle之间是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。这样,我们也无需关心执行顺序问题。
    如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下

    1. 在web.xml中,filter执行顺序跟<filter-mapping>的顺序有关,先声明的先执行
    2. 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
    3. 如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter

    我们写个小例子看一下

    新建3个Filter,加上之前的CharsetFilter一共四个

    这里写图片描述

    其中CharsetFilterABFilter是通过注解声明的

    CharsetFilter注解配置

    
    @WebFilter(filterName = "CharsetFilter",
            urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/
            initParams = {
                    @WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/
            })
    

    ABFilter

    @WebFilter(filterName = "ABFilter",urlPatterns = "/*")
    

    AFilterBFilter是在web.xml配置的。
    执行顺序跟<filter>的顺序无关
    <filter-mapping>的顺序才决定执行顺序

    <?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">
        <filter>
            <filter-name>AFilter</filter-name>
            <filter-class>filter.AFilter</filter-class>
        </filter>
        <filter>
            <filter-name>BFilter</filter-name>
            <filter-class>filter.BFilter</filter-class>
        </filter>
    
        <!--这里BFilter在AFilter之前-->
        <filter-mapping>
            <filter-name>BFilter</filter-name>
            <url-pattern>/filter.jsp</url-pattern>
        </filter-mapping>
    
        <filter-mapping>
            <filter-name>AFilter</filter-name>
            <url-pattern>/filter.jsp</url-pattern>
        </filter-mapping>
    
       
    </web-app>
    

    每个Filter添加了打印语句,如下
    以ABFilter为例

    package filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter(filterName = "ABFilter",urlPatterns = "/*")
    public class ABFilter implements Filter {
        private String filterName;
    
        public void destroy() {
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            System.out.println(filterName + "  doFilter()");
            chain.doFilter(req, resp);
        }
    
        public void init(FilterConfig config) throws ServletException {
            filterName= config.getFilterName();
            System.out.println("过滤器名称:" + filterName +" init");
        }
    
    }
    
    

    下面我们来访问filter.jsp看看打印结果

    这里写图片描述

    可以看到,执行结果符合预期。
    BFilter和AFilter是在web.xml中声明的,且BFilter的<filter-mapping>在前,故BFilter在AFilter之前执行。
    ABFilter和CharsetFilter是通过注解声明的,故他俩在BFilter和AFilter之后执行,但是ABFilter的名称以A开头,故在CharsetFilter之前执行

    这里写图片描述


    访问权限控制小例子##

    下面我们写一个访问控制权限控制的小例子。
    我们在浏览一些网站经常有这个情况,没有登录时是不允许我们访其主页的,只有登录过后才能访问。
    下面我们就用Filter简单实现一下。

    需求分析

    1. 登录时将登录的账号密码保存到cookie中,下次访问时携带账号和密码,过滤器中进行校验
    2. 用户没有登录直接访问主页时,要跳转到登录页面
    3. 登录过滤器不对登录页面进行过滤

    我们先来看一下项目结构

    这里写图片描述

    这里主要看一下LoginFilter的代码

    我们在LoginFilter中对非登录页面的其他jsp都会进行过滤,判断cookie中是否携带了account和pwd。
    如果有这两个数据表示之前登录过,那么对数据进行校验,正确的话就进行下一个操作。
    否则的话,跳转到登录界面

    package filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebFilter(filterName = "LoginFilter", urlPatterns = "*.jsp", dispatcherTypes = {})
    public class LoginFilter implements Filter {
        public void destroy() {
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
            System.out.println("LoginFilter doFilter");
    
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
    
            String url = request.getRequestURI();
    
            System.out.println("请求的url:" + url);
            /*登录页面不需要过滤*/
    
            int idx = url.lastIndexOf("/");
            String endWith = url.substring(idx + 1);
    
    
            if (!endWith.equals("login.jsp")) {
                /*不是登录页面  进行拦截处理*/
    
                System.out.println("不是登录页面,进行拦截处理");
    
                if (!isLogin(request)) {
                    System.out.println("没有登录过或者账号密码错误,跳转到登录界面");
                    response.sendRedirect("login.jsp");
                } else {
                    System.out.println("已经登录,进行下一步");
                    chain.doFilter(req, resp);
                }
    
            } else {
    
                System.out.println("是登录页面,不进行拦截处理");
                chain.doFilter(req, resp);
            }
    
    
        }
    
    
        private boolean isLogin(HttpServletRequest request) {
    
            Cookie[] cookies = request.getCookies();
    
            String account = "";
            String pwd = "";
    
            if (cookies != null && cookies.length > 0) {
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals("account")) {
                        account = cookie.getValue();
                    } else if (cookie.getName().equals("pwd")) {
                        pwd = cookie.getValue();
                    }
                }
            }
    
            if (account.equals("") || pwd.equals("")) {
                return false;
    
            } else if (account.equals("yzq") && pwd.equals("123")) {
                return true;
            }
    
    
            return false;
        }
    
        public void init(FilterConfig config) throws ServletException {
            System.out.println("LoginFilter  init");
        }
    
    }
    
    

    执行效果

    这里写图片描述

    可以看到,我们在没有登录的情况下直接去访问index.jsp页面时会自动跳转到登录页面,在登录成功后,再次直接访问index页面则可以访问。

    下面是demo

    访问控制demo


    如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

    展开全文
  • java web开发实战1200例 第二卷 源码

    千次下载 热门讨论 2013-04-01 18:30:07
    范围两个压缩部分,请留意下载后解压!...《Java Web开发实战1200例(第2卷)》非常适合Java Web项目开发人员、Java Web初学者及编程爱好者使用,同时也可以作为培训机构、大中专院校老师和学生的实践参考用书。
  • java web开发(二) 接口开发

    万次阅读 多人点赞 2016-06-03 16:50:34
    java web开发(一) 环境搭建讲解了如何搭建一个Java Web项目,如果你还没了解,建议先浏览下!今天这篇文章主要讲解的就是接口开发,打算使用比较古老的或者说比较原始方法实现的接口。 一.数据库设计。 假设要做...

        java web开发(一) 环境搭建讲解了如何搭建一个Java Web项目,如果你还没了解,建议先浏览下!今天这篇文章主要讲解的就是接口开发,打算使用比较古老的或者说比较原始方法实现的接口。

    一.数据库设计。

        假设要做一个简单的学生信息管理系统,数据库名为students_manage,并且先设计一张学生表,表名为student。

    1.打开Sqlyong工具,如果还没创建连接,可以点击新建,输入名称,点击确定即可,

    2.然后在保存的连接中选择,刚刚新建的连接,只需要在密码输入框中输入,安装数据库时的设置的密码,点击连接,其他的默认即可,

    如果都ok的话,那么将会出现如下界面,就代表连接成功了!

    3.连接成功后,首先创建数据库,在左边的空白区域,鼠标右键,创建数据库,输入数据库名称students_manage,其他的默认,

    点击创建即可,然后在左边的数据库列表中会多一个students_manage的数据库,

    4.创建数据库成功后,我们便可以创建数据库表,选中students_manage的数据库中的Tables文件夹,右边,创建表,输入表的字段,类型,设置主键,是否可为空等,

    点击创建表按钮,便会看到在Tables文件夹中,多一个student表,

    5.双击student表,便会打开该表。我们需要给该表中,先初始化一些数据,点击表数据,然后插入数据,点击保存。

    此时表中已有2条记录。

    数据库的简单设计就差不多了,接下来,我们需要开发接口!

    PS: 实际开发中,数据库设计肯定不是这样的,需要先根据需求分析,做出原型,画出模型图(类图、活动图等),然后使用专门的数据库建模工具,完成数据库与表的设计!

    二.接口项目开发。(如果对这一部分有疑问或者不清楚的,欢迎查看java web开发(四) 接口开发补坑1 java web开发(五) 接口开发补坑2!)

        接口返回的数据格式是JSON,如果你对JSON还不熟悉,可以先看看文章 JSON 使用讲解JSON 解析

       1.新建项目。这个就不多说了!这一块要是还不了解,请看这篇文章, java web开发(一) 环境搭建

       2.设计接口的Json数据格式。

        2.1.接口返回的Json数据格式如下:

       (1).返回对象,

    {"code":" ","msg":" ","time":1464937933230,"object":{}}

       (2).返回数组,

     

    {"code":" ","msg":" ","time":1464937933230,"items":[{},{}]}

    好多读者都留言,有“code”这个属性不解。  这儿说明下,  Json格式数据中的“code”属性是响应状态码,是标志接口数据的状态!例如当接口数据返回成功,会设置code为‘ok’。当我们拿到这个“code”时,会根据不同的值,做不同的处理。当“code”等于“ok”时,我们就可以正常解析这个json数据了;返回其他值,我们就只需要作出提示即可。而具体code值是什么,要根据接口自己定义一个规范,当调用者拿到这个code时,就知道如何处理了。有关这个“code”,更加详细的内容,请看 java web开发(五) 接口开发补坑2

    目前就设计返回以上两种格式。如果你有分页的话,也可以加上。下面,就展示一下具体实现。

        (1).建立AbstractJsonObject(Json数据的基类),具体实现如下:

     

    public class AbstractJsonObject {
            //code
    	private String code;
    	//msg
    	private String msg;
    
    	private Long time = new Date().getTime();
    
    	public String getCode() {
    		return code;
    	}
    
    	public void setCode(String code) {
    		this.code = code;
    	}
    
    	/**
    	 * @return the time
    	 */
    	public Long getTime() {
    		return time;
    	}
    
    	/**
    	 * @param time
    	 *            the time to set
    	 */
    	public void setTime(Long time) {
    		this.time = time;
    	}
    
    	public String getMsg() {
    		return msg;
    	}
    
    	public void setMsg(String msg) {
    		this.msg = msg;
    	}
    
    	public void setContent(String code, String msg) {
    		this.code = code;
    		this.msg = msg;
    	}
    
    	public void setStatusObject(StatusObject statusObject) {
    		this.code = statusObject.getCode();
    		this.msg = statusObject.getMsg();
    	}
    }
    

        其中,StatusObject是一个状态对象,封装了状态码(code)和状态信息(msg),具体实现如下:

     

     

    /**
     * 状态对象
     */
    public class StatusObject {
    	// 状态码
    	private String code;
    
    	// 状态信息
    	private String msg;
    
    	public StatusObject(String code, String msg) {
    		super();
    		this.code = code;
    		this.msg = msg;
    	}
    
    	public String getCode() {
    		return code;
    	}
    
    	public void setCode(String code) {
    		this.code = code;
    	}
    
    	public String getMsg() {
    		return msg;
    	}
    
    	public void setMsg(String msg) {
    		this.msg = msg;
    	}
    
    }
    

        (2).建立Json对象类SingleObject,代码:

     

     

    public class SingleObject extends AbstractJsonObject {
    
    	private Object object;
    
    	public Object getObject() {
    		return object;
    	}
    
    	public void setObject(Object object) {
    		this.object = object;
    	}
    
    }

        (3).建立Json数组类ListObject,代码:

     

     

    public class ListObject extends AbstractJsonObject {
    
    	// 列表对象
    	private List<?> items;
    
    	public List<?> getItems() {
    		return items;
    	}
    
    	public void setItems(List<?> items) {
    		this.items = items;
    	}
    
    }

    经过上面几步,我们所需要的json格式数据就创建好了,接下来就是生成json数据了,这儿使用jackjson,JackJson 库下载。下载完jackson库后,将三个包导入到项目的lib目中,截图所示:

     

       (4).JackJsonUtils生成json数据和解析json数据,代码:

     

    public class JackJsonUtils {
    	static ObjectMapper objectMapper;
    	/**
    	 * 解析json
    	 * 
    	 * @param content
    	 * @param valueType
    	 * @return
    	 */
    	public static <T> T fromJson(String content, Class<T> valueType) {
    		if (objectMapper == null) {
    			objectMapper = new ObjectMapper();
    		}
    		try {
    			return objectMapper.readValue(content, valueType);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    	/**
    	 * 生成json
    	 * 
    	 * @param object
    	 * @return
    	 */
    	public static String toJson(Object object) {
    		if (objectMapper == null) {
    			objectMapper = new ObjectMapper();
    		}
    		try {
    			return objectMapper.writeValueAsString(object);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    }

        至此,json数据设计就ok了!是不是没有想象的那么难?也许,就真的这么简单!接下来,就是接口的开发了。

     

        3.接口开发。

          本篇文章开发接口使用的是古老的servlet实现的,关于servlet,请自行查找资料,这里就不多说了(其实我也就一知半解)

          3.1.创建一个类继承自HttpServlet,例如StudentInq,鼠标右键,新建->选择Servlet,截图所示输入Servlet名称,点击Finish按钮,就ok了!

    此时你会发现包下多了一个StudentInq类,具体代码:

     

    public class StudentInq extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	/**
    	 * @see HttpServlet#HttpServlet()
    	 */
    	public StudentsInq() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    	 *      response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    	 *      response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    
    		doGet(request, response);
    	}
    
    }

        实现HttpServlet的doGet()和doPost方法,此处为了简单就只实现doGet()。

     

    PS: 如果你比较细心的话,会发现在web.xml文件中多了几行代码,具体如下截图:(web.xml 是网络程序中的一个很重要的配置文件,更具体的、详细的请查询相关文档)

    可以看到我们刚才新建servlet,在这个xml文件中显示了。后面我们在调用接口的时候便会用到这个配置清单。

        3.2. 接口实现。

        我们就简单的实现一个学生查询接口!调用查询接口,返回数据库中所有的学生信息。

       (1).新建一个接口StudentService,代码:

     

    public interface StudentService {
    	public List<Students> getAllStudents();
    }

        (2). 实现该接口,StudentServiceImpl代码:

     

     

    public class StudentServiceImpl implements StudentService{
    
    	@Override
    	public List<Students> getAllStudents() {
    		// TODO Auto-generated method stub
    		return StudentBusiness.getAllStudents();
    	}
    
    }

       其中,StudentBusiness提供了从数据库获取学生信息的方法。有关数据库操作下面会讲到。接着,我们实现Servlet的doGet(),具体代码:

     

     List<Students> list = new StudentServiceImpl().getAllStudents();
    		ListObject listObject=new ListObject();
    		listObject.setItems(list);
    		listObject.setStatusObject(StatusHouse.COMMON_STATUS_OK);
    		String responseText = JackJsonUtils.toJson(listObject);
    		ResponseUtils.renderJson(response, responseText);

     

       其中,ResponseUtils是将返回的json数据写入到response中。

       至此,生成json数据已经成功了!但是 貌似少了什么操作?这些数据是从哪里来的?原来数据库还没有连接呢!!!好吧!请继续看下文。

       4. 数据库连接。

        文章开头,我们已经创建好了数据库以及表,并且也添加了几条测试数据。数据有了,我们需要在项目中获取到,那么该怎么操作呢?

       (1). 数据库连接。

        我们连接mysql数据库,需要导入mysql-connector.jar,jar包下载链接下载好jar后,导入到lib目录中,

       (2). 建立DBHelper连接数据库以及关闭连接:

     

    public class DBHelper {
    	
    	 public static final String url = "jdbc:mysql://localhost:3306/students_manage";  
    	    public static final String name = "com.mysql.jdbc.Driver";  
    	    public static final String user = "****";  
    	    public static final String password = "******";  
    	  
    	    public Connection conn = null;  
    	    public PreparedStatement pst = null;  
    	  
    	    public DBHelper(String sql) {  
    	        try {  
    	            Class.forName(name);//
    	            conn = DriverManager.getConnection(url, user, password);//
    	            pst = conn.prepareStatement(sql);//
    	        } catch (Exception e) {  
    	            e.printStackTrace();  
    	        }  
    	    }  
    	  
    	    public void close() {  
    	        try {  
    	            this.conn.close();  
    	            this.pst.close();  
    	        } catch (SQLException e) {  
    	            e.printStackTrace();  
    	        }  
    	    }  
    
    }

    代码很简单了,不需要多说!

     

        这一步,我们是连接数据库,连接成功后,就可以使用表中的数据了!

    PS: 实际开发中,有关数据库操作,肯定不是这么简单的!比较常用的是框架来管理数据库相关操作,例如SpringMvc、hibernate和mybats等框架。

    三. 运行。

        经过上面几步,我们就大致完成了一个简单使用Servlet的接口开发,接下来就是见证奇迹的时刻了!

    PS: 在运行前,可以在WebContent中添加一个index.jsp,index.jsp代码:

     

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>hello world!</h1>
    	<h2>This is my test page!</h2>
    	<h3>Welcome to my page!</h3>
    </body>
    </html>

     

     (1).在项目上,右键->Run As->Run to Server。

    如果一切都正常的话,(如果你创建了index.jsp,你会看到一个jsp页面;如果没有创建index.jsp,可能会显示一个404界面,当然没有创建index.jsp不会影响咱们接口的调试)

       (2).我们在浏览器中输入‘http://localhost:8080/mServer/StudentInq’,如果一切都正常的话,会显示:

       或者在浏览器中输入本机的ip地址,例如’http://192.168.1.133:8080/mServer/StudentInq‘,

    看到这个界面,顿时泪流满面!!

    四. 总结。

        这么长的篇幅终于实现了简单接口的开发,不容易啊!太感动了!我们总结一下本篇博客实现开发接口的步骤:

    (1). 数据库表设计;

    (2). json数据设计;

    (3). 接口实现。

      总结后,是不是感觉很简单呢!从此以后,只要看到接口数据不如意的,你都可以随便来改!!(实际上接口开发要牵扯好多东西,如果你要了解或者熟悉更多有关接口开发,那么就需要结合Web框架,例如SSH,Springmvc等等,本篇文章只是很基础的入门开发)至此,通过这篇文章,相信你对接口不再生疏了!下篇文章将介绍,后台接口服务和前端客户端结合,详情请看,java web开发(三) 接口使用

      最后补上,例子下载地址。由于csdn下载需要积分,所以,我在github上也放置了源码,下载地址是,接口开发服务端源码地址

     PS: json格式化工具

    推荐文章:SpringMVC 开发接口

     

    博文中经常有小伙伴留言,有关接口项目的问题,最近就推出几篇补坑的文章,打算这几篇文章详解项目中的代码以及业务流程,java web开发(四) 补坑1 java web开发(五) 接口开发补坑2!欢迎大家查看!

     

    最近才开通了微信公众号,欢迎大家关注。

     
    展开全文
  • java web项目中如何插入背景图片

    万次阅读 2018-11-12 20:12:59
    对于java可视化界面插入背景图片这个倒是轻而易举,只需要background-inage:url(图片路径就行),而对于与web项目中,我开始时也是采用这种方法,但是不尽然,代码如下: &lt;div class='ban' style="...
  • Java Web整合开发王者归来(共4部分含源代码)part1

    千次下载 热门讨论 2012-09-25 13:26:35
    Java Web整合开发王者归来(共4部分含源代码) 并且源代码比光碟中的新,光盘中的代码有部分不全,有两个项目没有,现已打上补丁。 PDF文件解压缩后324M,源代码压缩文件65.5M 其它3部分下载页面: Java Web整合开发...
  • 宝塔部署java web项目

    万次阅读 多人点赞 2018-01-29 20:25:59
    宝塔部署javaweb项目完整篇,给想要使用宝塔部署java web项目的人一些参考,觉得不错的可以在下方留言点赞哦,有错误的地方也请大家帮忙指出,发消息给我吧,我好修改。 1.首先,登录宝塔面板(安装就不说了,...
  • Java WEB 分页实现

    万次阅读 多人点赞 2016-04-16 13:08:26
    Java Web 分页实现设计基于 MySQL 的关键字 limitm,n 从指定下标位置 m 开始返回 n 条记录,实现查询某一页的列表数据;前端控制分页"组件",此处组件是手写的,基本效果是支持跳转首页、尾页、以及展示出的页码,...
  • Java的大部分吧都是要整Java web开发项目的,那么最好用的编辑器估计就是这个 IntelliJ IDEA,然后现在maven管理项目是很流行的。 然后我就示范一下,如何使用这个IntelliJ IDEA 创建一个Java web 项目的hello ...
  • Java Web高级技术

    万人学习 2015-04-23 17:57:44
    本次课程涉及到Java Web开发中的各项技术, 1.过滤器的基本原理及应用,过滤器的编码处理案例,过滤器简单的用户权限管理的实现 2.Cookie实现用户自动登录案例 3.JSTL标准标签库的各类标签 4.Tag技术的使用 5....
  • Java Web入门

    万人学习 2015-04-23 11:58:22
    Jsp,Servlet从入门到精通课程,后以一个图书管理的小项目结束课程。
  • Java Web简单的注册登陆界面(mysql+servlet+jsp)

    万次阅读 多人点赞 2017-05-12 20:18:47
    通过一段时间Java Web的学习,写一个简单的注册界面来做个总结,也方便与大家分享交流。首先我们先写一个UserBean,代码如下: package com.szx.jnmc; public class User { private String username; private ...
  • Java Web项目企业事务管理系统源码

    万次阅读 2016-11-07 10:34:27
    原文:Java Web项目企业事务管理系统源码 源代码下载地址:http://www.zuidaima.com/share/1853201815653376.htm 项目有mysql、sql server2000和sql server2005三个版本的,我只测试了mysql的,其他没有...
  • Java Web中间件

    千次阅读 2018-11-20 09:42:23
    常见的web中间件有哪些 Tomcat Weblogic Jboss Jetty Webshere Glasshfish 中间件 我们经常会看到中间件,但是,一直好奇的是,中间件到底是什么? 中间件(英语:Middleware)是提供系统软件和应用软件...
  • Java Web进阶开发

    万人学习 2015-04-23 17:40:10
    通过一个在线用户,访客管理的项目,让你对listener有更深的了解,对session,application的理解更进一步。主要课时分为以下几个方面: 1.需求分析 2.项目数据库初始化模块实现 3.监听器基本原理及访客到达的处理...
  • 基于Java web的在线考试系统

    千次阅读 多人点赞 2019-10-12 22:14:40
    基于Java web的在线考试系统 功能点: 三个角色:管理员,教师,学生 技术点: java+spring+struts+maven IntelliJ IDEA 2019.1 x64 tomcat mysql 1.主界面 2.登陆以后 3.考试列表 4.导入试题 5.制作试卷 6....
  • Java Web开发常见问题.pdf

    千次下载 热门讨论 2013-04-21 03:50:00
    Java Web开发常见问题.pdf
  • java web 项目 eclipse版本: MARS Tomcat版本: 8.0 空跑Tomcat不报错 一旦加载项目进去跑就报了一大堆错误 确认项目没有问题 在别的机子上都可以跑 ``` java.util.concurrent.ExecutionException: org.apache....
  • Java Web之Servlet开发

    千人学习 2019-12-20 10:15:06
    本课程是Java Web开发的核心容器Servlet,课程内容包括:环境配置、Tomcat、Servlet表单处理、Filter、Listener、Cookie、Session、数据库访问等。
  • Java Web技术总结

    千次阅读 2018-06-29 18:09:36
    Java Web技术与Spring源码总结 这篇总结主要是基于我之前两个系列的文章而来。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢 更多详细内容可以查看我的专栏文章: JavaWeb...
  • Java Web之Ajax

    千次阅读 2018-07-30 15:22:55
    在之前的学习web前端专栏中已经对Ajax相关知识有过介绍了,不清楚的同学可以看一下这篇博客:从零开始学习WEB前端之数据交互(Ajax) 这里就不在赘述了。 但是之前是用PHP简单的搭了个环境,既然现在学习到javaweb...
  • Java Web之环境搭建

    万次阅读 多人点赞 2018-07-23 17:12:00
    在之前的工作,一直是以Android为主,前端为辅。经过了几个项目,也基本了解了前后端数据交互到底是怎么回事儿。 但是在做项目的过程中经常有这个问题,项目初期需求定稿开始开发工作期间,服务端的同事需要搭建...
  • JAVA WEB应用目录

    千次阅读 2018-11-20 08:09:21
    目录 Tomcat目录 MyEclipse目录 部署启动应用 Tomcat目录 首先,官方下载 tomcat 安装包,解压。...startup.bat启动tomcat 、shutdown.bat关闭tomcat ...webapps 目录存放着我们的网页文件,自带有其他几个文件夹。...
  • Java web 实战项目案例

    万次阅读 2019-07-11 09:44:50
    Java web实战项目,采用MVC的设计模式,jdbc编程,由Java web+Servlet +mysql实现简单的增删改查,模糊查询,导出excel表格数据等。 以下是Java web项目详情案例 Java web+mysql+servlet+eclipse实现 Java web ...
  • 一搭建Java Web开发环境的总体概览  工欲善其事必先利其器。学会搭建Java Web开发环境是学习JSP动态网站开发的最基本技能之一。主要介绍在 Windows 7 64位操作系统下搭建Java Web开发环境的过程,主要包括JDK的安装...
  • Java Web3J概述

    万次阅读 2019-04-14 00:06:17
    1 Java Web3J概述 Web3j是一个轻量级,Reactive(响应式),类型安全的Java库,用于与Ethereum网络上的客户端(节点)集成,这允许您使用Ethereum块链,而不需要为平台编写自己的集成代码的额外开销。 1.1 Web3J的...
  • Java Web开发环境配置

    万次阅读 多人点赞 2013-05-21 11:09:28
    这是进行Java Web开发必备的一个过程,仅供新手参考,高手可以忽略! 先看看要安装的东西: 各位可以去官网上下载,版本不一定非得都一样,如果找不着就google一下,下面进入正题。 一、安装JDK 1、下载得到...

空空如也

1 2 3 4 5 ... 20
收藏数 216,260
精华内容 86,504
关键字:

javaweb

java 订阅